diff --git a/DEPS b/DEPS index 26e17cd0..a41be57 100644 --- a/DEPS +++ b/DEPS
@@ -312,19 +312,19 @@ # 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': '925c311f4b37026e285964fb7bd1b56b9b4e3ea4', + 'skia_revision': '04f08a150e243d0b3781868a943d1f72751e2747', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '892149b3c1b4db88636943e09e4d4d2f43495e9a', + 'v8_revision': '209d7cd983a57b82e8dfb375240d38869e6ede7e', # 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': '2abaa52fd032f42f22e7571649a1b81f658ee33c', + 'angle_revision': 'feb258f3e2a9c9a2308e40a9cbcfaf48bdd5713a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': 'd7bc95730bdda6c88b45c00b1bfece8a5cd99ea5', + 'swiftshader_revision': 'be8ed1d0e9173e2c0d9380ba4cffe51582aaa866', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -400,7 +400,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': 'd4a2211a75b888917546d8066eea4aee48350beb', + 'devtools_frontend_revision': '653c6a3d75c7b0782ab7c675bd88e07e3bb99444', # 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. @@ -424,7 +424,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': '80128f92cd70ee0a272009cfaf2dcc701e7eb441', + 'dawn_revision': '5f5984923015d226e61ff97790afe13351917fa7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -1115,10 +1115,10 @@ 'condition': 'non_git_source', 'objects': [ { - 'object_name': 'meet-gpu-tests/836212454.tar.gz', + 'object_name': 'meet-gpu-tests/836540114.tar.gz', 'sha256sum': '192b1d6347fac194009d39c21e2788b4749810aa2844f7157dc566165fdb8e31', 'size_bytes': 279887447, - 'generation': 1763996903720276, + 'generation': 1764059262846507, }, ], }, @@ -1206,7 +1206,7 @@ 'packages': [ { 'package': 'chromium/chrome/android/orderfiles/arm64', - 'version': 'qklCa5ADGvTgN0LR7ES7vcQR-HtZA5YKO9QkAoHy4awC', + 'version': '_qcgb-X5sw-R0dm1Ps_cTYdsY7v4OBf73HTOTFF4a3UC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1613,7 +1613,7 @@ 'packages': [ { 'package': 'chromium/chrome/test/data/variations/cipd', - 'version': 'VkN_rSF-szcyQT6JRZ2riBxwoK5JrPQiLZ_5sVD3QP0C', + 'version': 'h6IhLpPJXuzQaYKXYjzqgp2xkbAO2gg-gHV7qP9-ipEC', }, ], 'dep_type': 'cipd', @@ -1624,7 +1624,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - '9d7ae83f1c46c72d6cf73b81a033bcc274e18d91', + '211eb27e83c434921f9bb2a99a2b5a6ac0bcb02d', 'condition': 'checkout_android and checkout_src_internal', }, @@ -1724,7 +1724,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'CoKCiziKtOmoa_v9MB0d5O9x9xYpWaWPcNIOnqQJ1jQC', + 'version': '9F_0X721Ie6V6GsOBn2vBprQEiAHd9IX-8H1uS-Yg1wC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2787,7 +2787,7 @@ 'packages': [ { 'package': 'chromium/third_party/r8', - 'version': 'a4fVqbIycCDqs1714SLRqxEdz6P-sH-z1QT_eeeF0PcC', + 'version': 'sjuUu6_BDMGSci_jpKyt68J7gQ3sA59eJI7biFlTGXoC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2831,7 +2831,7 @@ Var('chromium_git') + '/external/search_engines_data.git' + '@' + 'ac5bba00f4d9a0b7b9119b70d1e7ae8ec6d8a1b3', 'src/third_party/search_engines_data/resources_internal': { - 'url': Var('chrome_git') + '/external/search_engines_data_internal.git' + '@' + 'ab395ff6dac9f780c2cb6474ff42017a334b0725', + 'url': Var('chrome_git') + '/external/search_engines_data_internal.git' + '@' + 'd796f6348f95a4ff08a8efe02f11e55c2dd257ec', 'condition': 'checkout_src_internal', }, @@ -2929,7 +2929,7 @@ 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@f1e2e0ed9389e19a4b88521061ff30578872d2e4', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@c42dd8c6ffc3d38b86ddfdb16cccb5851e3ea86f', 'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@6cfcfaf1985a765c1691f12d413a2fd2945e918f', 'src/third_party/spirv-cross/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Cross@b8fcf307f1f347089e3c46eb4451d27f32ebc8d3', 'src/third_party/spirv-headers/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Headers@b824a462d4256d720bebb40e78b9eb8f78bbb305', @@ -2938,7 +2938,7 @@ 'src/third_party/vulkan-loader/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Loader@65e5428032e4ccb2e064fa8691b96e61701d5956', 'src/third_party/vulkan-tools/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Tools@2a3347d5e74d359e3ecb8e229917f3335bfa2dfa', 'src/third_party/vulkan-utility-libraries/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Utility-Libraries@9aa2c08f82e3fb18d43e37e44015a79af7f3b672', - 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@473d80b724a3c5d0e18e216b1afb791872ed796a', + 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@c1054dbc91e22cb6d99bf5b0766c4efb18dc2bd6', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'cb0597213b0fcb999caa9ed08c2f88dc45eb7d50', @@ -2981,7 +2981,7 @@ Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '920b3b701d21e61e045dc02d5757936ad141ba19', + Var('webrtc_git') + '/src.git' + '@' + '131cd6104aa0b4e2cd07b74b2955a9f8ba6db419', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -3103,7 +3103,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/boca_receiver_app/app', - 'version': 'E__TD3icMLEsdFUdHAlqKbm2jSe1LCkBcY3qWtfF_0MC', + 'version': 'wgakaDafipGbEy_l14tLvWL1xLIkMCSlmzj3Gn678iUC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -3114,7 +3114,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/boca_app/app', - 'version': 'fbv4T0DsqUIPYLYta-nGjNr5CHnjzLrjPKepupViejYC', + 'version': 'tDyri9j9BQyjtMsz0upGKtefwRJIOmA5Bp7RHQprYH0C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/system/notification_center/views/ash_notification_view.cc b/ash/system/notification_center/views/ash_notification_view.cc index 6b93c5d..d9b1677 100644 --- a/ash/system/notification_center/views/ash_notification_view.cc +++ b/ash/system/notification_center/views/ash_notification_view.cc
@@ -457,7 +457,6 @@ Shell::Get()->message_center_controller()->drag_controller()); message_center_observer_.Observe(message_center::MessageCenter::Get()); - // TODO(crbug.com/40780100): fix views and layout to match spec. // Instantiate view instances and define layout and view hierarchy. SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kVertical,
diff --git a/ash/system/notification_center/views/conversation_notification_view.cc b/ash/system/notification_center/views/conversation_notification_view.cc index 00fa3c8..b2d6f812 100644 --- a/ash/system/notification_center/views/conversation_notification_view.cc +++ b/ash/system/notification_center/views/conversation_notification_view.cc
@@ -110,7 +110,6 @@ actions_view_->UpdateWithNotification(notification); actions_view_->SetExpanded(expanded_); - // TODO(b/333740702): Clean up string truncation. title_->SetText(gfx::TruncateString(notification.title(), kTitleCharacterLimit, gfx::WORD_BREAK)); @@ -286,7 +285,6 @@ auto title = std::make_unique<views::Label>(); title->SetID(ViewId::kTitleLabel); title_ = title_row->AddChildView(std::move(title)); - // TODO(b/333740702): Clean up string truncation. title_->SetText(gfx::TruncateString(notification.title(), kTitleCharacterLimit, gfx::WORD_BREAK)); ash::TypographyProvider::Get()->StyleLabel(TypographyToken::kCrosButton2,
diff --git a/ash/system/unified/feature_tile.h b/ash/system/unified/feature_tile.h index 6f029713..144db31 100644 --- a/ash/system/unified/feature_tile.h +++ b/ash/system/unified/feature_tile.h
@@ -76,8 +76,6 @@ // The possible states the download progress UI can be in. The download // progress UI is currently only supported for compact tiles. - // - // TODO(b/315188874): Add full support for all download states. enum class DownloadState { kNone, // The default state, e.g. this tile is not associated // with a download. If this tile is of type
diff --git a/ash/webui/print_preview_cros/mojom/printer_capabilities.mojom b/ash/webui/print_preview_cros/mojom/printer_capabilities.mojom index bb3c9e9..bb8aa28 100644 --- a/ash/webui/print_preview_cros/mojom/printer_capabilities.mojom +++ b/ash/webui/print_preview_cros/mojom/printer_capabilities.mojom
@@ -121,7 +121,6 @@ struct Capabilities { string destination_id; - // TODO(b/323421684): Support vendor_capability. CollateCapability? collate; ColorCapability? color; CopiesCapability? copies;
diff --git a/ash/webui/print_preview_cros/resources/js/data/destination_constants.ts b/ash/webui/print_preview_cros/resources/js/data/destination_constants.ts index dbe3c3d..e6f0d97d 100644 --- a/ash/webui/print_preview_cros/resources/js/data/destination_constants.ts +++ b/ash/webui/print_preview_cros/resources/js/data/destination_constants.ts
@@ -11,7 +11,6 @@ * to destinations used in multiple files. */ -// TODO(b/323585997): Replace display name with localized string. export const PDF_DESTINATION: Destination = { id: 'SAVE_AS_PDF', displayName: 'Save as PDF',
diff --git a/ash/webui/print_preview_cros/resources/js/fakes/fake_destination_provider.ts b/ash/webui/print_preview_cros/resources/js/fakes/fake_destination_provider.ts index 90988e5f..0e7b587 100644 --- a/ash/webui/print_preview_cros/resources/js/fakes/fake_destination_provider.ts +++ b/ash/webui/print_preview_cros/resources/js/fakes/fake_destination_provider.ts
@@ -131,8 +131,6 @@ } } -// TODO(b/323421684): Move this function to "fake_data.ts" once all the -// DestinationProvider methods are migrated to mojo. export function getFakeCapabilitiesResponse(destinationId: string = 'Printer1'): {capabilities: Capabilities} { const collate: CollateCapability = {
diff --git a/ash/webui/settings/public/constants/setting.mojom b/ash/webui/settings/public/constants/setting.mojom index 640fc63..e5d0e7a 100644 --- a/ash/webui/settings/public/constants/setting.mojom +++ b/ash/webui/settings/public/constants/setting.mojom
@@ -250,7 +250,8 @@ kShowInputOptionsInShelf = 1201, // Note: Value 1202 was deprecated for kShowPersonalInformationSuggestions. // Do not reuse. - kShowEmojiSuggestions = 1203, + // Note: Value 1203 was deprecated for kShowEmojiSuggestions. + // Do not reuse. kChangeDeviceLanguage = 1204, kOfferTranslation = 1205, kAddInputMethod = 1206,
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc index ff814e5..01846c4 100644 --- a/ash/wm/splitview/split_view_controller.cc +++ b/ash/wm/splitview/split_view_controller.cc
@@ -2141,8 +2141,6 @@ // center of the divider, so extract the origin, unless the result is on of // the endpoints. int divider_upper_limit = GetDividerPositionUpperLimit(root_window_); - // TODO(b/319334795): Move this function and `divider_closest_ratio_` to - // SplitViewDivider. divider_closest_ratio_ = FindClosestPositionRatio( float(divider_position + kSplitviewDividerShortSideLength / 2) / divider_upper_limit);
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index 06bc32c..8fadc02 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -170,7 +170,6 @@ "layers/texture_layer_client.h", "layers/texture_layer_impl.cc", "layers/texture_layer_impl.h", - "layers/tile_based_layer_impl.cc", "layers/tile_based_layer_impl.h", "layers/tile_display_layer_impl.cc", "layers/tile_display_layer_impl.h",
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc index 835aece..850d76a 100644 --- a/cc/layers/picture_layer_impl.cc +++ b/cc/layers/picture_layer_impl.cc
@@ -2258,7 +2258,7 @@ return tilings_->num_tilings() ? MaximumTilingContentsScale() : 1.f; } -TileBasedLayerImpl::TilingResolution +TileBasedLayerImpl<PictureLayerTiling>::TilingResolution PictureLayerImpl::GetTilingResolutionForDebugBorders( const PictureLayerTiling* tiling) const { if (tiling->resolution() == HIGH_RESOLUTION) {
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h index 943d8bb..dfebc41 100644 --- a/cc/layers/picture_layer_impl.h +++ b/cc/layers/picture_layer_impl.h
@@ -39,7 +39,7 @@ class Tile; class CC_EXPORT PictureLayerImpl - : public TileBasedLayerImpl, + : public TileBasedLayerImpl<PictureLayerTiling>, public PictureLayerTilingClient, public ImageAnimationController::AnimationDriver { public: @@ -198,9 +198,8 @@ } // For testing. - void SetContentsScaleForTesting(float scale) { - ideal_contents_scale_ = raster_contents_scale_ = - gfx::Vector2dF(scale, scale); + void SetRasterContentsScaleForTesting(float scale) { + raster_contents_scale_ = gfx::Vector2dF(scale, scale); } std::vector<raw_ptr<PictureLayerTiling, VectorExperimental>>& @@ -421,10 +420,10 @@ TilingSetCoverageIterator<PictureLayerTiling> Cover( const gfx::Rect& coverage_rect, float coverage_scale, - float ideal_contents_scale); + float ideal_contents_scale) override; TilingResolution GetTilingResolutionForDebugBorders( - const PictureLayerTiling* tiling) const; + const PictureLayerTiling* tiling) const override; }; } // namespace cc
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc index 699152d..1fa0187 100644 --- a/cc/layers/picture_layer_impl_unittest.cc +++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -4188,7 +4188,7 @@ layer1->SetOffsetToTransformParent(occluding_layer_position); ASSERT_TRUE(active_layer()->CanHaveTilings()); - active_layer()->SetContentsScaleForTesting(scale); + active_layer()->SetRasterContentsScaleForTesting(scale); active_layer()->tilings()->RemoveAllTilings(); active_layer() ->AddTiling(gfx::AxisTransform2d(scale, gfx::Vector2dF()))
diff --git a/cc/layers/tile_based_layer_impl.cc b/cc/layers/tile_based_layer_impl.cc deleted file mode 100644 index 5b2449fa7..0000000 --- a/cc/layers/tile_based_layer_impl.cc +++ /dev/null
@@ -1,142 +0,0 @@ -// Copyright 2025 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "cc/layers/tile_based_layer_impl.h" - -#include "cc/base/math_util.h" -#include "cc/layers/append_quads_context.h" -#include "cc/layers/solid_color_layer_impl.h" -#include "cc/trees/layer_tree_impl.h" - -namespace cc { - -TileBasedLayerImpl::TileBasedLayerImpl(LayerTreeImpl* tree_impl, int id) - : LayerImpl(tree_impl, id) {} - -TileBasedLayerImpl::~TileBasedLayerImpl() = default; - -void TileBasedLayerImpl::AppendQuads(const AppendQuadsContext& context, - viz::CompositorRenderPass* render_pass, - AppendQuadsData* append_quads_data) { - // RenderSurfaceImpl::AppendQuads sets mask properties in the DrawQuad for - // the masked surface, which will apply to both the backdrop filter and the - // contents of the masked surface, so we should not append quads of the mask - // layer in DstIn blend mode which would apply the mask in another codepath. - if (is_backdrop_filter_mask()) { - return; - } - - if (solid_color()) { - AppendSolidQuad(render_pass, append_quads_data, *solid_color()); - return; - } - - viz::SharedQuadState* shared_quad_state = - render_pass->CreateAndAppendSharedQuadState(); - PopulateScaledSharedQuadState(shared_quad_state, - GetMaximumContentsScaleForUseInAppendQuads(), - contents_opaque()); - - if (IsDirectlyCompositedImage()) { - // Directly composited images should be clipped to the layer's content rect. - // When a PictureLayerTiling is created for a directly composited image, the - // layer bounds are multiplied by the raster scale in order to compute the - // tile size. If the aspect ratio of the layer doesn't match that of the - // image, it's possible that one of the dimensions of the resulting size - // (layer bounds * raster scale) is a fractional number, as raster scale - // does not scale x and y independently. - // When this happens, the ToEnclosingRect() operation in - // |PictureLayerTiling::EnclosingContentsRectFromLayer()| will - // create a tiling that, when scaled by |max_contents_scale| above, is - // larger than the layer bounds by a fraction of a pixel. - gfx::Rect bounds_in_target_space = MathUtil::MapEnclosingClippedRect( - draw_properties().target_space_transform, gfx::Rect(bounds())); - if (is_clipped()) { - bounds_in_target_space.Intersect(draw_properties().clip_rect); - } - - if (shared_quad_state->clip_rect) { - bounds_in_target_space.Intersect(*shared_quad_state->clip_rect); - } - - shared_quad_state->clip_rect = bounds_in_target_space; - } - - const Occlusion scaled_occlusion = - draw_properties() - .occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( - shared_quad_state->quad_to_target_transform); - - if (context.draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) { - AppendQuadsForResourcelessSoftwareDraw(context, render_pass, - append_quads_data, shared_quad_state, - scaled_occlusion); - return; - } - - // If the visible rect is scrolled far enough away, then we may run into a - // floating point precision in AA calculations in the renderer. See - // crbug.com/765297. In order to avoid this, we shift the quads up from where - // they logically reside and adjust the shared_quad_state's transform instead. - // We only do this in scale/translate matrices to ensure the math is correct. - // NOTE: Implementations of AppendQuadsSpecialization() need to use the - // original state in `shared_quad_state` to correctly locate the tiles to - // draw. For this reason, we delay adjusting `shared_quad_state` itself until - // the bottom of the method below. - gfx::Vector2d quad_offset; - if (shared_quad_state->quad_to_target_transform.IsScaleOrTranslation()) { - const auto& visible_rect = shared_quad_state->visible_quad_layer_rect; - quad_offset = gfx::Vector2d(-visible_rect.x(), -visible_rect.y()); - } - - gfx::Rect debug_border_rect(shared_quad_state->quad_layer_rect); - debug_border_rect.Offset(quad_offset); - AppendDebugBorderQuad(render_pass, debug_border_rect, shared_quad_state, - append_quads_data); - - AppendQuadsSpecialization(context, render_pass, append_quads_data, - shared_quad_state, scaled_occlusion, quad_offset); - - // Adjust shared_quad_state with the quad_offset, since by contract - // AppendQuadsSpecialization() has adjusted each quad appended by that offset. - shared_quad_state->quad_to_target_transform.Translate(-quad_offset); - shared_quad_state->quad_layer_rect.Offset(quad_offset); - shared_quad_state->visible_quad_layer_rect.Offset(quad_offset); -} - -void TileBasedLayerImpl::AppendSolidQuad(viz::CompositorRenderPass* render_pass, - AppendQuadsData* append_quads_data, - SkColor4f color) { - // TODO(crbug.com/41468388): This is still hard-coded at 1.0. This has some - // history: - // - for crbug.com/769319, the contents scale was allowed to change, to - // avoid blurring on high-dpi screens. - // - for crbug.com/796558, the max device scale was hard-coded back to 1.0 - // for single-tile masks, to avoid problems with transforms. - // To avoid those transform/scale bugs, this is currently left at 1.0. See - // crbug.com/979672 for more context and test links. - float max_contents_scale = 1; - - // The downstream CA layers use shared_quad_state to generate resources of - // the right size even if it is a solid color picture layer. - viz::SharedQuadState* shared_quad_state = - render_pass->CreateAndAppendSharedQuadState(); - PopulateScaledSharedQuadState(shared_quad_state, max_contents_scale, - contents_opaque()); - - AppendDebugBorderQuad(render_pass, gfx::Rect(bounds()), shared_quad_state, - append_quads_data); - - gfx::Rect scaled_visible_layer_rect = - shared_quad_state->visible_quad_layer_rect; - Occlusion occlusion = draw_properties().occlusion_in_content_space; - - EffectNode* effect_node = GetEffectTree().Node(effect_tree_index()); - SolidColorLayerImpl::AppendSolidQuads( - render_pass, occlusion, shared_quad_state, scaled_visible_layer_rect, - color, !layer_tree_impl()->settings().enable_edge_anti_aliasing, - effect_node->blend_mode, append_quads_data); -} - -} // namespace cc
diff --git a/cc/layers/tile_based_layer_impl.h b/cc/layers/tile_based_layer_impl.h index b13d0f3..e4dd3a8 100644 --- a/cc/layers/tile_based_layer_impl.h +++ b/cc/layers/tile_based_layer_impl.h
@@ -5,13 +5,19 @@ #ifndef CC_LAYERS_TILE_BASED_LAYER_IMPL_H_ #define CC_LAYERS_TILE_BASED_LAYER_IMPL_H_ +#include "cc/base/math_util.h" #include "cc/cc_export.h" +#include "cc/layers/append_quads_context.h" #include "cc/layers/layer_impl.h" +#include "cc/layers/solid_color_layer_impl.h" +#include "cc/tiles/tiling_set_coverage_iterator.h" +#include "cc/trees/layer_tree_impl.h" namespace cc { // Base class for layer impls that manipulate tiles (e.g., PictureLayerImpl // and TileDisplayLayerImpl). +template <typename Tiling> class CC_EXPORT TileBasedLayerImpl : public LayerImpl { public: enum class TilingResolution { @@ -21,7 +27,7 @@ }; TileBasedLayerImpl(const TileBasedLayerImpl&) = delete; - ~TileBasedLayerImpl() override; + ~TileBasedLayerImpl() override = default; TileBasedLayerImpl& operator=(const TileBasedLayerImpl&) = delete; @@ -43,7 +49,8 @@ void SetSolidColor(std::optional<SkColor4f> color) { solid_color_ = color; } protected: - TileBasedLayerImpl(LayerTreeImpl* tree_impl, int id); + TileBasedLayerImpl(LayerTreeImpl* tree_impl, int id) + : LayerImpl(tree_impl, id) {} std::optional<SkColor4f> solid_color() const { return solid_color_; } @@ -76,6 +83,14 @@ virtual bool IsDirectlyCompositedImage() const = 0; + virtual TilingResolution GetTilingResolutionForDebugBorders( + const Tiling* tiling) const = 0; + + virtual TilingSetCoverageIterator<Tiling> Cover( + const gfx::Rect& coverage_rect, + float coverage_scale, + float ideal_contents_scale) = 0; + // Appends a solid-color quad with color `color`. void AppendSolidQuad(viz::CompositorRenderPass* render_pass, AppendQuadsData* append_quads_data, @@ -85,6 +100,133 @@ std::optional<SkColor4f> solid_color_; }; +template <typename Tiling> +void TileBasedLayerImpl<Tiling>::AppendQuads( + const AppendQuadsContext& context, + viz::CompositorRenderPass* render_pass, + AppendQuadsData* append_quads_data) { + // RenderSurfaceImpl::AppendQuads sets mask properties in the DrawQuad for + // the masked surface, which will apply to both the backdrop filter and the + // contents of the masked surface, so we should not append quads of the mask + // layer in DstIn blend mode which would apply the mask in another codepath. + if (is_backdrop_filter_mask()) { + return; + } + + if (solid_color()) { + AppendSolidQuad(render_pass, append_quads_data, *solid_color()); + return; + } + + viz::SharedQuadState* shared_quad_state = + render_pass->CreateAndAppendSharedQuadState(); + PopulateScaledSharedQuadState(shared_quad_state, + GetMaximumContentsScaleForUseInAppendQuads(), + contents_opaque()); + + if (IsDirectlyCompositedImage()) { + // Directly composited images should be clipped to the layer's content rect. + // When a PictureLayerTiling is created for a directly composited image, the + // layer bounds are multiplied by the raster scale in order to compute the + // tile size. If the aspect ratio of the layer doesn't match that of the + // image, it's possible that one of the dimensions of the resulting size + // (layer bounds * raster scale) is a fractional number, as raster scale + // does not scale x and y independently. + // When this happens, the ToEnclosingRect() operation in + // |PictureLayerTiling::EnclosingContentsRectFromLayer()| will + // create a tiling that, when scaled by |max_contents_scale| above, is + // larger than the layer bounds by a fraction of a pixel. + gfx::Rect bounds_in_target_space = MathUtil::MapEnclosingClippedRect( + draw_properties().target_space_transform, gfx::Rect(bounds())); + if (is_clipped()) { + bounds_in_target_space.Intersect(draw_properties().clip_rect); + } + + if (shared_quad_state->clip_rect) { + bounds_in_target_space.Intersect(*shared_quad_state->clip_rect); + } + + shared_quad_state->clip_rect = bounds_in_target_space; + } + + const Occlusion scaled_occlusion = + draw_properties() + .occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( + shared_quad_state->quad_to_target_transform); + + if (context.draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) { + AppendQuadsForResourcelessSoftwareDraw(context, render_pass, + append_quads_data, shared_quad_state, + scaled_occlusion); + return; + } + + // If the visible rect is scrolled far enough away, then we may run into a + // floating point precision in AA calculations in the renderer. See + // crbug.com/765297. In order to avoid this, we shift the quads up from where + // they logically reside and adjust the shared_quad_state's transform instead. + // We only do this in scale/translate matrices to ensure the math is correct. + // NOTE: Implementations of AppendQuadsSpecialization() need to use the + // original state in `shared_quad_state` to correctly locate the tiles to + // draw. For this reason, we delay adjusting `shared_quad_state` itself until + // the bottom of the method below. + gfx::Vector2d quad_offset; + if (shared_quad_state->quad_to_target_transform.IsScaleOrTranslation()) { + const auto& visible_rect = shared_quad_state->visible_quad_layer_rect; + quad_offset = gfx::Vector2d(-visible_rect.x(), -visible_rect.y()); + } + + gfx::Rect debug_border_rect(shared_quad_state->quad_layer_rect); + debug_border_rect.Offset(quad_offset); + AppendDebugBorderQuad(render_pass, debug_border_rect, shared_quad_state, + append_quads_data); + + AppendQuadsSpecialization(context, render_pass, append_quads_data, + shared_quad_state, scaled_occlusion, quad_offset); + + // Adjust shared_quad_state with the quad_offset, since by contract + // AppendQuadsSpecialization() has adjusted each quad appended by that offset. + shared_quad_state->quad_to_target_transform.Translate(-quad_offset); + shared_quad_state->quad_layer_rect.Offset(quad_offset); + shared_quad_state->visible_quad_layer_rect.Offset(quad_offset); +} + +template <typename Tiling> +void TileBasedLayerImpl<Tiling>::AppendSolidQuad( + viz::CompositorRenderPass* render_pass, + AppendQuadsData* append_quads_data, + SkColor4f color) { + // TODO(crbug.com/41468388): This is still hard-coded at 1.0. This has some + // history: + // - for crbug.com/769319, the contents scale was allowed to change, to + // avoid blurring on high-dpi screens. + // - for crbug.com/796558, the max device scale was hard-coded back to 1.0 + // for single-tile masks, to avoid problems with transforms. + // To avoid those transform/scale bugs, this is currently left at 1.0. See + // crbug.com/979672 for more context and test links. + float max_contents_scale = 1; + + // The downstream CA layers use shared_quad_state to generate resources of + // the right size even if it is a solid color picture layer. + viz::SharedQuadState* shared_quad_state = + render_pass->CreateAndAppendSharedQuadState(); + PopulateScaledSharedQuadState(shared_quad_state, max_contents_scale, + contents_opaque()); + + AppendDebugBorderQuad(render_pass, gfx::Rect(bounds()), shared_quad_state, + append_quads_data); + + gfx::Rect scaled_visible_layer_rect = + shared_quad_state->visible_quad_layer_rect; + Occlusion occlusion = draw_properties().occlusion_in_content_space; + + EffectNode* effect_node = GetEffectTree().Node(effect_tree_index()); + SolidColorLayerImpl::AppendSolidQuads( + render_pass, occlusion, shared_quad_state, scaled_visible_layer_rect, + color, !layer_tree_impl()->settings().enable_edge_anti_aliasing, + effect_node->blend_mode, append_quads_data); +} + } // namespace cc #endif // CC_LAYERS_TILE_BASED_LAYER_IMPL_H_
diff --git a/cc/layers/tile_based_layer_impl_unittest.cc b/cc/layers/tile_based_layer_impl_unittest.cc index 332d9e7..fec8a9d0 100644 --- a/cc/layers/tile_based_layer_impl_unittest.cc +++ b/cc/layers/tile_based_layer_impl_unittest.cc
@@ -6,6 +6,7 @@ #include <memory> #include <utility> +#include <vector> #include "base/check_deref.h" #include "cc/debug/layer_tree_debug_state.h" @@ -13,16 +14,60 @@ #include "cc/layers/append_quads_data.h" #include "cc/test/layer_test_common.h" #include "cc/test/test_layer_tree_host_base.h" +#include "cc/tiles/tile_draw_info.h" +#include "cc/tiles/tile_priority.h" +#include "cc/tiles/tiling_coverage_iterator.h" +#include "cc/tiles/tiling_set_coverage_iterator.h" #include "components/viz/common/quads/solid_color_draw_quad.h" #include "testing/gtest/include/gtest/gtest.h" namespace cc { namespace { -class TestTileBasedLayerImpl : public TileBasedLayerImpl { +class FakeTile { + public: + FakeTile() = default; + ~FakeTile() = default; + + TileDrawInfo::Mode draw_mode() { return TileDrawInfo::SOLID_COLOR_MODE; } + + bool IsReadyToDraw() const { return true; } +}; + +class FakeTilingCoverageIterator; + +class FakeTiling { + public: + using Tile = FakeTile; + using CoverageIterator = FakeTilingCoverageIterator; + + FakeTiling() = default; + ~FakeTiling() = default; + + CoverageIterator Cover(const gfx::Rect& coverage_rect, + float coverage_scale) const; + + Tile* TileAt(const TileIndex& index) const { return nullptr; } + float contents_scale_key() const { return 1.0f; } + const TilingData* tiling_data() const { return nullptr; } + gfx::Size raster_size() const { return gfx::Size{100, 100}; } + const gfx::AxisTransform2d& raster_transform() const { + return raster_transform_; + } + + private: + gfx::AxisTransform2d raster_transform_; +}; + +class FakeTilingCoverageIterator : public TilingCoverageIterator<FakeTiling> { + public: + using TilingCoverageIterator<FakeTiling>::TilingCoverageIterator; +}; + +class TestTileBasedLayerImpl : public TileBasedLayerImpl<FakeTiling> { public: TestTileBasedLayerImpl(LayerTreeImpl* tree_impl, int id) - : TileBasedLayerImpl(tree_impl, id) {} + : TileBasedLayerImpl<FakeTiling>(tree_impl, id) {} private: // TileBasedLayerImpl: @@ -34,14 +79,31 @@ const gfx::Vector2d& quad_offset) override {} float GetMaximumContentsScaleForUseInAppendQuads() override { return 1.f; } bool IsDirectlyCompositedImage() const override { return false; } + TilingResolution GetTilingResolutionForDebugBorders( + const FakeTiling* tiling) const override { + return TilingResolution::kHigh; + } void AppendQuadsForResourcelessSoftwareDraw( const AppendQuadsContext& context, viz::CompositorRenderPass* render_pass, AppendQuadsData* append_quads_data, viz::SharedQuadState* shared_quad_state, const Occlusion& scaled_occlusion) override {} + TilingSetCoverageIterator<FakeTiling> Cover( + const gfx::Rect& coverage_rect, + float coverage_scale, + float ideal_contents_scale) override { + return TilingSetCoverageIterator<FakeTiling>( + std::vector<std::unique_ptr<FakeTiling>>(), coverage_rect, + coverage_scale, ideal_contents_scale); + } }; +FakeTiling::CoverageIterator FakeTiling::Cover(const gfx::Rect& coverage_rect, + float coverage_scale) const { + return CoverageIterator(); +} + class TileBasedLayerImplTest : public TestLayerTreeHostBase {}; // Verifies that `is_backdrop_filter_mask()` returns false by default.
diff --git a/cc/layers/tile_display_layer_impl.cc b/cc/layers/tile_display_layer_impl.cc index 5aa49540..219db25 100644 --- a/cc/layers/tile_display_layer_impl.cc +++ b/cc/layers/tile_display_layer_impl.cc
@@ -28,33 +28,34 @@ class TilingOrder { public: - bool operator()(const std::unique_ptr<TileDisplayLayerImpl::Tiling>& left, - const std::unique_ptr<TileDisplayLayerImpl::Tiling>& right) { + bool operator()(const std::unique_ptr<TileDisplayLayerTiling>& left, + const std::unique_ptr<TileDisplayLayerTiling>& right) { return left->contents_scale_key() > right->contents_scale_key(); } }; } // namespace -TileDisplayLayerImpl::Tile::Tile(TileDisplayLayerImpl& layer, - const TileContents& contents) +TileDisplayLayerTile::TileDisplayLayerTile( + TileDisplayLayerImpl& layer, + const TileDisplayLayerTileContents& contents) : layer_(layer), contents_(contents) {} -TileDisplayLayerImpl::Tile::Tile(Tile&&) = default; +TileDisplayLayerTile::TileDisplayLayerTile(TileDisplayLayerTile&&) = default; -TileDisplayLayerImpl::Tile::~Tile() { - if (auto* resource = std::get_if<TileResource>(&contents_)) { +TileDisplayLayerTile::~TileDisplayLayerTile() { + if (auto* resource = std::get_if<TileDisplayLayerTileResource>(&contents_)) { layer_->DiscardResource(resource->resource_id); } } -TileDisplayLayerImpl::Tiling::Tiling(TileDisplayLayerImpl& layer, - float scale_key) +TileDisplayLayerTiling::TileDisplayLayerTiling(TileDisplayLayerImpl& layer, + float scale_key) : layer_(layer), scale_key_(scale_key) {} -TileDisplayLayerImpl::Tiling::~Tiling() = default; +TileDisplayLayerTiling::~TileDisplayLayerTiling() = default; -TileDisplayLayerImpl::Tile* TileDisplayLayerImpl::Tiling::TileAt( +TileDisplayLayerTile* TileDisplayLayerTiling::TileAt( const TileIndex& index) const { auto it = tiles_.find(index); if (it == tiles_.end()) { @@ -63,13 +64,13 @@ return it->second.get(); } -void TileDisplayLayerImpl::Tiling::SetRasterTransform( +void TileDisplayLayerTiling::SetRasterTransform( const gfx::AxisTransform2d& transform) { DCHECK_EQ(std::max(transform.scale().x(), transform.scale().y()), scale_key_); raster_transform_ = transform; } -void TileDisplayLayerImpl::Tiling::SetTileSize(const gfx::Size& size) { +void TileDisplayLayerTiling::SetTileSize(const gfx::Size& size) { if (size == tiling_data_.max_texture_size()) { return; } @@ -77,7 +78,7 @@ tiling_data_.SetMaxTextureSize(size); } -void TileDisplayLayerImpl::Tiling::SetTilingRect(const gfx::Rect& rect) { +void TileDisplayLayerTiling::SetTilingRect(const gfx::Rect& rect) { if (rect == tiling_data_.tiling_rect()) { return; } @@ -85,9 +86,10 @@ tiling_data_.SetTilingRect(rect); } -void TileDisplayLayerImpl::Tiling::SetTileContents(const TileIndex& key, - const TileContents& contents, - bool update_damage) { +void TileDisplayLayerTiling::SetTileContents( + const TileIndex& key, + const TileDisplayLayerTileContents& contents, + bool update_damage) { if (update_damage) { // Full tree updates receive damage as part of the LayerImpl::update_rect. // For incremental tile updates on an Active tree, we need to record the @@ -100,8 +102,8 @@ } std::unique_ptr<Tile> old_tile; - if (std::holds_alternative<NoContents>(contents)) { - const auto& no_contents = std::get<NoContents>(contents); + if (std::holds_alternative<TileDisplayLayerNoContents>(contents)) { + const auto& no_contents = std::get<TileDisplayLayerNoContents>(contents); if (no_contents.reason == mojom::MissingTileReason::kTileDeleted) { tiles_.erase(key); } else { @@ -114,19 +116,23 @@ } } -TileDisplayLayerImpl::DisplayTilingCoverageIterator -TileDisplayLayerImpl::Tiling::Cover(const gfx::Rect& coverage_rect, - float coverage_scale) const { +DisplayTilingCoverageIterator TileDisplayLayerTiling::Cover( + const gfx::Rect& coverage_rect, + float coverage_scale) const { return DisplayTilingCoverageIterator(this, coverage_scale, coverage_rect); } +gfx::Size TileDisplayLayerTiling::raster_size() const { + return layer_->bounds(); +} + TileDisplayLayerImpl::TileDisplayLayerImpl(LayerTreeImpl& tree, int id) : TileBasedLayerImpl(&tree, id) {} TileDisplayLayerImpl::~TileDisplayLayerImpl() = default; -TileDisplayLayerImpl::Tiling& -TileDisplayLayerImpl::GetOrCreateTilingFromScaleKey(float scale_key) { +TileDisplayLayerTiling& TileDisplayLayerImpl::GetOrCreateTilingFromScaleKey( + float scale_key) { auto it = std::find_if(tilings_.begin(), tilings_.end(), [scale_key](const auto& tiling) { return tiling->contents_scale_key() == scale_key; @@ -135,8 +141,9 @@ return **it; } - tilings_.push_back(std::make_unique<Tiling>(*this, scale_key)); - Tiling& tiling = *tilings_.back(); + tilings_.push_back( + std::make_unique<TileDisplayLayerTiling>(*this, scale_key)); + TileDisplayLayerTiling& tiling = *tilings_.back(); std::sort(tilings_.begin(), tilings_.end(), TilingOrder()); return tiling; } @@ -151,7 +158,7 @@ } } -const TileDisplayLayerImpl::Tiling* TileDisplayLayerImpl::GetTilingForTesting( +const TileDisplayLayerTiling* TileDisplayLayerImpl::GetTilingForTesting( float scale_key) const { auto it = std::find_if(tilings_.begin(), tilings_.end(), [scale_key](const auto& tiling) { @@ -362,7 +369,7 @@ const auto ideal_scale = GetIdealContentsScale(); const float ideal_scale_key = std::max(ideal_scale.x(), ideal_scale.y()); - auto iter = TilingSetCoverageIterator<Tiling>( + auto iter = TilingSetCoverageIterator<TileDisplayLayerTiling>( tilings_, content_rect, max_contents_scale, ideal_scale_key); // We cannot do anything if the mask resource was not provided. @@ -434,17 +441,17 @@ NOTREACHED(); } -TilingSetCoverageIterator<TileDisplayLayerImpl::Tiling> -TileDisplayLayerImpl::Cover(const gfx::Rect& coverage_rect, - float coverage_scale, - float ideal_contents_scale) { - return TilingSetCoverageIterator<Tiling>( +TilingSetCoverageIterator<TileDisplayLayerTiling> TileDisplayLayerImpl::Cover( + const gfx::Rect& coverage_rect, + float coverage_scale, + float ideal_contents_scale) { + return TilingSetCoverageIterator<TileDisplayLayerTiling>( tilings_, coverage_rect, coverage_scale, ideal_contents_scale); } -TileBasedLayerImpl::TilingResolution +TileBasedLayerImpl<TileDisplayLayerTiling>::TilingResolution TileDisplayLayerImpl::GetTilingResolutionForDebugBorders( - const TileDisplayLayerImpl::Tiling* tiling) const { + const TileDisplayLayerTiling* tiling) const { const auto ideal_scale = GetIdealContentsScale(); const float ideal_scale_key = std::max(ideal_scale.x(), ideal_scale.y()); if (MathUtil::IsFloatNearlyTheSame(tiling->contents_scale_key(),
diff --git a/cc/layers/tile_display_layer_impl.h b/cc/layers/tile_display_layer_impl.h index ee4e59c..4aeb7bf 100644 --- a/cc/layers/tile_display_layer_impl.h +++ b/cc/layers/tile_display_layer_impl.h
@@ -29,131 +29,139 @@ namespace cc { +class TileDisplayLayerImpl; +class TileDisplayLayerTiling; +class DisplayTilingCoverageIterator; + +struct TileDisplayLayerNoContents { + mojom::MissingTileReason reason = mojom::MissingTileReason::kResourceNotReady; + + TileDisplayLayerNoContents() = default; + explicit TileDisplayLayerNoContents(mojom::MissingTileReason r) : reason(r) {} +}; + +struct TileDisplayLayerTileResource { + viz::ResourceId resource_id; + gfx::Size resource_size; +}; + +using TileDisplayLayerTileContents = std::variant<TileDisplayLayerNoContents, + SkColor4f, + TileDisplayLayerTileResource>; + +class CC_EXPORT TileDisplayLayerTile { + public: + explicit TileDisplayLayerTile(TileDisplayLayerImpl& layer, + const TileDisplayLayerTileContents& contents); + ~TileDisplayLayerTile(); + TileDisplayLayerTile(TileDisplayLayerTile&&); + + TileDrawInfo::Mode draw_mode() { + CHECK(IsReadyToDraw()); + if (solid_color()) { + return TileDrawInfo::SOLID_COLOR_MODE; + } else if (is_oom()) { + return TileDrawInfo::OOM_MODE; + } else { + CHECK(resource()); + return TileDrawInfo::RESOURCE_MODE; + } + } + + const TileDisplayLayerTileContents& contents() const { return contents_; } + + std::optional<SkColor4f> solid_color() const { + if (std::holds_alternative<SkColor4f>(contents_)) { + return std::get<SkColor4f>(contents_); + } + return std::nullopt; + } + + std::optional<TileDisplayLayerTileResource> resource() const { + if (std::holds_alternative<TileDisplayLayerTileResource>(contents_)) { + return std::get<TileDisplayLayerTileResource>(contents_); + } + return std::nullopt; + } + + bool is_oom() const { + if (std::holds_alternative<TileDisplayLayerNoContents>(contents_)) { + return std::get<TileDisplayLayerNoContents>(contents_).reason == + mojom::MissingTileReason::kOutOfMemory; + } + return false; + } + + bool IsReadyToDraw() const { + return !std::holds_alternative<TileDisplayLayerNoContents>(contents_) || + is_oom(); + } + + private: + const raw_ref<TileDisplayLayerImpl> layer_; + TileDisplayLayerTileContents contents_; +}; + +class CC_EXPORT TileDisplayLayerTiling { + public: + using Tile = TileDisplayLayerTile; + using TileMap = std::map<TileIndex, std::unique_ptr<Tile>>; + using CoverageIterator = DisplayTilingCoverageIterator; + + explicit TileDisplayLayerTiling(TileDisplayLayerImpl& layer, float scale_key); + ~TileDisplayLayerTiling(); + + Tile* TileAt(const TileIndex& index) const; + + float contents_scale_key() const { return scale_key_; } + TileResolution resolution() const { return HIGH_RESOLUTION; } + const TilingData* tiling_data() const { return &tiling_data_; } + gfx::Size raster_size() const; + const gfx::AxisTransform2d& raster_transform() const { + return raster_transform_; + } + const gfx::Size tile_size() const { return tiling_data_.max_texture_size(); } + const gfx::Rect tiling_rect() const { return tiling_data_.tiling_rect(); } + const TileMap& tiles() const { return tiles_; } + + void SetRasterTransform(const gfx::AxisTransform2d& transform); + void SetTileSize(const gfx::Size& size); + void SetTilingRect(const gfx::Rect& rect); + void SetTileContents(const TileIndex& key, + const TileDisplayLayerTileContents& contents, + bool update_damage); + + CoverageIterator Cover(const gfx::Rect& coverage_rect, + float coverage_scale) const; + + private: + const raw_ref<TileDisplayLayerImpl> layer_; + const float scale_key_; + gfx::AxisTransform2d raster_transform_; + TilingData tiling_data_{gfx::Size(), gfx::Rect(), /*border_texels=*/1}; + TileMap tiles_; +}; + +class CC_EXPORT DisplayTilingCoverageIterator + : public TilingCoverageIterator<TileDisplayLayerTiling> { + public: + using TilingCoverageIterator<TileDisplayLayerTiling>::TilingCoverageIterator; +}; + // Viz-side counterpart to a client-side PictureLayerImpl when TreesInViz is // enabled. Clients push tiling information and tile contents from a picture // layer down to Viz, and this layer uses that information to draw tile quads. -class CC_EXPORT TileDisplayLayerImpl : public TileBasedLayerImpl { +class CC_EXPORT TileDisplayLayerImpl + : public TileBasedLayerImpl<TileDisplayLayerTiling> { public: - struct NoContents { - mojom::MissingTileReason reason = - mojom::MissingTileReason::kResourceNotReady; - - NoContents() = default; - explicit NoContents(mojom::MissingTileReason r) : reason(r) {} - }; - - struct TileResource { - viz::ResourceId resource_id; - gfx::Size resource_size; - }; - - using TileContents = std::variant<NoContents, SkColor4f, TileResource>; - - class CC_EXPORT Tile { - public: - explicit Tile(TileDisplayLayerImpl& layer, const TileContents& contents); - ~Tile(); - Tile(Tile&&); - - TileDrawInfo::Mode draw_mode() { - CHECK(IsReadyToDraw()); - if (solid_color()) { - return TileDrawInfo::SOLID_COLOR_MODE; - } else if (is_oom()) { - return TileDrawInfo::OOM_MODE; - } else { - CHECK(resource()); - return TileDrawInfo::RESOURCE_MODE; - } - } - - const TileContents& contents() const { return contents_; } - - std::optional<SkColor4f> solid_color() const { - if (std::holds_alternative<SkColor4f>(contents_)) { - return std::get<SkColor4f>(contents_); - } - return std::nullopt; - } - - std::optional<TileResource> resource() const { - if (std::holds_alternative<TileResource>(contents_)) { - return std::get<TileResource>(contents_); - } - return std::nullopt; - } - - bool is_oom() const { - if (std::holds_alternative<NoContents>(contents_)) { - return std::get<NoContents>(contents_).reason == - mojom::MissingTileReason::kOutOfMemory; - } - return false; - } - - bool IsReadyToDraw() const { - return !std::holds_alternative<NoContents>(contents_) || is_oom(); - } - - private: - const raw_ref<TileDisplayLayerImpl> layer_; - TileContents contents_; - }; - - class DisplayTilingCoverageIterator; - - class CC_EXPORT Tiling { - public: - using Tile = Tile; - using TileMap = std::map<TileIndex, std::unique_ptr<Tile>>; - using CoverageIterator = DisplayTilingCoverageIterator; - - explicit Tiling(TileDisplayLayerImpl& layer, float scale_key); - ~Tiling(); - - Tile* TileAt(const TileIndex& index) const; - - float contents_scale_key() const { return scale_key_; } - TileResolution resolution() const { return HIGH_RESOLUTION; } - const TilingData* tiling_data() const { return &tiling_data_; } - gfx::Size raster_size() const { return layer_->bounds(); } - const gfx::AxisTransform2d& raster_transform() const { - return raster_transform_; - } - const gfx::Size tile_size() const { - return tiling_data_.max_texture_size(); - } - const gfx::Rect tiling_rect() const { return tiling_data_.tiling_rect(); } - const TileMap& tiles() const { return tiles_; } - - void SetRasterTransform(const gfx::AxisTransform2d& transform); - void SetTileSize(const gfx::Size& size); - void SetTilingRect(const gfx::Rect& rect); - void SetTileContents(const TileIndex& key, - const TileContents& contents, - bool update_damage); - - CoverageIterator Cover(const gfx::Rect& coverage_rect, - float coverage_scale) const; - - private: - const raw_ref<TileDisplayLayerImpl> layer_; - const float scale_key_; - gfx::AxisTransform2d raster_transform_; - TilingData tiling_data_{gfx::Size(), gfx::Rect(), /*border_texels=*/1}; - TileMap tiles_; - }; - - class CC_EXPORT DisplayTilingCoverageIterator - : public TilingCoverageIterator<Tiling> { - public: - using TilingCoverageIterator<Tiling>::TilingCoverageIterator; - }; + using NoContents = TileDisplayLayerNoContents; + using TileResource = TileDisplayLayerTileResource; + using TileContents = TileDisplayLayerTileContents; TileDisplayLayerImpl(LayerTreeImpl& tree, int id); ~TileDisplayLayerImpl() override; - Tiling& GetOrCreateTilingFromScaleKey(float scale_key); + TileDisplayLayerTiling& GetOrCreateTilingFromScaleKey(float scale_key); void RemoveTiling(float scale_key); void SetIsDirectlyCompositedImage(bool is_directly_composited_image) { is_directly_composited_image_ = is_directly_composited_image; @@ -187,7 +195,7 @@ void RecordDamage(const gfx::Rect& damage_rect); - const Tiling* GetTilingForTesting(float scale_key) const; + const TileDisplayLayerTiling* GetTilingForTesting(float scale_key) const; void DiscardResource(viz::ResourceId resource); // Returns a list of tiling scales that were proposed for deletion by @@ -218,11 +226,12 @@ AppendQuadsData* append_quads_data, viz::SharedQuadState* shared_quad_state, const Occlusion& scaled_occlusion) override; - TilingSetCoverageIterator<Tiling> Cover(const gfx::Rect& coverage_rect, - float coverage_scale, - float ideal_contents_scale); + TilingSetCoverageIterator<TileDisplayLayerTiling> Cover( + const gfx::Rect& coverage_rect, + float coverage_scale, + float ideal_contents_scale) override; TilingResolution GetTilingResolutionForDebugBorders( - const Tiling* tiling) const; + const TileDisplayLayerTiling* tiling) const override; bool is_directly_composited_image_ = false; bool nearest_neighbor_ = false; @@ -232,7 +241,7 @@ // Denotes an area that is damaged and needs redraw. This is in the layer's // space. gfx::Rect damage_rect_; - std::vector<std::unique_ptr<Tiling>> tilings_; + std::vector<std::unique_ptr<TileDisplayLayerTiling>> tilings_; // List of tiling scales that were used last time we appended quads. This is // used as an optimization not to remove tilings if they are still being
diff --git a/cc/layers/tile_display_layer_impl_unittest.cc b/cc/layers/tile_display_layer_impl_unittest.cc index f0a14e0b..550c52f 100644 --- a/cc/layers/tile_display_layer_impl_unittest.cc +++ b/cc/layers/tile_display_layer_impl_unittest.cc
@@ -68,7 +68,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents = - TileDisplayLayerImpl::TileResource(resource_id, kLayerBounds); + TileDisplayLayerTileResource(resource_id, kLayerBounds); tiling.SetTileContents(TileIndex{0, 0}, contents, /*update_damage=*/false); // Set up occlusion that covers the entire layer. Occlusion is specified in @@ -118,7 +118,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents = - TileDisplayLayerImpl::TileResource(resource_id, tile_rect.size()); + TileDisplayLayerTileResource(resource_id, tile_rect.size()); tiling.SetTileContents(TileIndex{0, 0}, contents, /*update_damage=*/false); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -169,7 +169,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents = - TileDisplayLayerImpl::TileResource(resource_id, kLayerBounds); + TileDisplayLayerTileResource(resource_id, kLayerBounds); tiling.SetTileContents(TileIndex{0, 0}, contents, /*update_damage=*/true); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -281,7 +281,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents = - TileDisplayLayerImpl::TileResource(resource_id, kLayerBounds); + TileDisplayLayerTileResource(resource_id, kLayerBounds); tiling.SetTileContents(TileIndex{0, 0}, contents, /*update_damage=*/true); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -327,7 +327,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents = - TileDisplayLayerImpl::TileResource(resource_id, kResourceSize); + TileDisplayLayerTileResource(resource_id, kResourceSize); tiling.SetTileContents(TileIndex{0, 0}, contents, /*update_damage=*/true); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -408,7 +408,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents = - TileDisplayLayerImpl::TileResource(resource_id, kLayerBounds); + TileDisplayLayerTileResource(resource_id, kLayerBounds); tiling.SetTileContents(TileIndex{0, 0}, contents, /*update_damage=*/true); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -529,7 +529,7 @@ tiling.SetTilingRect(kLayerRect); tiling.SetTileContents( TileIndex{0, 0}, - TileDisplayLayerImpl::NoContents{mojom::MissingTileReason::kOutOfMemory}, + TileDisplayLayerNoContents{mojom::MissingTileReason::kOutOfMemory}, /*update_damage=*/true); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -585,7 +585,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents = - TileDisplayLayerImpl::TileResource(resource_id, kLayerBounds); + TileDisplayLayerTileResource(resource_id, kLayerBounds); high_res_tiling.SetTileContents(TileIndex{0, 0}, contents, /*update_damage=*/true); @@ -633,7 +633,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents low_res_contents = - TileDisplayLayerImpl::TileResource(low_res_resource_id, kLayerBounds); + TileDisplayLayerTileResource(low_res_resource_id, kLayerBounds); low_res_tiling.SetTileContents(TileIndex{0, 0}, low_res_contents, /*update_damage=*/true); @@ -806,7 +806,7 @@ // verify that the tile is deleted. tiling.SetTileContents( kTileIndex, - TileDisplayLayerImpl::NoContents{mojom::MissingTileReason::kTileDeleted}, + TileDisplayLayerNoContents{mojom::MissingTileReason::kTileDeleted}, /*update_damage=*/false); EXPECT_EQ(tiling.TileAt(kTileIndex), nullptr); } @@ -831,16 +831,16 @@ // Set the tile's contents to NoContents with a reason other than // kTileDeleted. - tiling.SetTileContents(kTileIndex, - TileDisplayLayerImpl::NoContents{ - mojom::MissingTileReason::kResourceNotReady}, - /*update_damage=*/false); + tiling.SetTileContents( + kTileIndex, + TileDisplayLayerNoContents{mojom::MissingTileReason::kResourceNotReady}, + /*update_damage=*/false); // Verify that the tile still exists and its contents are NoContents. auto* tile = tiling.TileAt(kTileIndex); EXPECT_NE(tile, nullptr); - EXPECT_TRUE(std::holds_alternative<TileDisplayLayerImpl::NoContents>( - tile->contents())); + EXPECT_TRUE( + std::holds_alternative<TileDisplayLayerNoContents>(tile->contents())); } // Verifies that last_append_quads_scales_ is correctly updated after @@ -884,7 +884,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents high_res_contents = - TileDisplayLayerImpl::TileResource(high_res_resource_id, kLayerBounds); + TileDisplayLayerTileResource(high_res_resource_id, kLayerBounds); high_res_tiling.SetTileContents(TileIndex{0, 0}, high_res_contents, /*update_damage=*/true); @@ -1085,7 +1085,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents_resource = - TileDisplayLayerImpl::TileResource(resource_id, kLayerBounds); + TileDisplayLayerTileResource(resource_id, kLayerBounds); tiling.SetTileContents(TileIndex{0, 0}, contents_resource, /*update_damage=*/true); @@ -1146,7 +1146,7 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents contents_resource = - TileDisplayLayerImpl::TileResource(resource_id, kLayerBounds); + TileDisplayLayerTileResource(resource_id, kLayerBounds); tiling.SetTileContents(TileIndex{0, 0}, contents_resource, /*update_damage=*/true); @@ -1201,7 +1201,7 @@ tiling.SetTilingRect(kLayerRect); tiling.SetTileContents( TileIndex{0, 0}, - TileDisplayLayerImpl::NoContents{mojom::MissingTileReason::kOutOfMemory}, + TileDisplayLayerNoContents{mojom::MissingTileReason::kOutOfMemory}, /*update_damage=*/true); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -1255,10 +1255,10 @@ auto& tiling = raw_layer->GetOrCreateTilingFromScaleKey(1.0); tiling.SetTileSize(kLayerBounds); tiling.SetTilingRect(kLayerRect); - tiling.SetTileContents(TileIndex{0, 0}, - TileDisplayLayerImpl::NoContents{ - mojom::MissingTileReason::kResourceNotReady}, - /*update_damage=*/true); + tiling.SetTileContents( + TileIndex{0, 0}, + TileDisplayLayerNoContents{mojom::MissingTileReason::kResourceNotReady}, + /*update_damage=*/true); SetupRootProperties(host_impl()->active_tree()->root_layer()); @@ -1294,8 +1294,8 @@ // Missing tile due to OOM. TileDisplayLayerImpl::TileContents oom_contents{ - TileDisplayLayerImpl::NoContents(mojom::MissingTileReason::kOutOfMemory)}; - TileDisplayLayerImpl::Tile oom_tile(*raw_layer, oom_contents); + TileDisplayLayerNoContents(mojom::MissingTileReason::kOutOfMemory)}; + TileDisplayLayerTile oom_tile(*raw_layer, oom_contents); EXPECT_TRUE(oom_tile.is_oom()); // OOM tiles should be regarded as ready to draw. @@ -1303,10 +1303,8 @@ // Missing tile due to resource not being ready. TileDisplayLayerImpl::TileContents resource_not_ready_contents{ - TileDisplayLayerImpl::NoContents( - mojom::MissingTileReason::kResourceNotReady)}; - TileDisplayLayerImpl::Tile not_oom_tile(*raw_layer, - resource_not_ready_contents); + TileDisplayLayerNoContents(mojom::MissingTileReason::kResourceNotReady)}; + TileDisplayLayerTile not_oom_tile(*raw_layer, resource_not_ready_contents); EXPECT_FALSE(not_oom_tile.is_oom()); // Non-OOM missing tiles should not be regarded as ready to draw. @@ -1314,7 +1312,7 @@ // Solid color tile. TileDisplayLayerImpl::TileContents color_contents(SkColors::kRed); - TileDisplayLayerImpl::Tile color_tile(*raw_layer, color_contents); + TileDisplayLayerTile color_tile(*raw_layer, color_contents); EXPECT_FALSE(color_tile.is_oom()); EXPECT_TRUE(color_tile.IsReadyToDraw()); @@ -1325,8 +1323,8 @@ viz::TransferableResource::ResourceSource::kTest, gpu::SyncToken()), base::DoNothing()); TileDisplayLayerImpl::TileContents resource_contents = - TileDisplayLayerImpl::TileResource(resource_id, gfx::Size(1, 1)); - TileDisplayLayerImpl::Tile resource_tile(*raw_layer, resource_contents); + TileDisplayLayerTileResource(resource_id, gfx::Size(1, 1)); + TileDisplayLayerTile resource_tile(*raw_layer, resource_contents); EXPECT_FALSE(resource_tile.is_oom()); EXPECT_TRUE(resource_tile.IsReadyToDraw()); }
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 787b61b..1aba539 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -3193,6 +3193,7 @@ "java/src/org/chromium/chrome/browser/init/NativeStartupBridge.java", "java/src/org/chromium/chrome/browser/lens/LensPolicyUtils.java", "java/src/org/chromium/chrome/browser/login/ChromeHttpAuthHandler.java", + "java/src/org/chromium/chrome/browser/media/DocumentPictureInPictureActivity.java", "java/src/org/chromium/chrome/browser/media/MediaCaptureDevicesDispatcherAndroid.java", "java/src/org/chromium/chrome/browser/media/PictureInPictureActivity.java", "java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterClient.java",
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinatorTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinatorTest.java index 151ce502..655b481 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinatorTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinatorTest.java
@@ -112,7 +112,7 @@ @RunWith(ChromeJUnit4ClassRunner.class) @DoNotBatch(reason = "TODO(crbug.com/348068134): Batch this test suite.") @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures({"IPH_AndroidTabDeclutter", ChromeFeatureList.SETTINGS_MULTI_COLUMN}) +@DisableFeatures("IPH_AndroidTabDeclutter") public class ArchivedTabsDialogCoordinatorTest { private static final String SYNC_GROUP_ID1 = "test_sync_group_id1"; private static final String SYNC_GROUP_ID2 = "test_sync_group_id2";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/DocumentPictureInPictureActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/media/DocumentPictureInPictureActivity.java index 384c87a8..d27358b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/DocumentPictureInPictureActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/DocumentPictureInPictureActivity.java
@@ -4,19 +4,75 @@ package org.chromium.chrome.browser.media; +import android.annotation.SuppressLint; +import android.content.Intent; + +import org.jni_zero.NativeMethods; + import org.chromium.base.supplier.OneshotSupplier; import org.chromium.base.supplier.OneshotSupplierImpl; +import org.chromium.build.annotations.EnsuresNonNullIf; import org.chromium.build.annotations.NullMarked; import org.chromium.chrome.browser.init.AsyncInitializationActivity; import org.chromium.chrome.browser.profiles.ProfileProvider; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tab.TabUtils; +import org.chromium.content_public.browser.WebContents; @NullMarked public class DocumentPictureInPictureActivity extends AsyncInitializationActivity { public static final String WEB_CONTENTS_KEY = "org.chromium.chrome.browser.media.DocumentPictureInPicture.WebContents"; + private WebContents mWebContents; + private Tab mInitiatorTab; + + @Override + protected void onPreCreate() { + super.onPreCreate(); + + Intent intent = getIntent(); + intent.setExtrasClassLoader(WebContents.class.getClassLoader()); + WebContents webContents = intent.getParcelableExtra(WEB_CONTENTS_KEY); + if (webContents == null) { + finish(); + return; + } + + mWebContents = webContents; + WebContents parentWebContents = mWebContents.getDocumentPictureInPictureOpener(); + mInitiatorTab = TabUtils.fromWebContents(parentWebContents); + if (parentWebContents == null || TabUtils.getActivity(mInitiatorTab) == null) { + finish(); + return; + } + } + + /** + * @return Whether the document pip WebContents and the initiator tab are both initialized. + */ + @EnsuresNonNullIf({"mWebContents", "mInitiatorTab"}) + private boolean isContentsInitialized() { + return mWebContents != null && mInitiatorTab != null; + } + + @Override + @SuppressLint("NewAPI") + public void onStart() { + super.onStart(); + assert isContentsInitialized(); + + if (mInitiatorTab.getWebContents() == null) { + finish(); + return; + } + + DocumentPictureInPictureActivityJni.get() + .onActivityStart(mInitiatorTab.getWebContents(), mWebContents); + } @Override protected void triggerLayoutInflation() { + assert isContentsInitialized(); onInitialLayoutInflationComplete(); } @@ -30,4 +86,20 @@ // TODO(https://crbug.com/422715286): implement this method. return new OneshotSupplierImpl<>(); } + + @Override + @SuppressWarnings("NullAway") + protected final void onDestroy() { + if (mWebContents != null) { + mWebContents.destroy(); + mWebContents = null; + } + + super.onDestroy(); + } + + @NativeMethods + public interface Natives { + void onActivityStart(WebContents parentWebContent, WebContents webContents); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerDialog.java index 43d4939c..d165c859 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerDialog.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerDialog.java
@@ -193,7 +193,9 @@ } void show() { - var allTabObserver = new AllTabObserver(new MediaCapturePickerTabObserver(this, mParams)); + var allTabObserver = + new AllTabObserver( + new MediaCapturePickerTabObserver(this, mParams, assumeNonNull(mDelegate))); var controller = new ModalDialogProperties.Controller() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManager.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManager.java index 9fb1991..baff791b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManager.java
@@ -21,7 +21,7 @@ @NullMarked public class MediaCapturePickerManager { /** A delegate for handling returning the picker result. */ - public interface Delegate { + public interface Delegate extends MediaCapturePickerTabObserver.FilterDelegate { /** * Called when the user has selected a tab to share. *
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManagerBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManagerBridge.java index 6ab56fd..4011b25 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManagerBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerManagerBridge.java
@@ -112,6 +112,15 @@ MediaCapturePickerManagerBridgeJni.get().onCancel(mNativeMediaCapturePickerManagerBridge); } + @Override + public boolean shouldFilterWebContents(WebContents webContents) { + // We know `mNativeMediaCapturePickerManagerBridge` is non-zero because + // `destroy` will only be called after the dialog is dismissed. + assert mNativeMediaCapturePickerManagerBridge != 0; + return MediaCapturePickerManagerBridgeJni.get() + .shouldFilterWebContents(mNativeMediaCapturePickerManagerBridge, webContents); + } + @NativeMethods interface Natives { void onPickTab( @@ -124,5 +133,9 @@ void onPickScreen(long nativeMediaCapturePickerManagerBridge); void onCancel(long nativeMediaCapturePickerManagerBridge); + + boolean shouldFilterWebContents( + long nativeMediaCapturePickerManagerBridge, + @JniType("content::WebContents*") WebContents webContents); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerTabObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerTabObserver.java index 23d45d3..5f945c21 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerTabObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaCapturePickerTabObserver.java
@@ -7,17 +7,33 @@ import org.chromium.build.annotations.NullMarked; import org.chromium.chrome.browser.app.tabmodel.AllTabObserver; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.content_public.browser.WebContents; /** An observer that filters tabs and forwards events to a delegate. */ @NullMarked public class MediaCapturePickerTabObserver implements AllTabObserver.Observer { - private final AllTabObserver.Observer mDelegate; + /** A delegate to handle filtering of tabs. */ + public interface FilterDelegate { + /** + * Called to check if a tab should be filtered. + * + * @param webContents The contents to check. + * @return True if the tab should be filtered. + */ + boolean shouldFilterWebContents(WebContents webContents); + } + + private final AllTabObserver.Observer mObserverDelegate; private final MediaCapturePickerManager.Params mParams; + private final FilterDelegate mFilterDelegate; public MediaCapturePickerTabObserver( - AllTabObserver.Observer delegate, MediaCapturePickerManager.Params params) { - mDelegate = delegate; + AllTabObserver.Observer delegate, + MediaCapturePickerManager.Params params, + FilterDelegate filterDelegate) { + mObserverDelegate = delegate; mParams = params; + mFilterDelegate = filterDelegate; } @Override @@ -28,7 +44,9 @@ // Filter out all tabs that are not this tab for capture this tab. if (mParams.captureThisTab && tab.getWebContents() != mParams.webContents) return; - mDelegate.onTabAdded(tab); + if (shouldFilterTabForPolicy(tab)) return; + + mObserverDelegate.onTabAdded(tab); } @Override @@ -39,6 +57,16 @@ // Filter out all tabs that are not this tab for capture this tab. if (mParams.captureThisTab && tab.getWebContents() != mParams.webContents) return; - mDelegate.onTabRemoved(tab); + if (shouldFilterTabForPolicy(tab)) return; + + mObserverDelegate.onTabRemoved(tab); + } + + private boolean shouldFilterTabForPolicy(Tab tab) { + // TODO(crbug.com/352187279): Track when web contents is navigated and add/remove. + final WebContents webContents = tab.getWebContents(); + if (webContents == null) return true; + + return mFilterDelegate.shouldFilterWebContents(webContents); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java index 97ed3d6..74bd935 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -1124,17 +1124,14 @@ ViewStub extensionToolbarStub = controlContainer.findViewById(R.id.extension_toolbar_container_stub); if (extensionToolbarStub != null) { - // TODO(crbug.com/448691376): Change ExtensionToolbarCoordinator profileSupplier and - // tabProvider arguments to Supplier<@Nullable Profile> and Supplier<@Nullable Tab> and - // updated the rest of the code. mExtensionToolbarCoordinator = ExtensionToolbarCoordinator.maybeCreate( mActivity, extensionToolbarStub, windowAndroid, chromeAndroidTaskSupplier, - (ObservableSupplier<Profile>) profileSupplier, - (ObservableSupplier<Tab>) tabProvider, + profileSupplier, + tabProvider, mTabCreatorManager.getTabCreator(false), browsingModeThemeColorProvider); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/appmenu/TabbedAppMenuPTTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/appmenu/TabbedAppMenuPTTest.java index 92b3c31..1520ca1 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/appmenu/TabbedAppMenuPTTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/appmenu/TabbedAppMenuPTTest.java
@@ -47,7 +47,7 @@ @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @Batch(Batch.PER_CLASS) // TODO: Add new tests when the flag is enabled. -@DisableFeatures({ChromeFeatureList.ANDROID_THEME_MODULE, ChromeFeatureList.SETTINGS_MULTI_COLUMN}) +@DisableFeatures({ChromeFeatureList.ANDROID_THEME_MODULE}) public class TabbedAppMenuPTTest { @Rule public AutoResetCtaTransitTestRule mCtaTestRule =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentTest.java index 0b945a4..02cf7d3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentTest.java
@@ -70,14 +70,12 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.DoNotBatch; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.HistogramWatcher; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.browsing_data.BrowsingDataBridge.OnClearBrowsingDataListener; import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragment.DialogOption; import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncher; import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherFactory; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.notifications.channels.SiteChannelsManager; @@ -109,7 +107,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @DoNotBatch(reason = "Manages sign-in state, which is global.") -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class ClearBrowsingDataFragmentTest { @Rule public FreshCtaTransitTestRule mActivityTestRule =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/MediaCapturePickerTabObserverTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/MediaCapturePickerTabObserverTest.java index 6b99118b..6e594e20 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/MediaCapturePickerTabObserverTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/MediaCapturePickerTabObserverTest.java
@@ -38,7 +38,8 @@ public class MediaCapturePickerTabObserverTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); - @Mock private AllTabObserver.Observer mDelegate; + @Mock private AllTabObserver.Observer mObserverDelegate; + @Mock private MediaCapturePickerManager.Delegate mFilterDelegate; private static class ParamsBuilder { private WebContents mWebContents = mock(WebContents.class); @@ -80,27 +81,29 @@ @SmallTest public void testRegularTab() { final var params = new ParamsBuilder().build(); - final var observer = new MediaCapturePickerTabObserver(mDelegate, params); + final var observer = + new MediaCapturePickerTabObserver(mObserverDelegate, params, mFilterDelegate); final Tab tab = createMockTab(params.webContents, /* isNative= */ false); observer.onTabAdded(tab); - verify(mDelegate).onTabAdded(tab); + verify(mObserverDelegate).onTabAdded(tab); observer.onTabRemoved(tab); - verify(mDelegate).onTabRemoved(tab); + verify(mObserverDelegate).onTabRemoved(tab); } @Test @SmallTest public void testNativeTab() { final var params = new ParamsBuilder().build(); - final var observer = new MediaCapturePickerTabObserver(mDelegate, params); + final var observer = + new MediaCapturePickerTabObserver(mObserverDelegate, params, mFilterDelegate); final Tab tab = createMockTab(/* webContents= */ null, /* isNative= */ true); observer.onTabAdded(tab); - verify(mDelegate, never()).onTabAdded(tab); + verify(mObserverDelegate, never()).onTabAdded(tab); observer.onTabRemoved(tab); - verify(mDelegate, never()).onTabRemoved(tab); + verify(mObserverDelegate, never()).onTabRemoved(tab); } @Test @@ -109,21 +112,47 @@ final WebContents webContents = mock(WebContents.class); final var params = new ParamsBuilder().setWebContents(webContents).setCaptureThisTab(true).build(); - final var observer = new MediaCapturePickerTabObserver(mDelegate, params); + final var observer = + new MediaCapturePickerTabObserver(mObserverDelegate, params, mFilterDelegate); final Tab thisTab = createMockTab(webContents, /* isNative= */ false); final Tab anotherTab = createMockTab(mock(WebContents.class), /* isNative= */ false); observer.onTabAdded(thisTab); - verify(mDelegate).onTabAdded(thisTab); + verify(mObserverDelegate).onTabAdded(thisTab); observer.onTabAdded(anotherTab); - verify(mDelegate, never()).onTabAdded(anotherTab); + verify(mObserverDelegate, never()).onTabAdded(anotherTab); observer.onTabRemoved(thisTab); - verify(mDelegate).onTabRemoved(thisTab); + verify(mObserverDelegate).onTabRemoved(thisTab); observer.onTabRemoved(anotherTab); - verify(mDelegate, never()).onTabRemoved(anotherTab); + verify(mObserverDelegate, never()).onTabRemoved(anotherTab); + } + + @Test + @SmallTest + public void testPolicyFiltering() { + final WebContents webContents = mock(WebContents.class); + final var params = new ParamsBuilder().setWebContents(webContents).build(); + final var observer = + new MediaCapturePickerTabObserver(mObserverDelegate, params, mFilterDelegate); + + // Tab that should be filtered. + final WebContents filteredWebContents = mock(WebContents.class); + final Tab filteredTab = createMockTab(filteredWebContents, /* isNative= */ false); + when(mFilterDelegate.shouldFilterWebContents(filteredWebContents)).thenReturn(true); + + observer.onTabAdded(filteredTab); + verify(mObserverDelegate, never()).onTabAdded(filteredTab); + + // Tab that should not be filtered. + final WebContents allowedWebContents = mock(WebContents.class); + final Tab allowedTab = createMockTab(allowedWebContents, /* isNative= */ false); + when(mFilterDelegate.shouldFilterWebContents(allowedWebContents)).thenReturn(false); + + observer.onTabAdded(allowedTab); + verify(mObserverDelegate).onTabAdded(allowedTab); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxPedalsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxPedalsTest.java index 70707d6..6ffff28d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxPedalsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxPedalsTest.java
@@ -80,7 +80,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @Batch(Batch.PER_CLASS) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class OmniboxPedalsTest { @Rule public ReusedCtaTransitTestRule<WebPageStation> mActivityTestRule =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java index 856d0b2..489c69c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/page_info/PageInfoViewTest.java
@@ -69,7 +69,6 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Features; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.FederatedIdentityTestUtils; @@ -151,7 +150,6 @@ ChromeSwitches.DISABLE_STARTUP_PROMOS, ContentSwitches.HOST_RESOLVER_RULES + "=MAP * 127.0.0.1" }) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class PageInfoViewTest { private static final String sSimpleHtml = "/chrome/test/data/android/simple.html"; private static final String sSiteDataHtml = "/content/test/data/browsing_data/site_data.html";
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/CredentialManagerIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/CredentialManagerIntegrationTest.java index 0a4748c..e450d43 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/CredentialManagerIntegrationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/settings/CredentialManagerIntegrationTest.java
@@ -35,10 +35,8 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DoNotBatch; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.PayloadCallbackHelper; import org.chromium.base.test.util.Restriction; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.password_manager.CredentialManagerLauncherFactory; import org.chromium.chrome.browser.password_manager.FakeCredentialManagerLauncherFactoryImpl; @@ -63,7 +61,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @DoNotBatch(reason = "TODO(crbug.com/344665935): Failing when batched, batch this again.") @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "show-autofill-signatures"}) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class CredentialManagerIntegrationTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); @Rule public SyncTestRule mSyncTestRule = new SyncTestRule();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java index bb7a570..3b4e50b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java
@@ -95,7 +95,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @DoNotBatch(reason = "Child account can leak to other tests in the suite.") -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class PrivacySettingsFragmentTest { // Index of the Privacy Sandbox row entry in the settings list. public static final int PRIVACY_SANDBOX_V4_POS_IDX = 4;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java index 770c25c3..7d2915f0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
@@ -151,7 +151,7 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "show-autofill-signatures"}) @DoNotBatch(reason = "Tests cannot run batched because they launch a Settings activity.") -@DisableFeatures({ChromeFeatureList.DATA_SHARING, ChromeFeatureList.SETTINGS_MULTI_COLUMN}) +@DisableFeatures(ChromeFeatureList.DATA_SHARING) public class MainSettingsFragmentTest { private static final String SEARCH_ENGINE_SHORT_NAME = "Google";
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninSignoutIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninSignoutIntegrationTest.java index 36a4e20..88f0e01 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninSignoutIntegrationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninSignoutIntegrationTest.java
@@ -34,9 +34,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CriteriaHelper; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.HistogramWatcher; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.settings.MainSettings; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; @@ -61,7 +59,6 @@ /** Test the lifecycle of sign-in and sign-out. */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class SigninSignoutIntegrationTest { @Rule public final SettingsActivityTestRule<AccountManagementFragment> mSettingsActivityTestRule =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java index 8556b39..9b2d53d3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivityTest.java
@@ -46,7 +46,6 @@ /** Tests for ManageSpaceActivity. */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class ManageSpaceActivityTest { @Rule public FreshCtaTransitTestRule mActivityTestRule =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettingsWithFakeSyncServiceImplTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettingsWithFakeSyncServiceImplTest.java index cfb13b70..707dcfb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettingsWithFakeSyncServiceImplTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/settings/ManageSyncSettingsWithFakeSyncServiceImplTest.java
@@ -49,9 +49,7 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.HistogramWatcher; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.settings.SettingsActivity; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; @@ -76,7 +74,6 @@ /** Test for ManageSyncSettings with FakeSyncServiceImpl. */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class ManageSyncSettingsWithFakeSyncServiceImplTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/android/profiles/arm.newest.txt b/chrome/android/profiles/arm.newest.txt index 214af00..60b9ec4 100644 --- a/chrome/android/profiles/arm.newest.txt +++ b/chrome/android/profiles/arm.newest.txt
@@ -1 +1 @@ -chromeos-chrome-arm-144.0.7544.0_pre1549076_rc-r1-merged.afdo.bz2 +chromeos-chrome-arm-144.0.7545.0_pre1549389_rc-r1-merged.afdo.bz2
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 7856cf2..5e9d9b1 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -2806,6 +2806,7 @@ "android/httpclient/http_client_bridge.cc", "android/httpclient/http_client_bridge.h", "android/intent_handler.cc", + "android/media/document_picture_in_picture_bridge_android.cc", "android/media/media_capture_devices_dispatcher_android.cc", "android/media_state_observer.cc", "android/media_state_observer.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index e0e28ecc..aba2676 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2400,27 +2400,6 @@ }; #if !BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kMinimumTabWidthSettingPinned[] = { - {tabs::kMinimumTabWidthFeatureParameterName, "54"}}; -const FeatureEntry::FeatureParam kMinimumTabWidthSettingMedium[] = { - {tabs::kMinimumTabWidthFeatureParameterName, "72"}}; -const FeatureEntry::FeatureParam kMinimumTabWidthSettingLarge[] = { - {tabs::kMinimumTabWidthFeatureParameterName, "140"}}; -const FeatureEntry::FeatureParam kMinimumTabWidthSettingFull[] = { - {tabs::kMinimumTabWidthFeatureParameterName, "256"}}; - -const FeatureEntry::FeatureVariation kTabScrollingVariations[] = { - {" - tabs shrink to pinned tab width", kMinimumTabWidthSettingPinned, - std::size(kMinimumTabWidthSettingPinned), nullptr}, - {" - tabs shrink to a medium width", kMinimumTabWidthSettingMedium, - std::size(kMinimumTabWidthSettingMedium), nullptr}, - {" - tabs shrink to a large width", kMinimumTabWidthSettingLarge, - std::size(kMinimumTabWidthSettingLarge), nullptr}, - {" - tabs don't shrink", kMinimumTabWidthSettingFull, - std::size(kMinimumTabWidthSettingFull), nullptr}}; -#endif - -#if !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kTabSearchToolbarButton[] = { {"tab_search_toolbar_button", "true"}}; @@ -2430,52 +2409,6 @@ }; #endif -const FeatureEntry::FeatureParam kTabScrollingButtonPositionRight[] = { - {features::kTabScrollingButtonPositionParameterName, "0"}}; -const FeatureEntry::FeatureParam kTabScrollingButtonPositionLeft[] = { - {features::kTabScrollingButtonPositionParameterName, "1"}}; -const FeatureEntry::FeatureParam kTabScrollingButtonPositionSplit[] = { - {features::kTabScrollingButtonPositionParameterName, "2"}}; - -const FeatureEntry::FeatureVariation kTabScrollingButtonPositionVariations[] = { - {" - to the right of the tabstrip", kTabScrollingButtonPositionRight, - std::size(kTabScrollingButtonPositionRight), nullptr}, - {" - to the left of the tabstrip", kTabScrollingButtonPositionLeft, - std::size(kTabScrollingButtonPositionLeft), nullptr}, - {" - on both sides of the tabstrip", kTabScrollingButtonPositionSplit, - std::size(kTabScrollingButtonPositionSplit), nullptr}}; - -#if !BUILDFLAG(IS_ANDROID) -const FeatureEntry::FeatureParam kTabScrollingWithDraggingWithConstantSpeed[] = - {{tabs::kTabScrollingWithDraggingModeName, "1"}}; -const FeatureEntry::FeatureParam kTabScrollingWithDraggingWithVariableSpeed[] = - {{tabs::kTabScrollingWithDraggingModeName, "2"}}; - -const FeatureEntry::FeatureVariation kTabScrollingWithDraggingVariations[] = { - {" - tabs scrolling with constant speed", - kTabScrollingWithDraggingWithConstantSpeed, - std::size(kTabScrollingWithDraggingWithConstantSpeed), nullptr}, - {" - tabs scrolling with variable speed region", - kTabScrollingWithDraggingWithVariableSpeed, - std::size(kTabScrollingWithDraggingWithVariableSpeed), nullptr}}; - -const FeatureEntry::FeatureParam kScrollableTabStripOverflowDivider[] = { - {tabs::kScrollableTabStripOverflowModeName, "1"}}; -const FeatureEntry::FeatureParam kScrollableTabStripOverflowFade[] = { - {tabs::kScrollableTabStripOverflowModeName, "2"}}; -const FeatureEntry::FeatureParam kScrollableTabStripOverflowShadow[] = { - {tabs::kScrollableTabStripOverflowModeName, "3"}}; - -const FeatureEntry::FeatureVariation kScrollableTabStripOverflowVariations[] = { - {" - Divider", kScrollableTabStripOverflowDivider, - std::size(kScrollableTabStripOverflowDivider), nullptr}, // Divider - {" - Fade", kScrollableTabStripOverflowFade, - std::size(kScrollableTabStripOverflowFade), nullptr}, // Fade - {" - Shadow", kScrollableTabStripOverflowShadow, - std::size(kScrollableTabStripOverflowShadow), nullptr}, // Shadow -}; -#endif - #if !BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kShowSidePanelsOnSameSide[] = { {"side_panel_relative_alignment", "same"}}; @@ -7591,28 +7524,6 @@ "MBIMode")}, #if !BUILDFLAG(IS_ANDROID) - {flag_descriptions::kScrollableTabStripFlagId, - flag_descriptions::kScrollableTabStripName, - flag_descriptions::kScrollableTabStripDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(tabs::kScrollableTabStrip, - kTabScrollingVariations, - "TabScrolling")}, -#endif - {flag_descriptions::kTabScrollingButtonPositionFlagId, - flag_descriptions::kTabScrollingButtonPositionName, - flag_descriptions::kTabScrollingButtonPositionDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(features::kTabScrollingButtonPosition, - kTabScrollingButtonPositionVariations, - "TabScrollingButtonPosition")}, - -#if !BUILDFLAG(IS_ANDROID) - {flag_descriptions::kScrollableTabStripWithDraggingFlagId, - flag_descriptions::kScrollableTabStripWithDraggingName, - flag_descriptions::kScrollableTabStripWithDraggingDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(tabs::kScrollableTabStripWithDragging, - kTabScrollingWithDraggingVariations, - "TabScrollingWithDragging")}, - {"tabsearch-toolbar-button", flag_descriptions::kLaunchedTabSearchToolbarName, flag_descriptions::kLaunchedTabSearchToolbarDescription, kOsDesktop, @@ -7624,17 +7535,6 @@ FEATURE_WITH_PARAMS_VALUE_TYPE(features::kTabstripComboButton, kTabstripComboButtonVariations, "TabstripComboButton")}, - - {flag_descriptions::kScrollableTabStripOverflowFlagId, - flag_descriptions::kScrollableTabStripOverflowName, - flag_descriptions::kScrollableTabStripOverflowDescription, kOsDesktop, - FEATURE_WITH_PARAMS_VALUE_TYPE(tabs::kScrollableTabStripOverflow, - kScrollableTabStripOverflowVariations, - "ScrollableTabStripOverflow")}, - - {"split-tabstrip", flag_descriptions::kSplitTabStripName, - flag_descriptions::kSplitTabStripDescription, kOsDesktop, - FEATURE_VALUE_TYPE(tabs::kSplitTabStrip)}, #endif #if !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/android/media/document_picture_in_picture_bridge_android.cc b/chrome/browser/android/media/document_picture_in_picture_bridge_android.cc new file mode 100644 index 0000000..953088a --- /dev/null +++ b/chrome/browser/android/media/document_picture_in_picture_bridge_android.cc
@@ -0,0 +1,26 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/android/chrome_jni_headers/DocumentPictureInPictureActivity_jni.h" +#include "chrome/browser/picture_in_picture/picture_in_picture_window_manager.h" +#include "content/public/browser/web_contents.h" +#include "third_party/jni_zero/jni_zero.h" + +using content::WebContents; + +class DocumentPictureInPictureCCTActivity { + public: + void NonStatic(JNIEnv* env); +}; + +void JNI_DocumentPictureInPictureActivity_OnActivityStart( + JNIEnv* env, + const jni_zero::JavaParamRef<jobject>& parentWebContent, + const jni_zero::JavaParamRef<jobject>& webContent) { + WebContents* parent_web_contents = + WebContents::FromJavaWebContents(parentWebContent); + WebContents* web_content = WebContents::FromJavaWebContents(webContent); + PictureInPictureWindowManager::GetInstance()->EnterDocumentPictureInPicture( + parent_web_contents, web_content); +}
diff --git a/chrome/browser/ash/arc/session/arc_disk_space_monitor.h b/chrome/browser/ash/arc/session/arc_disk_space_monitor.h index e2c56fb2..5274e92 100644 --- a/chrome/browser/ash/arc/session/arc_disk_space_monitor.h +++ b/chrome/browser/ash/arc/session/arc_disk_space_monitor.h
@@ -39,7 +39,6 @@ // A pre-stop warning notification should not be shown more than once within // this interval. -// TODO(b/237040345): Finalize the value. inline constexpr base::TimeDelta kPreStopNotificationReshowInterval = base::Minutes(2);
diff --git a/chrome/browser/ash/boca/on_task/on_task_session_manager_browsertest.cc b/chrome/browser/ash/boca/on_task/on_task_session_manager_browsertest.cc index 4df355e..e1cff267 100644 --- a/chrome/browser/ash/boca/on_task/on_task_session_manager_browsertest.cc +++ b/chrome/browser/ash/boca/on_task/on_task_session_manager_browsertest.cc
@@ -184,7 +184,6 @@ base::test::ScopedFeatureList scoped_feature_list_; }; -// TODO(https://crbug.com/445300633): Re-enable this test IN_PROC_BROWSER_TEST_F( OnTaskSessionManagerBrowserTest, ShouldEnforceDomainNavRestrictionOnHomepageOnSessionStart) {
diff --git a/chrome/browser/ash/file_system_provider/content_cache/local_fd.cc b/chrome/browser/ash/file_system_provider/content_cache/local_fd.cc index 5e82e06..4848fc53 100644 --- a/chrome/browser/ash/file_system_provider/content_cache/local_fd.cc +++ b/chrome/browser/ash/file_system_provider/content_cache/local_fd.cc
@@ -48,16 +48,17 @@ file = std::make_unique<base::File>( path, base::File::FLAG_OPEN | base::File::FLAG_READ); } - int bytes_read = file->Read(offset, buffer->data(), length); - if (bytes_read < 0) { + const std::optional<size_t> bytes_read = + file->Read(offset, buffer->first(length)); + if (!bytes_read) { PLOG(ERROR) << "Failed to read bytes from file"; return base::unexpected(base::File::FILE_ERROR_FAILED); } - VLOG(2) << "ReadBytesBlocking: {bytes_read = '" << bytes_read + VLOG(2) << "ReadBytesBlocking: {bytes_read = '" << *bytes_read << "', file.GetLength = '" << file->GetLength() << "', offset = '" << offset << "', length = '" << length << "'}"; - return std::make_pair(std::move(file), bytes_read); + return std::make_pair(std::move(file), *bytes_read); } } // namespace
diff --git a/chrome/browser/ash/settings/about_flags.cc b/chrome/browser/ash/settings/about_flags.cc index fb64808..0f6dab9 100644 --- a/chrome/browser/ash/settings/about_flags.cc +++ b/chrome/browser/ash/settings/about_flags.cc
@@ -195,10 +195,11 @@ } void FeatureFlagsUpdate::UpdateSessionManager() { - // TODO(crbug.com/832857): Introduce a CHECK to ensure primary user. // Early out so that switches for secondary users are not applied to the whole - // session. This could be removed when things like flags UI of secondary users - // are fixed properly and TODO above to add CHECK() is done. + // session. + // Note that this early return could be removed when things like flags UI of + // secondary users are fixed properly - in that case a CHECK should be added + // that the active user is the primary user. user_manager::UserManager* user_manager = user_manager::UserManager::Get(); const user_manager::User* primary_user = user_manager->GetPrimaryUser(); if (!primary_user || primary_user != user_manager->GetActiveUser())
diff --git a/chrome/browser/ash/shimless_rma/diagnostics_app_profile_helper.cc b/chrome/browser/ash/shimless_rma/diagnostics_app_profile_helper.cc index fa0a3e2..7334bcc 100644 --- a/chrome/browser/ash/shimless_rma/diagnostics_app_profile_helper.cc +++ b/chrome/browser/ash/shimless_rma/diagnostics_app_profile_helper.cc
@@ -441,8 +441,7 @@ CHECK(g_browser_process); CHECK(g_browser_process->profile_manager()); CHECK(BrowserContextHelper::Get()); - // TODO(b/292227137): Use ScopedProfileKeepAlive before migrate this to - // LaCrOS. + g_browser_process->profile_manager()->CreateProfileAsync( BrowserContextHelper::Get()->GetShimlessRmaAppBrowserContextPath(), base::BindOnce(&OnProfileLoaded, std::move(state)));
diff --git a/chrome/browser/ash/system_web_apps/apps/DEPS b/chrome/browser/ash/system_web_apps/apps/DEPS index 146533666..2fa1f6e6 100644 --- a/chrome/browser/ash/system_web_apps/apps/DEPS +++ b/chrome/browser/ash/system_web_apps/apps/DEPS
@@ -59,7 +59,6 @@ "+chrome/browser/manta/manta_service_factory.h", "+chrome/browser/media/webrtc", "+chrome/browser/metrics", - # TODO(b/335118703): Move out from this list. "+chrome/browser/pdf", "+chrome/browser/platform_util.h", "+chrome/browser/policy", @@ -100,7 +99,6 @@ "+chrome/common/url_constants.h", "+chrome/common/webui_url_constants.h", "+chrome/grit", - # TODO(b/335118703): Move out from this list. "+chrome/services/pdf/public/mojom", "+chrome/test/base", ]
diff --git a/chrome/browser/ash/system_web_apps/apps/os_flags_system_web_app_info.h b/chrome/browser/ash/system_web_apps/apps/os_flags_system_web_app_info.h index 5670c4d..cdf8a34 100644 --- a/chrome/browser/ash/system_web_apps/apps/os_flags_system_web_app_info.h +++ b/chrome/browser/ash/system_web_apps/apps/os_flags_system_web_app_info.h
@@ -24,8 +24,6 @@ // ash::SystemWebAppDelegate: std::unique_ptr<web_app::WebAppInstallInfo> GetWebAppInfo() const override; - // TODO(crbug.com/40201849) - Add override for GetAdditionalSearchTerms() to - // allow capturing the os:// search tearms to be used. bool ShouldCaptureNavigations() const override; bool IsAppEnabled() const override; bool ShouldShowInLauncher() const override;
diff --git a/chrome/browser/ash/system_web_apps/apps/print_preview_cros_system_web_app_info.cc b/chrome/browser/ash/system_web_apps/apps/print_preview_cros_system_web_app_info.cc index 3b4d39b..c0c4ec4 100644 --- a/chrome/browser/ash/system_web_apps/apps/print_preview_cros_system_web_app_info.cc +++ b/chrome/browser/ash/system_web_apps/apps/print_preview_cros_system_web_app_info.cc
@@ -38,10 +38,8 @@ info->display_mode = blink::mojom::DisplayMode::kStandalone; info->user_display_mode = web_app::mojom::UserDisplayMode::kStandalone; - // TODO(b/323585997): Localize title. info->title = kPrintPreviewCrosTitle; - // TODO(b/323421684): Replace with actual app icons when available. web_app::CreateIconInfoForSystemWebApp( info->start_url(), {{"app_icon_192.png", 192,
diff --git a/chrome/browser/ash/system_web_apps/apps/terminal_source.h b/chrome/browser/ash/system_web_apps/apps/terminal_source.h index ab52685..ea4631c0 100644 --- a/chrome/browser/ash/system_web_apps/apps/terminal_source.h +++ b/chrome/browser/ash/system_web_apps/apps/terminal_source.h
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(crbug.com/40677452): Move TerminalSource to chromeos/components - #ifndef CHROME_BROWSER_ASH_SYSTEM_WEB_APPS_APPS_TERMINAL_SOURCE_H_ #define CHROME_BROWSER_ASH_SYSTEM_WEB_APPS_APPS_TERMINAL_SOURCE_H_
diff --git a/chrome/browser/ash/system_web_apps/system_web_app_manager.cc b/chrome/browser/ash/system_web_apps/system_web_app_manager.cc index 7969c919..c996e60 100644 --- a/chrome/browser/ash/system_web_apps/system_web_app_manager.cc +++ b/chrome/browser/ash/system_web_apps/system_web_app_manager.cc
@@ -107,9 +107,6 @@ SystemWebAppDelegateMap CreateSystemWebApps(Profile* profile) { std::vector<std::unique_ptr<SystemWebAppDelegate>> info_vec; - // TODO(crbug.com/40118385): Currently unused, will be hooked up - // post-migration. We're making delegates for everything, and will then use - // them in place of SystemAppInfos. info_vec.push_back(std::make_unique<CameraSystemAppDelegate>(profile)); info_vec.push_back(std::make_unique<DemoModeSystemAppDelegate>(profile)); info_vec.push_back(std::make_unique<DiagnosticsSystemAppDelegate>(profile));
diff --git a/chrome/browser/background/glic/glic_status_icon.h b/chrome/browser/background/glic/glic_status_icon.h index 971f0d7..a932cfd 100644 --- a/chrome/browser/background/glic/glic_status_icon.h +++ b/chrome/browser/background/glic/glic_status_icon.h
@@ -60,13 +60,9 @@ void OnBrowserRemoved(Browser* browser) override; // GlicProfileManager::Observer - // TODO(crbug.com/404311796): would ideally observe window show/hide via the - // profile manager, directly. void OnLastActiveGlicProfileChanged(Profile* profile) override; // GlicWindowController::StateObserver - // TODO(crbug.com/404311796): would ideally observe window show/hide via the - // profile manager, directly. void PanelStateChanged( const mojom::PanelState& panel_state, const GlicWindowController::PanelStateContext& context) override;
diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java index 4e365c8..6d21f285 100644 --- a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java +++ b/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java
@@ -272,7 +272,6 @@ public void onUiModeChanged(@BookmarkUiMode int mode) { mCurrentUiMode = mode; - // TODO(https://crbug.com/1439583): Update buttons. mModel.set(BookmarkToolbarProperties.BOOKMARK_UI_MODE, mode); if (mode == BookmarkUiMode.LOADING) { mModel.set(BookmarkToolbarProperties.NAVIGATION_BUTTON_STATE, NavigationButton.NONE);
diff --git a/chrome/browser/bookmarks/managed_bookmark_service_unittest.cc b/chrome/browser/bookmarks/managed_bookmark_service_unittest.cc index 7027080..d2bd69b 100644 --- a/chrome/browser/bookmarks/managed_bookmark_service_unittest.cc +++ b/chrome/browser/bookmarks/managed_bookmark_service_unittest.cc
@@ -86,7 +86,6 @@ prefs_ = profile_->GetTestingPrefService(); ASSERT_FALSE(prefs_->HasPrefPath(bookmarks::prefs::kManagedBookmarks)); - // TODO(crbug.com/40508978): Convert SetManagedPrefs to take a unique_ptr. prefs_->SetManagedPref(bookmarks::prefs::kManagedBookmarks, base::Value(CreateTestTree()));
diff --git a/chrome/browser/commerce/android/javatests/src/org/chromium/chrome/browser/commerce/PriceNotificationSettingsFragmentTest.java b/chrome/browser/commerce/android/javatests/src/org/chromium/chrome/browser/commerce/PriceNotificationSettingsFragmentTest.java index f184d724..86ea417 100644 --- a/chrome/browser/commerce/android/javatests/src/org/chromium/chrome/browser/commerce/PriceNotificationSettingsFragmentTest.java +++ b/chrome/browser/commerce/android/javatests/src/org/chromium/chrome/browser/commerce/PriceNotificationSettingsFragmentTest.java
@@ -24,8 +24,6 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DoNotBatch; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.Features.DisableFeatures; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; @@ -47,7 +45,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @DoNotBatch(reason = "Layout and behavior are dependent on setup params for the activity.") -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class PriceNotificationSettingsFragmentTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc index bfaef0c1..1ac1dc3 100644 --- a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc +++ b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.cc
@@ -61,6 +61,14 @@ webui::SetBrowserWindowInterface(web_contents, browser_window); } +std::set<SessionID> GetAllTabIdsInTabStrip(TabStripModel* tab_strip_model) { + std::set<SessionID> tab_ids; + for (tabs::TabInterface* tab : *tab_strip_model) { + tab_ids.insert(sessions::SessionTabHelper::IdForTab(tab->GetContents())); + } + return tab_ids; +} + } // namespace namespace contextual_tasks { @@ -106,10 +114,12 @@ browser_window->RegisterActiveTabDidChange(base::BindRepeating( &ContextualTasksSidePanelCoordinator::OnActiveTabChanged, base::Unretained(this))); + browser_window_->GetTabStripModel()->AddObserver(this); } -ContextualTasksSidePanelCoordinator::~ContextualTasksSidePanelCoordinator() = - default; +ContextualTasksSidePanelCoordinator::~ContextualTasksSidePanelCoordinator() { + browser_window_->GetTabStripModel()->RemoveObserver(this); +} // static ContextualTasksSidePanelCoordinator* ContextualTasksSidePanelCoordinator::From( @@ -298,6 +308,32 @@ } } +void ContextualTasksSidePanelCoordinator::CleanUpUnusedWebContents() { + std::set<SessionID> tab_ids = + GetAllTabIdsInTabStrip(browser_window_->GetTabStripModel()); + for (auto it = task_id_to_web_contents_cache_.begin(); + it != task_id_to_web_contents_cache_.end();) { + base::Uuid task_id = it->first; + // If the WebContents has no open tabs associated with it in the current + // window, then remove it. + bool found = false; + for (auto tab_id : + context_controller_->GetTabsAssociatedWithTask(task_id)) { + if (base::Contains(tab_ids, tab_id)) { + found = true; + break; + } + } + + if (!found) { + MaybeDetachWebContentsFromWebView(it->second->web_contents.get()); + it = task_id_to_web_contents_cache_.erase(it); + } else { + ++it; + } + } +} + void ContextualTasksSidePanelCoordinator::UpdateOpenStateForCurrentTask( bool is_open) { std::optional<ContextualTask> task = GetCurrentTask(); @@ -334,6 +370,25 @@ UpdateForActiveTab(); } +void ContextualTasksSidePanelCoordinator::OnTabStripModelChanged( + TabStripModel* tab_strip_model, + const TabStripModelChange& change, + const TabStripSelectionChange& selection) { + if (change.type() == TabStripModelChange::kRemoved) { + for (const auto& content : change.GetRemove()->contents) { + // Do not disassociate the tab from the task if insert into side panel. + if (content.remove_reason != + TabStripModelChange::RemoveReason::kInsertedIntoSidePanel) { + DisassociateTabFromTask(content.contents); + } + } + CleanUpUnusedWebContents(); + } else if (change.type() == TabStripModelChange::kReplaced) { + DisassociateTabFromTask(change.GetReplace()->old_contents); + CleanUpUnusedWebContents(); + } +} + std::unique_ptr<views::View> ContextualTasksSidePanelCoordinator::CreateSidePanelView( SidePanelEntryScope& scope) { @@ -437,4 +492,14 @@ } } +void ContextualTasksSidePanelCoordinator::DisassociateTabFromTask( + content::WebContents* web_contents) { + SessionID tab_id = sessions::SessionTabHelper::IdForTab(web_contents); + std::optional<ContextualTask> task = + context_controller_->GetContextualTaskForTab(tab_id); + if (task) { + context_controller_->DisassociateTabFromTask(task->GetTaskId(), tab_id); + } +} + } // namespace contextual_tasks
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.h b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.h index 20b5427..7c6d483 100644 --- a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.h +++ b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator.h
@@ -33,8 +33,8 @@ class ContextualTasksUiService; class ContextualTasksWebView; -class ContextualTasksSidePanelCoordinator - : public content::WebContentsObserver { +class ContextualTasksSidePanelCoordinator : public TabStripModelObserver, + content::WebContentsObserver { public: // A data structure to hold the cache and state of the side panel per thread. struct WebContentsCacheItem { @@ -104,6 +104,9 @@ // Hide or show side panel base on open state of the current task. void UpdateSidePanelVisibility(); + // Clean up unused WebContents. + void CleanUpUnusedWebContents(); + // Update the open state of the current task. // Do nothing if no task is found. void UpdateOpenStateForCurrentTask(bool is_open); @@ -116,6 +119,12 @@ // Handle swapping WebContents if thread changes. void OnActiveTabChanged(BrowserWindowInterface* browser_interface); + // TabStripModelObserver: + void OnTabStripModelChanged( + TabStripModel* tab_strip_model, + const TabStripModelChange& change, + const TabStripSelectionChange& selection) override; + // Create the side panel view. std::unique_ptr<views::View> CreateSidePanelView(SidePanelEntryScope& scope); @@ -137,6 +146,9 @@ // Update the statucs of active tab context on the side panel. void UpdateActiveTabContextStatus(); + // Disassociate the tab from the task if it's associated with it. + void DisassociateTabFromTask(content::WebContents* web_contents); + // Browser window of the current side panel. const raw_ptr<BrowserWindowInterface> browser_window_ = nullptr; @@ -159,9 +171,6 @@ std::map<base::Uuid, std::unique_ptr<WebContentsCacheItem>> task_id_to_web_contents_cache_; - // Finds a WebContentsCacheItem by task_id. Returns nullptr if not found. - WebContentsCacheItem* FindWebContentsCacheItem(const base::Uuid& task_id); - ui::ScopedUnownedUserData<ContextualTasksSidePanelCoordinator> scoped_unowned_user_data_; };
diff --git a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator_interactive_uitest.cc b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator_interactive_uitest.cc index 6ee660bb..26cc666 100644 --- a/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator_interactive_uitest.cc +++ b/chrome/browser/contextual_tasks/contextual_tasks_side_panel_coordinator_interactive_uitest.cc
@@ -236,16 +236,23 @@ EXPECT_EQ(4, detach_index); ContextualTasksSidePanelCoordinator* coordinator = ContextualTasksSidePanelCoordinator::From(browser()); + ContextualTasksContextController* contextual_tasks_controller = + ContextualTasksContextControllerFactory::GetForProfile( + browser()->profile()); + content::WebContents* tab_web_contents; + ContextualTask task3 = contextual_tasks_controller->CreateTask(); + + // Associate tab_web_contents to task3. + contextual_tasks_controller->AssociateTabWithTask( + task3.GetTaskId(), sessions::SessionTabHelper::IdForTab( + tab_strip_model->GetActiveWebContents())); + RunTestSequence( Do([&]() { // Add tab5. Create a new task and associate with it. chrome::AddTabAt(browser(), GURL(chrome::kChromeUISettingsURL), -1, true); - ContextualTasksContextController* contextual_tasks_controller = - ContextualTasksContextControllerFactory::GetForProfile( - browser()->profile()); - ContextualTask task3 = contextual_tasks_controller->CreateTask(); int current_index = tab_strip_model->GetIndexOfWebContents( tab_strip_model->GetActiveWebContents()); EXPECT_EQ(5, current_index); @@ -272,6 +279,10 @@ // Verify the tab web contents is transferred into the side panel. EXPECT_EQ(tab_web_contents, coordinator->GetActiveWebContentsForTesting()); + + // Verify the tab web contents is still associated with task3. + EXPECT_TRUE(contextual_tasks_controller->GetContextualTaskForTab( + sessions::SessionTabHelper::IdForTab(tab_web_contents))); })); } @@ -416,4 +427,56 @@ })); } +IN_PROC_BROWSER_TEST_F(ContextualTasksSidePanelCoordinatorInteractiveUiTest, + CloseTabsCleanUpSidePanel) { + SetUpTasks(); + ContextualTasksSidePanelCoordinator* coordinator = + ContextualTasksSidePanelCoordinator::From(browser()); + RunTestSequence( + Do([&]() { + // Open side panel. + coordinator->Show(); + }), + WaitForShow(kContextualTasksSidePanelWebViewElementId), Do([&]() { + content::WebContents* web_contents1 = + coordinator->GetActiveWebContentsForTesting(); + ContextualTasksContextController* contextual_tasks_controller = + ContextualTasksContextControllerFactory::GetForProfile( + browser()->profile()); + + SessionID tab_id0 = sessions::SessionTabHelper::IdForTab( + browser()->tab_strip_model()->GetWebContentsAt(0)); + + // Close tab0, verify tab0 is removed from task1. + EXPECT_EQ(task_id1_, + contextual_tasks_controller->GetContextualTaskForTab(tab_id0) + ->GetTaskId()); + browser()->tab_strip_model()->CloseWebContentsAt( + 0, TabCloseTypes::CLOSE_NONE); + EXPECT_EQ( + std::nullopt, + contextual_tasks_controller->GetContextualTaskForTab(tab_id0)); + + // Activate tab1, verify the side panel cache is still present. + browser()->tab_strip_model()->ActivateTabAt(1); + EXPECT_EQ(web_contents1, coordinator->GetActiveWebContentsForTesting()); + + SessionID tab_id1 = sessions::SessionTabHelper::IdForTab( + browser()->tab_strip_model()->GetWebContentsAt(1)); + + // Close tab1, verify tab1 is removed from task1 and side panel + // WebContents is removed. + EXPECT_EQ(task_id1_, + contextual_tasks_controller->GetContextualTaskForTab(tab_id1) + ->GetTaskId()); + browser()->tab_strip_model()->CloseWebContentsAt( + 1, TabCloseTypes::CLOSE_NONE); + EXPECT_EQ( + std::nullopt, + contextual_tasks_controller->GetContextualTaskForTab(tab_id1)); + + EXPECT_EQ(nullptr, coordinator->GetActiveWebContentsForTesting()); + })); +} + } // namespace contextual_tasks
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc index 36dc634..615cd654 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
@@ -34,6 +34,7 @@ #include "extensions/common/error_utils.h" #include "extensions/common/extension.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" +#include "third_party/blink/public/mojom/devtools/console_message.mojom.h" using browsing_data::BrowsingDataType; using browsing_data::ClearBrowsingDataTab; @@ -84,10 +85,6 @@ return content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE; } if (UNSAFE_TODO(strcmp( - key, extension_browsing_data_api_constants::kPasswordsKey)) == 0) { - return chrome_browsing_data_remover::DATA_TYPE_PASSWORDS; - } - if (UNSAFE_TODO(strcmp( key, extension_browsing_data_api_constants::kServiceWorkersKey)) == 0) { return content::BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS; @@ -210,7 +207,7 @@ extension_browsing_data_api_constants::kFormDataKey, isDataTypeSelected(BrowsingDataType::FORM_DATA, tab)); SetDetails(&selected, &permitted, - extension_browsing_data_api_constants::kPasswordsKey, + extension_browsing_data_api_constants::kPasswordsKeyDeprecated, isDataTypeSelected(BrowsingDataType::PASSWORDS, tab)); base::Value::Dict result; @@ -249,6 +246,15 @@ Release(); // Balanced in StartRemoving. } +void BrowsingDataRemoverFunction::LogUnsupportedDataTypeWarning( + const std::string& data_types) { + WriteToConsole( + blink::mojom::ConsoleMessageLevel::kWarning, + base::StringPrintf( + extension_browsing_data_api_constants::kUnsupportedDataTypeWarning, + data_types.c_str())); +} + ExtensionFunction::ResponseAction BrowsingDataRemoverFunction::Run() { Profile* profile = Profile::FromBrowserContext(browser_context()); // If we don't have a profile, something's pretty wrong. @@ -463,12 +469,24 @@ if (args().size() <= 1 || !args()[1].is_dict()) return false; + std::vector<std::string> unsupported_data_types; *removal_mask = 0; for (const auto kv : args()[1].GetDict()) { if (!kv.second.is_bool()) return false; - if (kv.second.GetBool()) - *removal_mask |= MaskForKey(kv.first.c_str()); + if (kv.second.GetBool()) { + uint64_t mask = MaskForKey(kv.first.c_str()); + if (mask == 0) { + unsupported_data_types.push_back(kv.first); + } else { + *removal_mask |= mask; + } + } + } + + if (!unsupported_data_types.empty()) { + LogUnsupportedDataTypeWarning( + base::JoinString(unsupported_data_types, ", ")); } return true; @@ -482,6 +500,7 @@ uint64_t* removal_mask) { // TODO(http://crbug.com/1266606): deprecate and remove this extension api *removal_mask = 0; + LogUnsupportedDataTypeWarning("appcache"); return true; } @@ -534,12 +553,17 @@ uint64_t* removal_mask) { // Plugin data is not supported anymore. (crbug.com/1135788) *removal_mask = 0; + LogUnsupportedDataTypeWarning( + extension_browsing_data_api_constants::kPluginDataKeyDeprecated); return true; } bool BrowsingDataRemovePasswordsFunction::GetRemovalMask( uint64_t* removal_mask) { - *removal_mask = chrome_browsing_data_remover::DATA_TYPE_PASSWORDS; + // Password deletion is not supported anymore. + *removal_mask = 0; + LogUnsupportedDataTypeWarning( + extension_browsing_data_api_constants::kPasswordsKeyDeprecated); return true; } @@ -558,5 +582,6 @@ bool BrowsingDataRemoveWebSQLFunction::GetRemovalMask(uint64_t* removal_mask) { // TODO(http://crbug.com/420857719): Deprecate and remove this extension api. *removal_mask = 0; + LogUnsupportedDataTypeWarning("webSQL"); return true; }
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.h b/chrome/browser/extensions/api/browsing_data/browsing_data_api.h index 6d38a51..258ab0a 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.h +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.h
@@ -42,7 +42,7 @@ inline constexpr char kHistoryKey[] = "history"; inline constexpr char kIndexedDBKey[] = "indexedDB"; inline constexpr char kLocalStorageKey[] = "localStorage"; -inline constexpr char kPasswordsKey[] = "passwords"; +inline constexpr char kPasswordsKeyDeprecated[] = "passwords"; inline constexpr char kPluginDataKeyDeprecated[] = "pluginData"; inline constexpr char kServiceWorkersKey[] = "serviceWorkers"; inline constexpr char kCacheStorageKey[] = "cacheStorage"; @@ -69,6 +69,8 @@ inline constexpr char kIncompatibleFilterError[] = "Don't set both 'origins' and 'excludeOrigins' at the same time."; inline constexpr char kInvalidOriginError[] = "'%s' is not a valid origin."; +inline constexpr char kUnsupportedDataTypeWarning[] = + "Requested data type(s) are not supported: %s."; } // namespace extension_browsing_data_api_constants @@ -121,6 +123,9 @@ protected: ~BrowsingDataRemoverFunction() override; + // Writes a console log warning when a datatype is unsupported. + void LogUnsupportedDataTypeWarning(const std::string& data_type); + private: // Children should override this method to provide the proper removal mask // based on the API call they represent.
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc index f693bcb..c7e1f51 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
@@ -29,6 +29,7 @@ #include "components/sync/service/sync_user_settings.h" #include "content/public/browser/storage_partition.h" #include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" #include "extensions/browser/api_test_utils.h" #include "extensions/buildflags/buildflags.h" #include "extensions/test/test_extension_dir.h" @@ -47,6 +48,10 @@ #include "chrome/browser/ui/browser.h" #endif +#if !BUILDFLAG(IS_ANDROID) +#include "chrome/test/base/ui_test_utils.h" +#endif //! BUILDFLAG(IS_ANDROID) + static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE)); using extensions::api_test_utils::RunFunctionAndReturnSingleResult; @@ -437,3 +442,86 @@ test_dir.WriteFile(FILE_PATH_LITERAL("background.js"), kBackgroundJs); ASSERT_TRUE(RunExtensionTest(test_dir.UnpackedPath(), {}, {})) << message_; } + +#if !BUILDFLAG(IS_ANDROID) +IN_PROC_BROWSER_TEST_F(BrowsingDataApiTest, UnsupportedDataType) { + static constexpr char kManifest[] = + R"({ + "name": "Test", + "manifest_version": 3, + "version": "0.1", + "permissions": ["browsingData"] + })"; + + static constexpr char kPageHtml[] = R"(<script src="page.js"></script>)"; + static constexpr char kPageJs[] = + R"(chrome.browsingData.removePasswords({}, () => { + chrome.test.succeed(); + }); + )"; + + extensions::TestExtensionDir test_dir; + test_dir.WriteManifest(kManifest); + test_dir.WriteFile(FILE_PATH_LITERAL("page.html"), kPageHtml); + test_dir.WriteFile(FILE_PATH_LITERAL("page.js"), kPageJs); + + const extensions::Extension* extension = + LoadExtension(test_dir.UnpackedPath()); + ASSERT_TRUE(extension); + + content::WebContentsConsoleObserver console_observer( + browser()->tab_strip_model()->GetActiveWebContents()); + console_observer.SetPattern( + "Requested data type(s) are not supported: passwords."); + + ASSERT_TRUE(ui_test_utils::NavigateToURL( + browser(), extension->GetResourceURL("page.html"))); + + ASSERT_TRUE(console_observer.Wait()); + + ASSERT_EQ(1u, console_observer.messages().size()); + EXPECT_EQ(blink::mojom::ConsoleMessageLevel::kWarning, + console_observer.messages()[0].log_level); +} + +IN_PROC_BROWSER_TEST_F(BrowsingDataApiTest, MultipleUnsupportedDataTypes) { + static constexpr char kManifest[] = + R"({ + "name": "Test", + "manifest_version": 3, + "version": "0.1", + "permissions": ["browsingData"] + })"; + + static constexpr char kPageHtml[] = R"(<script src="page.js"></script>)"; + static constexpr char kPageJs[] = + R"(var options = {'since': 1000}; + var dataToRemove = {'passwords': true, 'pluginData': true, 'appcache': false, 'history': true}; + chrome.browsingData.remove(options, dataToRemove, () => { + chrome.test.succeed(); + });)"; + + extensions::TestExtensionDir test_dir; + test_dir.WriteManifest(kManifest); + test_dir.WriteFile(FILE_PATH_LITERAL("page.html"), kPageHtml); + test_dir.WriteFile(FILE_PATH_LITERAL("page.js"), kPageJs); + + const extensions::Extension* extension = + LoadExtension(test_dir.UnpackedPath()); + ASSERT_TRUE(extension); + + content::WebContentsConsoleObserver console_observer( + browser()->tab_strip_model()->GetActiveWebContents()); + console_observer.SetPattern( + "Requested data type(s) are not supported: passwords, pluginData."); + + ASSERT_TRUE(ui_test_utils::NavigateToURL( + browser(), extension->GetResourceURL("page.html"))); + + ASSERT_TRUE(console_observer.Wait()); + + ASSERT_EQ(1u, console_observer.messages().size()); + EXPECT_EQ(blink::mojom::ConsoleMessageLevel::kWarning, + console_observer.messages()[0].log_level); +} +#endif //! BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc index 8b9be27..3466d42 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc
@@ -259,8 +259,8 @@ content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE) | // PluginData is not supported anymore. GetAsMask(data_to_remove, "pluginData", 0) | - GetAsMask(data_to_remove, "passwords", - chrome_browsing_data_remover::DATA_TYPE_PASSWORDS) | + // Passwords are not supported anymore. + GetAsMask(data_to_remove, "passwords", 0) | GetAsMask(data_to_remove, "serviceWorkers", content::BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS); @@ -332,7 +332,6 @@ CheckRemovalPermitted("{\"indexedDB\": true}", true); CheckRemovalPermitted("{\"localStorage\": true}", true); CheckRemovalPermitted("{\"serverBoundCertificates\": true}", true); - CheckRemovalPermitted("{\"passwords\": true}", true); CheckRemovalPermitted("{\"serviceWorkers\": true}", true); // The entire removal is prohibited if any part is. @@ -366,8 +365,7 @@ content::BrowsingDataRemover::DATA_TYPE_CACHE | content::BrowsingDataRemover::DATA_TYPE_DOWNLOADS | chrome_browsing_data_remover::DATA_TYPE_FORM_DATA | - chrome_browsing_data_remover::DATA_TYPE_HISTORY | - chrome_browsing_data_remover::DATA_TYPE_PASSWORDS, + chrome_browsing_data_remover::DATA_TYPE_HISTORY, GetRemovalMask()); } @@ -417,8 +415,6 @@ RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( "localStorage", content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( - "passwords", chrome_browsing_data_remover::DATA_TYPE_PASSWORDS); - RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( "serviceWorkers", content::BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS); } @@ -494,8 +490,6 @@ content::BrowsingDataRemover::DATA_TYPE_INDEXED_DB); RunAndCompareRemovalMask<BrowsingDataRemoveLocalStorageFunction>( content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE); - RunAndCompareRemovalMask<BrowsingDataRemovePasswordsFunction>( - chrome_browsing_data_remover::DATA_TYPE_PASSWORDS); RunAndCompareRemovalMask<BrowsingDataRemoveServiceWorkersFunction>( content::BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS); } @@ -658,7 +652,7 @@ TEST_F(BrowsingDataApiTest, RemoveWithFilterAndInvalidParameters) { CheckInvalidRemovalArgs( - R"([{"origins": ["http://example.com"]}, {"passwords": true}])", + R"([{"origins": ["http://example.com"]}, {"formData": true}])", extension_browsing_data_api_constants::kNonFilterableError); CheckInvalidRemovalArgs(
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc b/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc index f997550a..563d223 100644 --- a/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc +++ b/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc
@@ -293,8 +293,6 @@ EXPECT_TRUE(DevToolsWindow::FindDevToolsWindow(service_worker_host.get())); } -// TODO(crbug.com/439447971): Enable on desktop android. -#if BUILDFLAG(ENABLE_EXTENSIONS) // TODO(crbug.com/40882269): The test is flaky on MSAN and Linux. Re-enable it. #if defined(MEMORY_SANITIZER) || BUILDFLAG(IS_LINUX) #define MAYBE_InspectSplitModeServiceWorkerBackgrounds \ @@ -345,8 +343,9 @@ // Now open up an incognito browser window page and check the inspectable // views again. Waiting for the result catcher will wait for the incognito // service worker to have become active. - Browser* incognito_browser = CreateIncognitoBrowser(profile()); - ASSERT_TRUE(incognito_browser); + content::WebContents* const incognito_window = + PlatformOpenURLOffTheRecord(profile(), GURL("about:blank")); + ASSERT_TRUE(incognito_window); ASSERT_TRUE(result_catcher.GetNextResult()); info = GetExtensionInfo(*extension); // The views should now have 2 entries, one for the main worker which will be @@ -408,7 +407,6 @@ ASSERT_TRUE(incognito_devtools_window); ASSERT_NE(main_devtools_window, incognito_devtools_window); } -#endif // BUILDFLAG(ENABLE_EXTENSIONS) // Test that offscreen documents show up in the list of inspectable views and // can be inspected.
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc index 515594dd..d2e74d7 100644 --- a/chrome/browser/extensions/crx_installer.cc +++ b/chrome/browser/extensions/crx_installer.cc
@@ -948,10 +948,8 @@ // just moved the extension. // TODO(aa): All paths to resources inside extensions should be created // lazily and based on the Extension's root path at that moment. - // TODO(rdevlin.cronin): Continue removing std::string errors and replacing - // with std::u16string ExtensionId extension_id = extension()->id(); - std::string error; + std::u16string error; extension_ = file_util::LoadExtension( version_dir, install_source_, // Note: modified by UpdateCreationFlagsAndCompleteInstall. @@ -961,9 +959,9 @@ ReportSuccessFromSharedFileThread(); } else { LOG(ERROR) << error << " " << extension_id << " " << download_url_; - ReportFailureFromSharedFileThread(CrxInstallError( - CrxInstallErrorType::OTHER, CrxInstallErrorDetail::CANT_LOAD_EXTENSION, - base::UTF8ToUTF16(error))); + ReportFailureFromSharedFileThread( + CrxInstallError(CrxInstallErrorType::OTHER, + CrxInstallErrorDetail::CANT_LOAD_EXTENSION, error)); } }
diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc index 523710d..d437bf71 100644 --- a/chrome/browser/extensions/extension_protocols_unittest.cc +++ b/chrome/browser/extensions/extension_protocols_unittest.cc
@@ -806,7 +806,7 @@ // https://crbug.com/356878412. TEST_P(ExtensionProtocolsTest, PathsWithTrailingSeparatorsAreNotAllowed) { base::FilePath extension_dir = GetTestPath("simple_with_file"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kInternal, Extension::NO_FLAGS, &error); @@ -827,7 +827,7 @@ // on Windows. See https://crbug.com/400119351. TEST_P(ExtensionProtocolsTest, PathsWithTrailingDotSpaceAreNotAllowed) { base::FilePath extension_dir = GetTestPath("simple_with_file"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kInternal, Extension::NO_FLAGS, &error); @@ -851,7 +851,7 @@ // index.html doesn't get any special treatment. TEST_P(ExtensionProtocolsTest, DirectoryWithIndexHtml) { base::FilePath extension_dir = GetTestPath("simple_with_index_html"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kInternal, Extension::NO_FLAGS, &error); @@ -875,7 +875,7 @@ TEST_P(ExtensionProtocolsTest, MetadataFolder) { base::FilePath extension_dir = GetTestPath("metadata_folder"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kInternal, Extension::NO_FLAGS, &error); @@ -1102,7 +1102,7 @@ TEST_P(ExtensionProtocolsTest, ExtensionRequestsNotAborted) { base::FilePath extension_dir = GetTestPath("common").AppendASCII("background_script"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kInternal, Extension::NO_FLAGS, &error);
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 350d119..459c4934 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -2448,9 +2448,9 @@ // This pack should fail because of the contained private key. EXPECT_FALSE(creator->Run(input_directory, crx_path, base::FilePath(), privkey_path, ExtensionCreator::kNoRunFlags)); - EXPECT_THAT(creator->error_message(), - testing::ContainsRegex( - "extension includes the key file.*privkey.pem")); + EXPECT_THAT( + base::UTF16ToUTF8(creator->error_message()), + testing::ContainsRegex("extension includes the key file.*privkey.pem")); } // Test Packaging and installing an extension using an openssl generated key.
diff --git a/chrome/browser/extensions/installed_loader.cc b/chrome/browser/extensions/installed_loader.cc index 462a38052..c366d85e 100644 --- a/chrome/browser/extensions/installed_loader.cc +++ b/chrome/browser/extensions/installed_loader.cc
@@ -385,18 +385,16 @@ // thread. base::ScopedAllowBlocking allow_blocking; - // TODO(crbug.com/41317803): Continue removing std::string errors and - // replacing with std::u16string. - std::string error; + std::u16string error; scoped_refptr<const Extension> extension( file_util::LoadExtension(info.extension_path, info.extension_location, GetCreationFlags(&info), &error)); if (!extension.get() || extension->id() != info.extension_id) { invalid_extensions_.insert(info.extension_path); - LoadErrorReporter::GetInstance()->ReportLoadError( - info.extension_path, base::UTF8ToUTF16(error), profile, - false); // Be quiet. + LoadErrorReporter::GetInstance()->ReportLoadError(info.extension_path, + error, profile, + false); // Be quiet. continue; }
diff --git a/chrome/browser/extensions/pack_extension_job.cc b/chrome/browser/extensions/pack_extension_job.cc index 77a4d1c..cfa687a9 100644 --- a/chrome/browser/extensions/pack_extension_job.cc +++ b/chrome/browser/extensions/pack_extension_job.cc
@@ -98,7 +98,7 @@ std::optional<CrxAndKeyFiles> files = GetCrxAndKeyFilePaths(root_directory_, key_file_); if (!files) { - ReportFailureOnClientSequence("Failed to create files under Downloads", + ReportFailureOnClientSequence(u"Failed to create files under Downloads", ExtensionCreator::ErrorType::kOtherError); } auto crx_file_out = std::make_unique<base::FilePath>(std::move(files->crx)); @@ -144,11 +144,13 @@ } void PackExtensionJob::ReportFailureOnClientSequence( - const std::string& error, + const std::u16string& error, ExtensionCreator::ErrorType error_type) { DCHECK(client_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - client_->OnPackFailure(error, error_type); + // TODO(crbug.com/41317803): Continue removing std::string errors and + // replacing with std::u16string. + client_->OnPackFailure(base::UTF16ToUTF8(error), error_type); } // static
diff --git a/chrome/browser/extensions/pack_extension_job.h b/chrome/browser/extensions/pack_extension_job.h index e626653..13f93a9 100644 --- a/chrome/browser/extensions/pack_extension_job.h +++ b/chrome/browser/extensions/pack_extension_job.h
@@ -65,7 +65,7 @@ void ReportSuccessOnClientSequence( std::unique_ptr<base::FilePath> crx_file_out, std::unique_ptr<base::FilePath> key_file_out); - void ReportFailureOnClientSequence(const std::string& error, + void ReportFailureOnClientSequence(const std::u16string& error, ExtensionCreator::ErrorType error_type); const raw_ptr<Client> client_; // Owns us.
diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc index 6a3033c..a05ff72 100644 --- a/chrome/browser/extensions/unpacked_installer.cc +++ b/chrome/browser/extensions/unpacked_installer.cc
@@ -132,10 +132,10 @@ return false; } - std::string error; + std::u16string error; if (!LoadExtension(mojom::ManifestLocation::kCommandLine, GetFlags(), &error)) { - ReportExtensionLoadError(error); + ReportExtensionLoadError(base::UTF16ToUTF8(error)); return false; } @@ -265,7 +265,7 @@ bool UnpackedInstaller::LoadExtension(mojom::ManifestLocation location, int flags, - std::string* error) { + std::u16string* error) { // Clean up the kMetadataFolder if necessary. This prevents spurious // warnings/errors and ensures we don't treat a user provided file as one by // the Extension system. @@ -288,7 +288,7 @@ IndexAndPersistRulesIfNeeded(error); } -bool UnpackedInstaller::IndexAndPersistRulesIfNeeded(std::string* error) { +bool UnpackedInstaller::IndexAndPersistRulesIfNeeded(std::u16string* error) { DCHECK(extension()); base::expected<base::Value::Dict, std::string> index_result = @@ -296,7 +296,7 @@ IndexAndPersistRulesOnInstall(*extension_); if (!index_result.has_value()) { - *error = std::move(index_result.error()); + *error = base::UTF8ToUTF16(index_result.error()); return false; } @@ -343,13 +343,13 @@ } void UnpackedInstaller::LoadWithFileAccessOnFileThread(int flags) { - std::string error; + std::u16string error; if (!LoadExtension(mojom::ManifestLocation::kUnpacked, flags, &error)) { // Set priority explicitly to avoid unwanted task priority inheritance. content::GetUIThreadTaskRunner({base::TaskPriority::USER_BLOCKING}) ->PostTask(FROM_HERE, base::BindOnce(&UnpackedInstaller::ReportExtensionLoadError, - this, error)); + this, base::UTF16ToUTF8(error))); return; }
diff --git a/chrome/browser/extensions/unpacked_installer.h b/chrome/browser/extensions/unpacked_installer.h index d01767d..f67fbad 100644 --- a/chrome/browser/extensions/unpacked_installer.h +++ b/chrome/browser/extensions/unpacked_installer.h
@@ -168,13 +168,13 @@ // error, returns false and populates `error`. bool LoadExtension(mojom::ManifestLocation location, int flags, - std::string* error); + std::u16string* error); // Reads the Declarative Net Request JSON rulesets for the extension, if it // provided any, and persists the indexed rulesets. Returns false and // populates `error` in case of an error. Should be called on a sequence where // file IO is allowed. - bool IndexAndPersistRulesIfNeeded(std::string* error); + bool IndexAndPersistRulesIfNeeded(std::u16string* error); // Records command-line extension metrics, emitted when a command line // extension is installed.
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 4622b044..36aaa01 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -9897,11 +9897,6 @@ "expiry_milestone": 140 }, { - "name": "tab-scrolling-button-position", - "owners": [ "top-chrome-desktop-ui@google.com", "dpenning@chromium.org" ], - "expiry_milestone": 130 - }, - { "name": "tab-search-position-setting", "owners": [ "top-chrome-desktop-ui@google.com", "dpenning@chromium.org" ], "expiry_milestone": 137
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index ae651e1..16dfea1d 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -3865,11 +3865,6 @@ "Enable to test third-party cookie phaseout. " "Learn more: https://goo.gle/3pcd-flags"; -inline constexpr char kScrollableTabStripFlagId[] = "scrollable-tabstrip"; -inline constexpr char kScrollableTabStripName[] = "Tab Scrolling"; -inline constexpr char kScrollableTabStripDescription[] = - "Enables tab strip to scroll left and right when full."; - inline constexpr char kAppBrowserUseNewLayoutId[] = "app-browser-use-new-layout"; inline constexpr char kAppBrowserUseNewLayoutName[] = @@ -3898,34 +3893,6 @@ "Might require enabling the tab strip combo button configuration to also " "match to toolbar in specific regions."; -inline constexpr char kTabScrollingButtonPositionFlagId[] = - "tab-scrolling-button-position"; -inline constexpr char kTabScrollingButtonPositionName[] = - "Tab Scrolling Buttons"; -inline constexpr char kTabScrollingButtonPositionDescription[] = - "Enables buttons on the tab strip to scroll left and right when full"; - -inline constexpr char kScrollableTabStripWithDraggingFlagId[] = - "scrollable-tabstrip-with-dragging"; -inline constexpr char kScrollableTabStripWithDraggingName[] = - "Tab Scrolling With Dragging"; -inline constexpr char kScrollableTabStripWithDraggingDescription[] = - "Scrolls the tabstrip while dragging tabs towards the end of the visible " - "view."; - -inline constexpr char kScrollableTabStripOverflowFlagId[] = - "scrollable-tabstrip-overflow"; -inline constexpr char kScrollableTabStripOverflowName[] = - "Tab Scrolling Overflow Indicator"; -inline constexpr char kScrollableTabStripOverflowDescription[] = - "Choices for overflow indicators shown when the tabstrip is in scrolling " - "mode."; - -inline constexpr char kSplitTabStripName[] = "Split TabStrip"; -inline constexpr char kSplitTabStripDescription[] = - "Splits pinned and unpinned tabs into separate TabStrips under the hood. " - "Pure refactoring, no user-visible behavioral changes are included."; - inline constexpr char kSidePanelRelativeAlignmentName[] = "Side Panel Relative Alignment"; inline constexpr char kSidePanelRelativeAlignmentDescription[] =
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index 21e36aa..839b0898 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -1035,7 +1035,7 @@ newCachedFlag( SETTINGS_MULTI_COLUMN, /* defaultValue= */ false, - /* defaultValueInTests= */ true); + /* defaultValueInTests= */ false); public static final CachedFlag sSettingsSingleActivity = newCachedFlag( SETTINGS_SINGLE_ACTIVITY,
diff --git a/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingSwitchPreferenceTest.java b/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingSwitchPreferenceTest.java index 28c4936..4fb341f 100644 --- a/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingSwitchPreferenceTest.java +++ b/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingSwitchPreferenceTest.java
@@ -26,15 +26,12 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import org.chromium.base.test.util.Features.DisableFeatures; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.components.browser_ui.settings.PlaceholderSettingsForTest; /** Tests of {@link IncognitoReauthSettingSwitchPreference}. */ @RunWith(ChromeJUnit4ClassRunner.class) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class IncognitoReauthSettingSwitchPreferenceTest { private static final String TITLE = "Preference Title"; private static final String SUMMARY = "This is a summary.";
diff --git a/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingTest.java b/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingTest.java index c4c2eaf07..7a9c2f9 100644 --- a/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingTest.java +++ b/chrome/browser/incognito/android/javatests/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthSettingTest.java
@@ -32,8 +32,6 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.Features.DisableFeatures; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.incognito.R; import org.chromium.chrome.browser.privacy.settings.PrivacySettings; @@ -46,7 +44,6 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class IncognitoReauthSettingTest { private final SettingsActivityTestRule<PrivacySettings> mSettingsActivityTestRule = new SettingsActivityTestRule<>(PrivacySettings.class);
diff --git a/chrome/browser/media/android/media_capture_picker_manager_bridge.cc b/chrome/browser/media/android/media_capture_picker_manager_bridge.cc index f4f0275..e180d51da 100644 --- a/chrome/browser/media/android/media_capture_picker_manager_bridge.cc +++ b/chrome/browser/media/android/media_capture_picker_manager_bridge.cc
@@ -7,10 +7,12 @@ #include <string> #include "base/android/jni_android.h" +#include "chrome/browser/media/webrtc/capture_policy_utils.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h" +#include "url/android/gurl_android.h" // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/MediaCapturePickerManagerBridge_jni.h" @@ -36,6 +38,8 @@ CHECK(params.web_contents); CHECK(callback_.is_null()); callback_ = std::move(callback); + web_contents_filter_ = params.includable_web_contents_filter; + JNIEnv* env = base::android::AttachCurrentThread(); Java_MediaCapturePickerManagerBridge_showDialog( env, java_object_, params.web_contents->GetJavaWebContents(), @@ -80,3 +84,12 @@ std::move(callback_).Run(base::unexpected( blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED_BY_USER)); } + +bool MediaCapturePickerManagerBridge::ShouldFilterWebContents( + JNIEnv* env, + content::WebContents* web_contents) { + if (!web_contents) { + return true; + } + return !web_contents_filter_.Run(web_contents); +}
diff --git a/chrome/browser/media/android/media_capture_picker_manager_bridge.h b/chrome/browser/media/android/media_capture_picker_manager_bridge.h index 270633d..36b5377 100644 --- a/chrome/browser/media/android/media_capture_picker_manager_bridge.h +++ b/chrome/browser/media/android/media_capture_picker_manager_bridge.h
@@ -10,6 +10,7 @@ #include "base/android/jni_string.h" #include "base/android/scoped_java_ref.h" #include "base/functional/callback.h" +#include "chrome/browser/media/webrtc/desktop_media_list.h" #include "chrome/browser/media/webrtc/desktop_media_picker.h" #include "content/public/browser/desktop_media_id.h" @@ -44,8 +45,12 @@ // Called from Java via JNI when the dialog resolves. void OnCancel(JNIEnv* env); + // Called from Java via JNI to check if a tab should be filtered. + bool ShouldFilterWebContents(JNIEnv* env, content::WebContents* web_contents); + private: DesktopMediaPicker::DoneCallback callback_; + DesktopMediaList::WebContentsFilter web_contents_filter_; // The corresponding java object. base::android::ScopedJavaGlobalRef<jobject> java_object_;
diff --git a/chrome/browser/media/webrtc/desktop_capture_access_handler.cc b/chrome/browser/media/webrtc/desktop_capture_access_handler.cc index ddc8d52..6876e112 100644 --- a/chrome/browser/media/webrtc/desktop_capture_access_handler.cc +++ b/chrome/browser/media/webrtc/desktop_capture_access_handler.cc
@@ -603,6 +603,7 @@ pending_request.request.exclude_self_browser_surface; picker_params.exclude_monitor_type_surfaces = pending_request.request.exclude_monitor_type_surfaces; + picker_params.includable_web_contents_filter = includable_web_contents_filter; #endif pending_request.picker->Show(picker_params, std::move(source_lists),
diff --git a/chrome/browser/media/webrtc/desktop_media_picker.h b/chrome/browser/media/webrtc/desktop_media_picker.h index 7263a7e7..9482b45 100644 --- a/chrome/browser/media/webrtc/desktop_media_picker.h +++ b/chrome/browser/media/webrtc/desktop_media_picker.h
@@ -15,6 +15,8 @@ #include "base/types/expected.h" #include "build/android_buildflags.h" #include "build/buildflag.h" +#include "chrome/browser/media/webrtc/capture_policy_utils.h" +#include "chrome/browser/media/webrtc/desktop_media_list.h" #include "content/public/browser/desktop_media_id.h" #include "content/public/browser/media_stream_request.h" #include "content/public/browser/web_contents_observer.h" @@ -123,8 +125,9 @@ bool exclude_self_browser_surface = false; // On Android, this indicates that screen sharing should be excluded. bool exclude_monitor_type_surfaces = false; + // On Android, this filter is used to filter the tabs that can be captured. + DesktopMediaList::WebContentsFilter includable_web_contents_filter; #endif - // Indicates the source of the request. This is useful for UMA that // track the result of the picker, because the behavior with the // Extension API is different, and could therefore lead to mismeasurement. RequestSource request_source = RequestSource::kUnknown;
diff --git a/chrome/browser/media/webrtc/display_media_access_handler.cc b/chrome/browser/media/webrtc/display_media_access_handler.cc index 000983ec..7c437e3 100644 --- a/chrome/browser/media/webrtc/display_media_access_handler.cc +++ b/chrome/browser/media/webrtc/display_media_access_handler.cc
@@ -597,6 +597,7 @@ pending_request.request.exclude_self_browser_surface; picker_params.exclude_monitor_type_surfaces = pending_request.request.exclude_monitor_type_surfaces; + picker_params.includable_web_contents_filter = includable_web_contents_filter; #endif pending_request.picker->Show(picker_params, std::move(source_lists),
diff --git a/chrome/browser/media_galleries/fileapi/native_media_file_util.cc b/chrome/browser/media_galleries/fileapi/native_media_file_util.cc index c8bcb98..3a9c936 100644 --- a/chrome/browser/media_galleries/fileapi/native_media_file_util.cc +++ b/chrome/browser/media_galleries/fileapi/native_media_file_util.cc
@@ -9,6 +9,7 @@ #include <utility> #include "base/compiler_specific.h" +#include "base/containers/span.h" #include "base/files/file_enumerator.h" #include "base/files/file_util.h" #include "base/files/safe_base_name.h" @@ -16,6 +17,7 @@ #include "base/functional/callback.h" #include "base/functional/callback_helpers.h" #include "base/strings/string_util.h" +#include "base/strings/string_view_util.h" #include "base/task/sequenced_task_runner.h" #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" #include "components/services/filesystem/public/mojom/types.mojom.h" @@ -36,13 +38,10 @@ return context->task_runner()->RunsTasksInCurrentSequence(); } -base::File::Error IsMediaHeader(const char* buf, size_t length) { - if (length == 0) - return base::File::FILE_ERROR_SECURITY; - +base::File::Error IsMediaHeader(base::span<const uint8_t> data) { std::string mime_type; - if (!net::SniffMimeTypeFromLocalData(std::string_view(buf, length), - &mime_type)) { + if (data.empty() || !net::SniffMimeTypeFromLocalData( + base::as_string_view(data), &mime_type)) { return base::File::FILE_ERROR_SECURITY; } @@ -193,19 +192,21 @@ return file.error_details(); char buffer[net::kMaxBytesToSniff]; + base::span<uint8_t> buffer_span = base::as_writable_byte_span(buffer); // Read as much as net::SniffMimeTypeFromLocalData() will bother looking at. - int64_t len = UNSAFE_TODO(file.Read(0, buffer, net::kMaxBytesToSniff)); - if (len < 0) + std::optional<size_t> len = file.Read(0, buffer_span); + if (!len) { return base::File::FILE_ERROR_FAILED; + } - return IsMediaHeader(buffer, len); + return IsMediaHeader(buffer_span); } // static base::File::Error NativeMediaFileUtil::BufferIsMediaHeader( net::IOBuffer* buf, size_t length) { - return IsMediaHeader(buf->data(), length); + return IsMediaHeader(buf->first(length)); } // static
diff --git a/chrome/browser/media_galleries/fileapi/supported_image_type_validator.cc b/chrome/browser/media_galleries/fileapi/supported_image_type_validator.cc index 3a0913d..b97ee4d 100644 --- a/chrome/browser/media_galleries/fileapi/supported_image_type_validator.cc +++ b/chrome/browser/media_galleries/fileapi/supported_image_type_validator.cc
@@ -9,6 +9,7 @@ #include "base/check_op.h" #include "base/compiler_specific.h" +#include "base/containers/span.h" #include "base/files/file.h" #include "base/functional/bind.h" #include "base/functional/callback.h" @@ -45,8 +46,7 @@ result = std::make_unique<std::string>(); result->resize(file_info.size); - if (UNSAFE_TODO(file.Read(0, std::data(*result), file_info.size)) != - file_info.size) { + if (file.Read(0, base::as_writable_byte_span(*result)) != file_info.size) { result.reset(); }
diff --git a/chrome/browser/picture_in_picture/picture_in_picture_window_manager.cc b/chrome/browser/picture_in_picture/picture_in_picture_window_manager.cc index a8a1ec30..3deb4b52 100644 --- a/chrome/browser/picture_in_picture/picture_in_picture_window_manager.cc +++ b/chrome/browser/picture_in_picture/picture_in_picture_window_manager.cc
@@ -116,7 +116,6 @@ raw_ptr<PictureInPictureWindowManager> owner_ = nullptr; }; -#if !BUILDFLAG(IS_ANDROID) // This web contents observer is used only for document PiP. class PictureInPictureWindowManager::DocumentWebContentsObserver final : public content::WebContentsObserver { @@ -133,7 +132,6 @@ // Owns |this|. raw_ptr<PictureInPictureWindowManager> owner_ = nullptr; }; -#endif // !BUILDFLAG(IS_ANDROID) PictureInPictureWindowManager* PictureInPictureWindowManager::GetInstance() { return base::Singleton<PictureInPictureWindowManager>::get(); @@ -163,7 +161,6 @@ #endif // !BUILDFLAG(IS_ANDROID) } -#if !BUILDFLAG(IS_ANDROID) void PictureInPictureWindowManager::EnterDocumentPictureInPicture( content::WebContents* parent_web_contents, content::WebContents* child_web_contents) { @@ -189,7 +186,6 @@ NotifyObserversOnEnterPictureInPicture(); } -#endif // !BUILDFLAG(IS_ANDROID) content::PictureInPictureResult PictureInPictureWindowManager::EnterVideoPictureInPicture( @@ -653,7 +649,6 @@ #endif // !BUILDFLAG(IS_ANDROID) } -#if !BUILDFLAG(IS_ANDROID) void PictureInPictureWindowManager::DocumentWebContentsDestroyed() { // Document PiP window controller also observes the parent and child web // contents, so we only need to forget the controller here when user closes @@ -663,6 +658,7 @@ pip_window_controller_ = nullptr; } +#if !BUILDFLAG(IS_ANDROID) std::unique_ptr<AutoPipSettingOverlayView> PictureInPictureWindowManager::GetOverlayView( views::View* anchor_view,
diff --git a/chrome/browser/picture_in_picture/picture_in_picture_window_manager.h b/chrome/browser/picture_in_picture/picture_in_picture_window_manager.h index 2b1b021..450a8b91 100644 --- a/chrome/browser/picture_in_picture/picture_in_picture_window_manager.h +++ b/chrome/browser/picture_in_picture/picture_in_picture_window_manager.h
@@ -76,7 +76,6 @@ content::PictureInPictureResult EnterVideoPictureInPicture( content::WebContents*); -#if !BUILDFLAG(IS_ANDROID) // Shows a PIP window using the window controller for document picture in // picture. // @@ -87,7 +86,6 @@ // it doesn't have a failure state. void EnterDocumentPictureInPicture(content::WebContents* parent_web_contents, content::WebContents* child_web_contents); -#endif // !BUILDFLAG(IS_ANDROID) // Shows a PIP window with an explicitly provided window controller. This is // used by ChromeOS ARC windows which do not have a WebContents as the source. @@ -274,7 +272,6 @@ private: friend struct base::DefaultSingletonTraits<PictureInPictureWindowManager>; class VideoWebContentsObserver; -#if !BUILDFLAG(IS_ANDROID) class DocumentWebContentsObserver; // These values are persisted to logs. Entries should not be renumbered and @@ -294,6 +291,7 @@ }; // LINT.ThenChange(//tools/metrics/histograms/metadata/media/enums.xml:PictureInPictureDisallowedTypeEnum) +#if !BUILDFLAG(IS_ANDROID) // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. // @@ -323,10 +321,8 @@ // This is suffixed with "Internal" to keep consistency with the method above. void CloseWindowInternal(); -#if !BUILDFLAG(IS_ANDROID) // Called when the document PiP parent web contents is being destroyed. void DocumentWebContentsDestroyed(); -#endif // !BUILDFLAG(IS_ANDROID) // Exits picture in picture soon, but not before this call returns. If // picture in picture closes between now and then, that's okay. Intended as a @@ -370,9 +366,9 @@ base::ObserverList<Observer> observers_; std::unique_ptr<VideoWebContentsObserver> video_web_contents_observer_; -#if !BUILDFLAG(IS_ANDROID) - std::unique_ptr<DocumentWebContentsObserver> document_web_contents_observer_; + std::unique_ptr<DocumentWebContentsObserver> document_web_contents_observer_; +#if !BUILDFLAG(IS_ANDROID) std::unique_ptr<PictureInPictureOcclusionTracker> occlusion_tracker_; // The number of `ScopedDisallowPictureInPicture` objects currently in
diff --git a/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java b/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java index 696aa07..462da31 100644 --- a/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java +++ b/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java
@@ -94,10 +94,7 @@ @EnableFeatures({ ChromeFeatureList.PRIVACY_SANDBOX_AD_TOPICS_CONTENT_PARITY, }) -@DisableFeatures({ - ChromeFeatureList.TRACKING_PROTECTION_3PCD, - ChromeFeatureList.SETTINGS_MULTI_COLUMN -}) +@DisableFeatures({ChromeFeatureList.TRACKING_PROTECTION_3PCD}) @DoNotBatch(reason = "Manages sign-in state, which is global.") public class PrivacyGuideFragmentTest { private static final String SETTINGS_STATES_HISTOGRAM = "Settings.PrivacyGuide.SettingsStates";
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java index e85019c..6b2f8037 100644 --- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java +++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragmentTest.java
@@ -39,9 +39,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.UserActionTester; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.profiles.ProfileManager; @@ -61,7 +59,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @Batch(Batch.PER_CLASS) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public final class AdMeasurementFragmentTest { @Rule public ChromeBrowserTestRule mChromeBrowserTestRule = new ChromeBrowserTestRule();
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentTest.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentTest.java index 6f63195..fdb7b23b3 100644 --- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentTest.java +++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragmentTest.java
@@ -53,7 +53,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @Batch(Batch.PER_CLASS) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public final class PrivacySandboxSettingsFragmentTest { @Rule public ChromeBrowserTestRule mChromeBrowserTestRule = new ChromeBrowserTestRule(); private static final int RENDER_TEST_REVISION = 1;
diff --git a/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java b/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java index 5c3199f5..aa05744 100644 --- a/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java +++ b/chrome/browser/quick_delete/android/javatests/src/org/chromium/chrome/browser/quick_delete/QuickDeleteControllerTest.java
@@ -34,7 +34,6 @@ import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.HistogramWatcher; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.browsing_data.BrowsingDataBridge; @@ -43,7 +42,6 @@ import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragment; import org.chromium.chrome.browser.browsing_data.TimePeriod; import org.chromium.chrome.browser.browsing_data.TimePeriodUtils; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.profiles.Profile; @@ -66,7 +64,6 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @Batch(Batch.PER_CLASS) -@DisableFeatures(ChromeFeatureList.SETTINGS_MULTI_COLUMN) public class QuickDeleteControllerTest { private static final long FIFTEEN_MINUTES_IN_MS = TimeUnit.MINUTES.toMillis(15);
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 562a4bef4..9f8f426 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
@@ -165,7 +165,6 @@ // From DeepLinkingMixin. override supportedSettingIds = new Set([ Setting.kAddInputMethod, - Setting.kShowEmojiSuggestions, Setting.kShowInputOptionsInShelf, Setting.kSpellCheckOnOff, ]);
diff --git a/chrome/browser/resources/inspect/inspect.css b/chrome/browser/resources/inspect/inspect.css index 947b7bd..227cca0b 100644 --- a/chrome/browser/resources/inspect/inspect.css +++ b/chrome/browser/resources/inspect/inspect.css
@@ -312,7 +312,9 @@ } .settings-bar label { - display: inline-block; + display: inline-flex; + flex-direction: row; + align-items: center; width: 35ex; &.full-width {
diff --git a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service.cc b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service.cc index 71750b0..6c852aa0 100644 --- a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service.cc +++ b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service.cc
@@ -411,7 +411,7 @@ auto tmp_path = extensions::path_util::ResolveHomeDirectory( base::FilePath(t.token_piece())); auto extension_path = base::MakeAbsoluteFilePath(tmp_path); - std::string error; + std::u16string error; // Use default creation flags. Since we are not installing the extension, // it doesn't really mattter. int flags = extensions::Extension::FOLLOW_SYMLINKS_ANYWHERE |
diff --git a/chrome/browser/safety_hub/android/javatests/src/org/chromium/chrome/browser/safety_hub/SafetyHubTest.java b/chrome/browser/safety_hub/android/javatests/src/org/chromium/chrome/browser/safety_hub/SafetyHubTest.java index 62c08c7..a6d11a063 100644 --- a/chrome/browser/safety_hub/android/javatests/src/org/chromium/chrome/browser/safety_hub/SafetyHubTest.java +++ b/chrome/browser/safety_hub/android/javatests/src/org/chromium/chrome/browser/safety_hub/SafetyHubTest.java
@@ -122,10 +122,7 @@ /** Tests for various Safety Hub settings surfaces. */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@Features.DisableFeatures({ - ChromeFeatureList.EDGE_TO_EDGE_EVERYWHERE, - ChromeFeatureList.SETTINGS_MULTI_COLUMN -}) +@Features.DisableFeatures(ChromeFeatureList.EDGE_TO_EDGE_EVERYWHERE) @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) @DisableIf.Build( sdk_equals = Build.VERSION_CODES.Q,
diff --git a/chrome/browser/sync/test/integration/BUILD.gn b/chrome/browser/sync/test/integration/BUILD.gn index 057d30fc..b5d32ab 100644 --- a/chrome/browser/sync/test/integration/BUILD.gn +++ b/chrome/browser/sync/test/integration/BUILD.gn
@@ -587,7 +587,6 @@ "//chrome/browser/ash/printing", "//chrome/browser/ash/system_web_apps/test_support", "//chromeos/ash/components/browser_context_helper", - "//chromeos/ash/components/network/portal_detector", "//chromeos/ash/experiences/arc:arc_test_support", "//chromeos/ash/experiences/arc/mojom", "//chromeos/printing",
diff --git a/chrome/browser/sync/test/integration/secondary_account_helper.cc b/chrome/browser/sync/test/integration/secondary_account_helper.cc index be40ea19..dbb1b48 100644 --- a/chrome/browser/sync/test/integration/secondary_account_helper.cc +++ b/chrome/browser/sync/test/integration/secondary_account_helper.cc
@@ -21,14 +21,6 @@ #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_id.h" -#if BUILDFLAG(IS_CHROMEOS) -#include "chrome/browser/ash/net/network_portal_detector_test_impl.h" -#include "chromeos/ash/components/network/network_handler.h" -#include "chromeos/ash/components/network/network_state.h" -#include "chromeos/ash/components/network/network_state_handler.h" -#include "chromeos/ash/components/network/portal_detector/network_portal_detector.h" -#endif // BUILDFLAG(IS_CHROMEOS) - namespace secondary_account_helper { namespace { @@ -81,20 +73,6 @@ &OnWillCreateBrowserContextServices, test_url_loader_factory)); } -#if BUILDFLAG(IS_CHROMEOS) -void InitNetwork() { - auto* portal_detector = new ash::NetworkPortalDetectorTestImpl(); - - const ash::NetworkState* default_network = - ash::NetworkHandler::Get()->network_state_handler()->DefaultNetwork(); - - portal_detector->SetDefaultNetworkForTesting(default_network->guid()); - - // Takes ownership. - ash::network_portal_detector::InitializeForTesting(portal_detector); -} -#endif // BUILDFLAG(IS_CHROMEOS) - AccountInfo SignInUnconsentedAccount( Profile* profile, network::TestURLLoaderFactory* test_url_loader_factory,
diff --git a/chrome/browser/sync/test/integration/secondary_account_helper.h b/chrome/browser/sync/test/integration/secondary_account_helper.h index 54786a0..25482219 100644 --- a/chrome/browser/sync/test/integration/secondary_account_helper.h +++ b/chrome/browser/sync/test/integration/secondary_account_helper.h
@@ -28,17 +28,6 @@ base::CallbackListSubscription SetUpSigninClient( network::TestURLLoaderFactory* test_url_loader_factory); -#if BUILDFLAG(IS_CHROMEOS) -// Sets up necessary fakes for fake network responses to work. Meant to be -// called from SetUpOnMainThread. -// TODO(crbug.com/40593103): On ChromeOS, we need to set up a fake -// `NetworkPortalDetector`, otherwise `ash::DelayNetworkCall` will think it's -// behind a captive portal and delay all network requests forever, which means -// the ListAccounts requests (i.e. getting cookie accounts) will never make it -// far enough to even request our fake response. -void InitNetwork(); -#endif // BUILDFLAG(IS_CHROMEOS) - // Sets an account as primary with `signin::ConsentLevel::kSignin`. There is no // consent for Sync. The account is available with both a refresh token and // cookie.
diff --git a/chrome/browser/sync/test/integration/single_client_passwords_sync_test.cc b/chrome/browser/sync/test/integration/single_client_passwords_sync_test.cc index 885f90e..184fb7c 100644 --- a/chrome/browser/sync/test/integration/single_client_passwords_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_passwords_sync_test.cc
@@ -299,9 +299,6 @@ } void SetUpOnMainThread() override { -#if BUILDFLAG(IS_CHROMEOS) - secondary_account_helper::InitNetwork(); -#endif // BUILDFLAG(IS_CHROMEOS) SyncTest::SetUpOnMainThread(); fake_server::SetKeystoreNigoriInFakeServer(GetFakeServer());
diff --git a/chrome/browser/sync/test/integration/single_client_secondary_account_sync_test.cc b/chrome/browser/sync/test/integration/single_client_secondary_account_sync_test.cc index 9c39570a9..312f0aa9 100644 --- a/chrome/browser/sync/test/integration/single_client_secondary_account_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_secondary_account_sync_test.cc
@@ -45,13 +45,6 @@ secondary_account_helper::SetUpSigninClient(&test_url_loader_factory_); } - void SetUpOnMainThread() override { -#if BUILDFLAG(IS_CHROMEOS) - secondary_account_helper::InitNetwork(); -#endif // BUILDFLAG(IS_CHROMEOS) - SyncTest::SetUpOnMainThread(); - } - Profile* profile() { return GetProfile(0); } private:
diff --git a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc index 6217df3..a30a7e47 100644 --- a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
@@ -874,13 +874,6 @@ secondary_account_helper::SetUpSigninClient(&test_url_loader_factory_); } - void SetUpOnMainThread() override { -#if BUILDFLAG(IS_CHROMEOS) - secondary_account_helper::InitNetwork(); -#endif // BUILDFLAG(IS_CHROMEOS) - SyncTest::SetUpOnMainThread(); - } - Profile* profile() { return GetProfile(0); } private:
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 15ccaa3..0438743 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -4369,8 +4369,6 @@ "views/tabs/browser_tab_strip_controller.h", "views/tabs/color_picker_view.cc", "views/tabs/color_picker_view.h", - "views/tabs/compound_tab_container.cc", - "views/tabs/compound_tab_container.h", "views/tabs/dragging/drag_session_data.cc", "views/tabs/dragging/drag_session_data.h", "views/tabs/dragging/dragging_tabs_session.cc", @@ -4379,8 +4377,6 @@ "views/tabs/dragging/tab_drag_context.h", "views/tabs/dragging/tab_drag_controller.cc", "views/tabs/dragging/tab_drag_controller.h", - "views/tabs/dragging/tab_strip_scroll_session.cc", - "views/tabs/dragging/tab_strip_scroll_session.h", "views/tabs/fade_footer_view.cc", "views/tabs/fade_footer_view.h", "views/tabs/fade_label_view.cc", @@ -4431,8 +4427,6 @@ "views/tabs/tab_icon.h", "views/tabs/tab_layout_state.cc", "views/tabs/tab_layout_state.h", - "views/tabs/tab_scrolling_animation.cc", - "views/tabs/tab_scrolling_animation.h", "views/tabs/tab_search_button.cc", "views/tabs/tab_search_button.h", "views/tabs/tab_search_container.cc", @@ -4456,10 +4450,6 @@ "views/tabs/tab_strip_layout_types.h", "views/tabs/tab_strip_nudge_button.cc", "views/tabs/tab_strip_nudge_button.h", - "views/tabs/tab_strip_scroll_container.cc", - "views/tabs/tab_strip_scroll_container.h", - "views/tabs/tab_strip_scrolling_overflow_indicator_strategy.cc", - "views/tabs/tab_strip_scrolling_overflow_indicator_strategy.h", "views/tabs/tab_style_views.cc", "views/tabs/tab_style_views.h", "views/tabs/tab_width_constraints.cc",
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java index 5498e4fd..d02b867e 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java
@@ -40,8 +40,8 @@ ExtensionActionListContainer container, WindowAndroid windowAndroid, OneshotSupplier<ChromeAndroidTask> taskSupplier, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier) { + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier) { mContainer = container; mModels = new ModelList();
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java index 5ccb0fdd..1a6b203a 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java
@@ -54,8 +54,8 @@ WindowAndroid windowAndroid, ModelList models, OneshotSupplier<ChromeAndroidTask> taskSupplier, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier) { + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier) { mContext = context; mWindowAndroid = windowAndroid; mModels = models;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java index 48ad05f..669d908 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java
@@ -41,6 +41,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.OneshotSupplierImpl; import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.extensions.ContextMenuSource; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.MockTab; @@ -92,8 +93,8 @@ private MockTab mTab1; private MockTab mTab2; private OneshotSupplierImpl<ChromeAndroidTask> mTaskSupplier; - private ObservableSupplierImpl<Profile> mProfileSupplier; - private ObservableSupplierImpl<Tab> mCurrentTabSupplier; + private ObservableSupplierImpl<@Nullable Profile> mProfileSupplier; + private ObservableSupplierImpl<@Nullable Tab> mCurrentTabSupplier; private ModelList mModels; private ExtensionActionListMediator mMediator;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java index f60432f..c55d54bd 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelper.java
@@ -47,13 +47,13 @@ void onUpdateFinished(); } - private final ObservableSupplier<Profile> mProfileSupplier; - private final ObservableSupplier<Tab> mCurrentTabSupplier; + private final ObservableSupplier<@Nullable Profile> mProfileSupplier; + private final ObservableSupplier<@Nullable Tab> mCurrentTabSupplier; private final ActionsUpdateDelegate mActionsUpdateDelegate; private final ModelList mModels; - private final Callback<Profile> mProfileUpdatedCallback = this::onProfileUpdated; - private final Callback<Tab> mTabChangedCallback = this::onTabChanged; + private final Callback<@Nullable Profile> mProfileUpdatedCallback = this::onProfileUpdated; + private final Callback<@Nullable Tab> mTabChangedCallback = this::onTabChanged; private final ActionsObserver mActionsObserver = new ActionsObserver(); @Nullable private ExtensionActionsBridge mExtensionActionsBridge; @@ -62,8 +62,8 @@ public ExtensionActionsUpdateHelper( ModelList models, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier, + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier, ActionsUpdateDelegate delegate) { mModels = models; mProfileSupplier = profileSupplier;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelperTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelperTest.java index 42078f84..51cf41e 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelperTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionsUpdateHelperTest.java
@@ -26,6 +26,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.MockTab; import org.chromium.chrome.browser.tab.Tab; @@ -70,8 +71,8 @@ private ProfileModel mProfileModel; private MockTab mTab1; private MockTab mTab2; - private ObservableSupplierImpl<Profile> mProfileSupplier; - private ObservableSupplierImpl<Tab> mCurrentTabSupplier; + private ObservableSupplierImpl<@Nullable Profile> mProfileSupplier; + private ObservableSupplierImpl<@Nullable Tab> mCurrentTabSupplier; private ModelList mModels; private ExtensionActionsUpdateHelper mHelper;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java index 291f118d..f6609d2 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java
@@ -43,8 +43,8 @@ ViewStub extensionToolbarStub, WindowAndroid windowAndroid, OneshotSupplier<ChromeAndroidTask> taskSupplier, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier, + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier, TabCreator tabCreator, ThemeColorProvider themeColorProvider) { ExtensionToolbarCoordinator coordinator = @@ -76,8 +76,8 @@ ViewStub extensionToolbarStub, WindowAndroid windowAndroid, OneshotSupplier<ChromeAndroidTask> taskSupplier, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier, + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier, TabCreator tabCreator, ThemeColorProvider themeColorProvider);
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java index 0aa24be..483b72c 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java
@@ -30,10 +30,10 @@ @ServiceImpl(ExtensionToolbarCoordinator.class) public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordinator { private final @Nullable LifetimeAssert mLifetimeAssert = LifetimeAssert.create(this); - private final Callback<Profile> mProfileUpdatedCallback = + private final Callback<@Nullable Profile> mProfileUpdatedCallback = (profile) -> mCurrentProfile = profile; - private ObservableSupplier<Profile> mProfileSupplier; + private ObservableSupplier<@Nullable Profile> mProfileSupplier; private ExtensionActionListCoordinator mExtensionActionListCoordinator; private ExtensionsMenuCoordinator mExtensionsMenuCoordinator; @@ -45,8 +45,8 @@ ViewStub extensionToolbarStub, WindowAndroid windowAndroid, OneshotSupplier<ChromeAndroidTask> taskSupplier, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier, + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier, TabCreator tabCreator, ThemeColorProvider themeColorProvider) { mProfileSupplier = profileSupplier;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java index e39aa42..76335fb20 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinator.java
@@ -53,7 +53,7 @@ private final ListMenuButton mExtensionsMenuButton; private final MaterialDivider mExtensionsMenuTabSwitcherDivider; private final ThemeColorProvider mThemeColorProvider; - private final ObservableSupplier<Tab> mCurrentTabSupplier; + private final ObservableSupplier<@Nullable Tab> mCurrentTabSupplier; private final TabCreator mTabCreator; private final View mContentView; private final PropertyModelChangeProcessor mChangeProcessor; @@ -84,8 +84,8 @@ MaterialDivider extensionsMenuTabSwitcherDivider, ThemeColorProvider themeColorProvider, OneshotSupplier<ChromeAndroidTask> taskSupplier, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier, + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier, TabCreator tabCreator) { mContext = context; mCurrentTabSupplier = currentTabSupplier;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinatorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinatorTest.java index 35f5fc8..f18cbd5 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinatorTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuCoordinatorTest.java
@@ -31,6 +31,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.OneshotSupplierImpl; import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabCreator; @@ -55,8 +56,10 @@ private final OneshotSupplierImpl<ChromeAndroidTask> mTaskSupplier = new OneshotSupplierImpl<>(); - private final ObservableSupplierImpl<Profile> mProfileSupplier = new ObservableSupplierImpl<>(); - private final ObservableSupplierImpl<Tab> mCurrentTabSupplier = new ObservableSupplierImpl<>(); + private final ObservableSupplierImpl<@Nullable Profile> mProfileSupplier = + new ObservableSupplierImpl<>(); + private final ObservableSupplierImpl<@Nullable Tab> mCurrentTabSupplier = + new ObservableSupplierImpl<>(); private ListMenuButton mExtensionsMenuButton; private MaterialDivider mExtensionsMenuTabSwitcherDivider; @Mock private TabCreator mTabCreator;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java index 9523d55..a395213 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediator.java
@@ -38,18 +38,18 @@ private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate(); private final Context mContext; private final OneshotSupplier<ChromeAndroidTask> mTaskSupplier; - private final ObservableSupplier<Profile> mProfileSupplier; + private final ObservableSupplier<@Nullable Profile> mProfileSupplier; private final Runnable mOnUpdateFinishedRunnable; private final Callback<Boolean> mOnExtensionsAvailableCallback; private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper; - private final Callback<Profile> mProfileUpdatedCallback = this::onProfileUpdated; + private final Callback<@Nullable Profile> mProfileUpdatedCallback = this::onProfileUpdated; private final View mRootView; public ExtensionsMenuMediator( Context context, OneshotSupplier<ChromeAndroidTask> taskSupplier, - ObservableSupplier<Profile> profileSupplier, - ObservableSupplier<Tab> currentTabSupplier, + ObservableSupplier<@Nullable Profile> profileSupplier, + ObservableSupplier<@Nullable Tab> currentTabSupplier, ModelList extensionModels, Runnable onUpdateFinishedRunnable, Callback<Boolean> onExtensionsAvailableCallback,
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediatorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediatorTest.java index bc36303..12dd88f 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediatorTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionsMenuMediatorTest.java
@@ -42,6 +42,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.OneshotSupplierImpl; import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.extensions.ContextMenuSource; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.MockTab; @@ -104,8 +105,8 @@ private MockTab mTab1; private MockTab mTab2; private OneshotSupplierImpl<ChromeAndroidTask> mTaskSupplier; - private ObservableSupplierImpl<Profile> mProfileSupplier; - private ObservableSupplierImpl<Tab> mCurrentTabSupplier; + private ObservableSupplierImpl<@Nullable Profile> mProfileSupplier; + private ObservableSupplierImpl<@Nullable Tab> mCurrentTabSupplier; private ModelList mModels; private ExtensionsMenuMediator mMediator;
diff --git a/chrome/browser/ui/autofill/BUILD.gn b/chrome/browser/ui/autofill/BUILD.gn index 90b0049..e987641 100644 --- a/chrome/browser/ui/autofill/BUILD.gn +++ b/chrome/browser/ui/autofill/BUILD.gn
@@ -212,6 +212,7 @@ deps += [ "//chrome/app:command_ids", "//chrome/app/vector_icons", + "//chrome/browser/actor", "//chrome/browser/apps/platform_apps", "//chrome/browser/feedback", "//chrome/browser/profiles:profile_util",
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc index ec503007..f616f37fc 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -175,6 +175,7 @@ #include "components/messages/android/messages_feature.h" #include "components/strings/grit/components_strings.h" #else // !BUILDFLAG(IS_ANDROID) +#include "chrome/browser/actor/actor_keyed_service.h" #include "chrome/browser/ui/autofill/autofill_ai/autofill_ai_import_data_controller.h" #include "chrome/browser/ui/autofill/autofill_field_promo_controller_impl.h" #include "chrome/browser/ui/autofill/delete_address_profile_dialog_controller_impl.h" @@ -1051,6 +1052,22 @@ #endif } +bool ChromeAutofillClient::IsActorTaskActive() const { +#if !BUILDFLAG(IS_ANDROID) + actor::ActorKeyedService* actor_service = + actor::ActorKeyedService::Get(GetProfile()); + if (!actor_service) { + return false; + } + + const tabs::TabInterface* tab_interface = + tabs::TabInterface::MaybeGetFromContents(web_contents()); + return tab_interface && actor_service->IsActiveOnTab(*tab_interface); +#else + return false; +#endif +} + bool ChromeAutofillClient::IsAutofillEnabled() const { return IsAutofillProfileEnabled() || AutofillClient::GetPaymentsAutofillClient()
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h index 639ff617..1e0e030 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.h +++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -194,6 +194,7 @@ bool prompt_accepted, EntityType entity_type, const base::flat_set<EntityTypeName>& saved_entities) final; + bool IsActorTaskActive() const final; bool IsAutofillEnabled() const final; bool IsAutofillProfileEnabled() const final; bool IsAutocompleteEnabled() const final;
diff --git a/chrome/browser/ui/layout_constants.cc b/chrome/browser/ui/layout_constants.cc index 4e5901f..ae5091f 100644 --- a/chrome/browser/ui/layout_constants.cc +++ b/chrome/browser/ui/layout_constants.cc
@@ -106,11 +106,6 @@ case TAB_STACK_DISTANCE: return touch_ui ? 4 : 6; case TABSTRIP_TOOLBAR_OVERLAP: - // Because tab scrolling puts the tabstrip on a separate layer, - // changing paint order, this overlap isn't compatible with scrolling. - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { - return 0; - } return 1; case TOOLBAR_BUTTON_HEIGHT: return touch_ui ? 48 : 34;
diff --git a/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc b/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc index 70c147c4..71d2bde5 100644 --- a/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc +++ b/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc
@@ -23,6 +23,7 @@ #include "components/prefs/pref_service.h" #include "components/search/search.h" #include "components/strings/grit/components_strings.h" +#include "components/sync/base/features.h" #include "components/vector_icons/vector_icons.h" #if BUILDFLAG(IS_ANDROID) @@ -608,6 +609,32 @@ std::vector<SynonymGroupSpec> SpecifySynonymGroups( bool locale_is_english) const override { +#if !BUILDFLAG(IS_CHROMEOS) + if (base::FeatureList::IsEnabled(syncer::kUnoPhase2FollowUp)) { + if (locale_is_english) { + return { + { + true, + true, + IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SYNC_ONE_REQUIRED_SYNC_SETTINGS_UPDATED, + }, + { + true, + false, + IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SYNC_ANY_REQUIRED_GOOGLE_CHROME, + }, + }; + } else { + return { + { + true, + true, + IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SYNC_UPDATED, + }, + }; + } + } +#endif // !BUILDFLAG(IS_CHROMEOS) if (locale_is_english) { return { {
diff --git a/chrome/browser/ui/omnibox/omnibox_pedal_implementations_unittest.cc b/chrome/browser/ui/omnibox/omnibox_pedal_implementations_unittest.cc index 4bfc8b413..2cf7c8f 100644 --- a/chrome/browser/ui/omnibox/omnibox_pedal_implementations_unittest.cc +++ b/chrome/browser/ui/omnibox/omnibox_pedal_implementations_unittest.cc
@@ -15,13 +15,20 @@ #include "components/omnibox/browser/actions/omnibox_pedal_provider.h" #include "components/omnibox/browser/mock_autocomplete_provider_client.h" #include "components/omnibox/common/omnibox_features.h" +#include "components/sync/base/features.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/window_open_disposition.h" class OmniboxPedalImplementationsTest : public testing::Test { protected: void SetUp() override { - feature_list_.InitWithFeatures({}, {}); + feature_list_.InitWithFeatures( + { +#if !BUILDFLAG(IS_CHROMEOS) + syncer::kUnoPhase2FollowUp +#endif // !BUILDFLAG(IS_CHROMEOS) + }, + {}); InitPedals(); } @@ -11036,6 +11043,15 @@ "sync settings google", "sync settings google chrome", "sync settings manage", +#if !BUILDFLAG(IS_CHROMEOS) + "manage my stuff", + "manage my chrome stuff", + "manage my chrome data", + "manage my chrome info", + "manage bookmarks and stuff", + "edit what I save", + "edit what's in my account", +#endif // !BUILDFLAG(IS_CHROMEOS) }, // ID#12
diff --git a/chrome/browser/ui/tabs/features.cc b/chrome/browser/ui/tabs/features.cc index 33f2e64c..09a807c9 100644 --- a/chrome/browser/ui/tabs/features.cc +++ b/chrome/browser/ui/tabs/features.cc
@@ -13,28 +13,6 @@ // chrome://tab-strip-internals BASE_FEATURE(kDebugUITabStrip, base::FEATURE_DISABLED_BY_DEFAULT); -// Splits pinned and unpinned tabs into separate TabStrips. -// https://crbug.com/1346019 -BASE_FEATURE(kSplitTabStrip, base::FEATURE_DISABLED_BY_DEFAULT); - -// Enables tabs to scroll in the tabstrip. https://crbug.com/951078 -BASE_FEATURE(kScrollableTabStrip, base::FEATURE_DISABLED_BY_DEFAULT); -const char kMinimumTabWidthFeatureParameterName[] = "minTabWidth"; - -// Enables tab scrolling while dragging tabs in tabstrip -// https://crbug.com/1145747 -BASE_FEATURE(kScrollableTabStripWithDragging, - "kScrollableTabStripWithDragging", - base::FEATURE_DISABLED_BY_DEFAULT); -const char kTabScrollingWithDraggingModeName[] = "tabScrollWithDragMode"; - -// Enables different methods of overflow when scrolling tabs in tabstrip -// https://crbug.com/951078 -BASE_FEATURE(kScrollableTabStripOverflow, - "kScrollableTabStripOverflow", - base::FEATURE_DISABLED_BY_DEFAULT); -const char kScrollableTabStripOverflowModeName[] = "tabScrollOverflow"; - BASE_FEATURE(kTabGroupHome, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kTabSearchPositionSetting, base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/chrome/browser/ui/tabs/features.h b/chrome/browser/ui/tabs/features.h index 156793d8..1fcf3344b 100644 --- a/chrome/browser/ui/tabs/features.h +++ b/chrome/browser/ui/tabs/features.h
@@ -13,19 +13,8 @@ BASE_DECLARE_FEATURE(kDebugUITabStrip); -BASE_DECLARE_FEATURE(kSplitTabStrip); - -BASE_DECLARE_FEATURE(kScrollableTabStrip); -extern const char kMinimumTabWidthFeatureParameterName[]; - -BASE_DECLARE_FEATURE(kScrollableTabStripWithDragging); -extern const char kTabScrollingWithDraggingModeName[]; - BASE_DECLARE_FEATURE(kTabGroupHome); -BASE_DECLARE_FEATURE(kScrollableTabStripOverflow); -extern const char kScrollableTabStripOverflowModeName[]; - BASE_DECLARE_FEATURE(kTabSearchPositionSetting); BASE_DECLARE_FEATURE(kVerticalTabs);
diff --git a/chrome/browser/ui/tabs/tab_style.cc b/chrome/browser/ui/tabs/tab_style.cc index eb6789e..6b71fd7 100644 --- a/chrome/browser/ui/tabs/tab_style.cc +++ b/chrome/browser/ui/tabs/tab_style.cc
@@ -67,13 +67,6 @@ const gfx::Insets insets = GetContentsInsets(); const int min_active_width = close_button_size + insets.left() + insets.right(); - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { - return std::max( - min_active_width, - base::GetFieldTrialParamByFeatureAsInt( - tabs::kScrollableTabStrip, - tabs::kMinimumTabWidthFeatureParameterName, min_active_width)); - } if (is_split) { // Only have one set of horizontal padding between tabs in an active split. @@ -92,14 +85,6 @@ int min_inactive_width = kInteriorWidth - GetSeparatorSize().width() + GetTabOverlap(); - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { - return std::max( - min_inactive_width, - base::GetFieldTrialParamByFeatureAsInt( - tabs::kScrollableTabStrip, - tabs::kMinimumTabWidthFeatureParameterName, min_inactive_width)); - } - return min_inactive_width; }
diff --git a/chrome/browser/ui/views/frame/browser_root_view.cc b/chrome/browser/ui/views/frame/browser_root_view.cc index 19c4ef2..638c85d 100644 --- a/chrome/browser/ui/views/frame/browser_root_view.cc +++ b/chrome/browser/ui/views/frame/browser_root_view.cc
@@ -326,8 +326,7 @@ // Scroll-event-changes-tab is incompatible with scrolling tabstrip, so // disable it if the latter feature is enabled. - if (browser_defaults::kScrollEventChangesTab && - !base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { + if (browser_defaults::kScrollEventChangesTab) { // Switch to the left/right tab if the wheel-scroll happens over the // tabstrip, or the empty space beside the tabstrip. views::View* hit_view = GetEventHandlerForPoint(event.location());
diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view.cc b/chrome/browser/ui/views/frame/tab_strip_region_view.cc index 3366c13..582855d 100644 --- a/chrome/browser/ui/views/frame/tab_strip_region_view.cc +++ b/chrome/browser/ui/views/frame/tab_strip_region_view.cc
@@ -35,7 +35,6 @@ #include "chrome/browser/ui/views/tabs/tab_strip_control_button.h" #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/tab_strip_nudge_button.h" -#include "chrome/browser/ui/views/tabs/tab_strip_scroll_container.h" #include "chrome/browser/ui/views/tabs/tab_style_views.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" @@ -265,32 +264,16 @@ } } - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { - std::unique_ptr<TabStripScrollContainer> scroll_container = - std::make_unique<TabStripScrollContainer>(std::move(tab_strip)); - tab_strip_scroll_container_ = scroll_container.get(); - tab_strip_container_ = AddChildView(std::move(scroll_container)); - // Allow the |tab_strip_container_| to grow into the free space available in - // the TabStripRegionView. - const views::FlexSpecification tab_strip_container_flex_spec = - views::FlexSpecification(views::LayoutOrientation::kHorizontal, - views::MinimumFlexSizeRule::kScaleToMinimum, - views::MaximumFlexSizeRule::kPreferred); - tab_strip_container_->SetProperty(views::kFlexBehaviorKey, - tab_strip_container_flex_spec); + tab_strip_container_ = AddChildView(std::move(tab_strip)); - } else { - tab_strip_container_ = AddChildView(std::move(tab_strip)); - - // Allow the |tab_strip_container_| to grow into the free space available in - // the TabStripRegionView. - const views::FlexSpecification tab_strip_container_flex_spec = - views::FlexSpecification(views::LayoutOrientation::kHorizontal, - views::MinimumFlexSizeRule::kScaleToZero, - views::MaximumFlexSizeRule::kPreferred); - tab_strip_container_->SetProperty(views::kFlexBehaviorKey, - tab_strip_container_flex_spec); - } + // Allow the |tab_strip_container_| to grow into the free space available in + // the TabStripRegionView. + const views::FlexSpecification tab_strip_container_flex_spec = + views::FlexSpecification(views::LayoutOrientation::kHorizontal, + views::MinimumFlexSizeRule::kScaleToZero, + views::MaximumFlexSizeRule::kPreferred); + tab_strip_container_->SetProperty(views::kFlexBehaviorKey, + tab_strip_container_flex_spec); if (ShouldShowNewTabButton(browser)) { std::unique_ptr<TabStripControlButton> tab_strip_control_button = @@ -391,16 +374,7 @@ // true. if (tab_strip_container_->HitTestRect( get_target_rect(tab_strip_container_))) { - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { - TabStripScrollContainer* scroll_container = - views::AsViewClass<TabStripScrollContainer>(tab_strip_container_); - - return scroll_container->IsRectInWindowCaption( - get_target_rect(scroll_container)); - - } else { - return tab_strip_->IsRectInWindowCaption(get_target_rect(tab_strip_)); - } + return tab_strip_->IsRectInWindowCaption(get_target_rect(tab_strip_)); } // The child could have a non-rectangular shape, so if the rect is not in the
diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view_browsertest.cc b/chrome/browser/ui/views/frame/tab_strip_region_view_browsertest.cc index 5f7ced5..41ed77a 100644 --- a/chrome/browser/ui/views/frame/tab_strip_region_view_browsertest.cc +++ b/chrome/browser/ui/views/frame/tab_strip_region_view_browsertest.cc
@@ -23,8 +23,6 @@ #include "chrome/browser/ui/views/tabs/new_tab_button.h" #include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" -#include "chrome/browser/ui/views/tabs/tab_strip_control_button.h" -#include "chrome/browser/ui/views/tabs/tab_strip_scroll_container.h" #include "chrome/browser/ui/views/tabs/tab_style_views.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/views/chrome_views_test_base.h" @@ -78,23 +76,14 @@ }; // TabStripRegionViewTestBase contains no test cases. -class TabStripRegionViewTestBase : public InProcessBrowserTest { +class TabStripRegionViewTest : public InProcessBrowserTest { public: - explicit TabStripRegionViewTestBase(bool has_scrolling) + TabStripRegionViewTest() : animation_mode_reset_(gfx::AnimationTestApi::SetRichAnimationRenderMode( - gfx::Animation::RichAnimationRenderMode::FORCE_ENABLED)) { - if (has_scrolling) { - scoped_feature_list_.InitWithFeatures( - {tabs::kScrollableTabStrip, features::kTabScrollingButtonPosition}, - {}); - } else { - scoped_feature_list_.InitWithFeatures({}, {tabs::kScrollableTabStrip}); - } - } - TabStripRegionViewTestBase(const TabStripRegionViewTestBase&) = delete; - TabStripRegionViewTestBase& operator=(const TabStripRegionViewTestBase&) = - delete; - ~TabStripRegionViewTestBase() override = default; + gfx::Animation::RichAnimationRenderMode::FORCE_ENABLED)) {} + TabStripRegionViewTest(const TabStripRegionViewTest&) = delete; + TabStripRegionViewTest& operator=(const TabStripRegionViewTest&) = delete; + ~TabStripRegionViewTest() override = default; void SetUp() override { InProcessBrowserTest::SetUp(); @@ -125,20 +114,9 @@ base::test::ScopedFeatureList scoped_feature_list_; }; -// TabStripRegionViewTest contains tests that will run with scrolling enabled -// and disabled. -class TabStripRegionViewTest : public TabStripRegionViewTestBase, - public testing::WithParamInterface<bool> { - public: - TabStripRegionViewTest() : TabStripRegionViewTestBase(GetParam()) {} - TabStripRegionViewTest(const TabStripRegionViewTest&) = delete; - TabStripRegionViewTest& operator=(const TabStripRegionViewTest&) = delete; - ~TabStripRegionViewTest() override = default; -}; - // TODO(crbug.com/41493572): Skip for now due to test failing when CR2023 // enabled. -IN_PROC_BROWSER_TEST_P(TabStripRegionViewTest, +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, DISABLED_GrabHandleSpaceStaysVisible) { const int kTabStripRegionViewWidth = 500; tab_strip_region_view()->SetBounds(0, 0, kTabStripRegionViewWidth, 20); @@ -161,7 +139,7 @@ // TODO(crbug.com/41493572): Skip for now due to test failing when CR2023 // enabled. -IN_PROC_BROWSER_TEST_P(TabStripRegionViewTest, +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, DISABLED_NewTabButtonStaysVisible) { const int kTabStripRegionViewWidth = 500; tab_strip_region_view()->SetBounds(0, 0, kTabStripRegionViewWidth, 20); @@ -181,7 +159,7 @@ // TODO(crbug.com/41493572): Skip for now due to test failing when CR2023 // enabled. -IN_PROC_BROWSER_TEST_P(TabStripRegionViewTest, +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, DISABLED_NewTabButtonRightOfTabs) { const int kTabStripRegionViewWidth = 500; tab_strip_region_view()->SetBounds(0, 0, kTabStripRegionViewWidth, 20); @@ -200,7 +178,7 @@ // TODO(crbug.com/41496209): Skip for now due to test failing when CR2023 // enabled. -IN_PROC_BROWSER_TEST_P(TabStripRegionViewTest, DISABLED_NewTabButtonInkDrop) { +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, DISABLED_NewTabButtonInkDrop) { constexpr int kTabStripRegionViewWidth = 500; tab_strip_region_view()->SetBounds(0, 0, kTabStripRegionViewWidth, GetLayoutConstant(TAB_STRIP_HEIGHT)); @@ -231,7 +209,7 @@ // This is important in ensuring that we maximise the targetable area of these // views when the tab strip is flush with the top of the screen when the window // is maximized (Fitt's Law). -IN_PROC_BROWSER_TEST_P(TabStripRegionViewTest, +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, ChildrenAreFlushWithTopOfTabStripRegionView) { tab_strip_region_view()->SetBounds(0, 0, 1000, 100); chrome::AddTabAt(browser(), GURL("about:blank"), -1, true); @@ -258,7 +236,7 @@ EXPECT_EQ(0, new_tab_button_origin.y()); } -IN_PROC_BROWSER_TEST_P(TabStripRegionViewTest, +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, TabSearchPositionLoggedOnConstruction) { using TabSearchPositionEnum = TabStripRegionView::TabSearchPositionEnum; const bool tab_search_trailing_tabstrip = @@ -273,27 +251,13 @@ expected_enum_val, 1); } -IN_PROC_BROWSER_TEST_P(TabStripRegionViewTest, HasMultiselectableState) { +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, HasMultiselectableState) { ui::AXNodeData ax_node_data; tab_strip_region_view()->GetViewAccessibility().GetAccessibleNodeData( &ax_node_data); EXPECT_TRUE(ax_node_data.HasState(ax::mojom::State::kMultiselectable)); } -class TabStripRegionViewTestWithScrollingDisabled - : public TabStripRegionViewTestBase { - public: - TabStripRegionViewTestWithScrollingDisabled() - : TabStripRegionViewTestBase(false) {} - TabStripRegionViewTestWithScrollingDisabled( - const TabStripRegionViewTestWithScrollingDisabled&) = delete; - TabStripRegionViewTestWithScrollingDisabled& operator=( - const TabStripRegionViewTestWithScrollingDisabled&) = delete; - ~TabStripRegionViewTestWithScrollingDisabled() override = default; - - private: -}; - // When scrolling is disabled, the tab strip cannot be larger than the container // so tabs that do not fit in the tabstrip will become invisible. This is the // opposite behavior from @@ -306,7 +270,7 @@ #define MAYBE_TabStripCannotBeLargerThanContainer \ TabStripCannotBeLargerThanContainer #endif -IN_PROC_BROWSER_TEST_F(TabStripRegionViewTestWithScrollingDisabled, +IN_PROC_BROWSER_TEST_F(TabStripRegionViewTest, MAYBE_TabStripCannotBeLargerThanContainer) { const int minimum_active_width = TabStyle::Get()->GetMinimumInactiveWidth(); chrome::AddTabAt(browser(), GURL("about:blank"), -1, true); @@ -343,128 +307,3 @@ EXPECT_FALSE( tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)->GetVisible()); } - -class TabStripRegionViewTestWithScrollingEnabled - : public TabStripRegionViewTestBase { - public: - TabStripRegionViewTestWithScrollingEnabled() - : TabStripRegionViewTestBase(true) {} - TabStripRegionViewTestWithScrollingEnabled( - const TabStripRegionViewTestWithScrollingEnabled&) = delete; - TabStripRegionViewTestWithScrollingEnabled& operator=( - const TabStripRegionViewTestWithScrollingEnabled&) = delete; - ~TabStripRegionViewTestWithScrollingEnabled() override = default; -}; - -// When scrolling is enabled, the tab strip can grow to be larger than the -// container. This is the opposite behavior from -// TabStripRegionViewTestWithScrollingDisabled. -// TabStripCannotBeLargerThanContainer. -// TODO(crbug.com/442378742): Fix failures on the Linux ASan LSan Tests bot. -IN_PROC_BROWSER_TEST_F(TabStripRegionViewTestWithScrollingEnabled, - DISABLED_TabStripCanBeLargerThanContainer) { - const int minimum_active_width = TabStyle::Get()->GetMinimumInactiveWidth(); - chrome::AddTabAt(browser(), GURL("about:blank"), -1, true); - { - LayoutWaiter waiter(tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)); - RunScheduledLayouts(); - waiter.Wait(); - } - - // Add tabs to the tabstrip until it is full and should start overflowing. - while (tab_strip()->tab_at(0)->width() > minimum_active_width) { - chrome::AddTabAt(browser(), GURL("about:blank"), -1, false); - { - LayoutWaiter waiter( - tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)); - RunScheduledLayouts(); - waiter.Wait(); - } - EXPECT_LT(tab_strip()->width(), tab_strip_region_view()->width()); - } - - // Add a few more tabs after the tabstrip is full to ensure the tabstrip - // starts scrolling. This needs to expand the tabstrip width by a decent - // amount in order to get the tabstrip to be wider than the entire tabstrip - // region, not just the portion of that that's allocated to the tabstrip - // itself (e.g. some of that space is for the NTB). - for (int i = 0; i < 10; i++) { - chrome::AddTabAt(browser(), GURL("about:blank"), -1, false); - { - LayoutWaiter waiter( - tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)); - RunScheduledLayouts(); - waiter.Wait(); - } - } - EXPECT_GT(tab_strip()->width(), tab_strip_region_view()->width()); - EXPECT_TRUE( - tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)->GetVisible()); -} - -IN_PROC_BROWSER_TEST_F(TabStripRegionViewTestWithScrollingEnabled, - DISABLED_TabStripScrollButtonsNotInWindowCaption) { - const int minimum_active_width = TabStyle::Get()->GetMinimumInactiveWidth(); - chrome::AddTabAt(browser(), GURL("about:blank"), -1, true); - { - LayoutWaiter waiter(tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)); - RunScheduledLayouts(); - waiter.Wait(); - } - - // Add tabs to the tabstrip until it is full and should start overflowing. - while (tab_strip()->tab_at(0)->width() > minimum_active_width) { - chrome::AddTabAt(browser(), GURL("about:blank"), -1, false); - { - LayoutWaiter waiter( - tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)); - RunScheduledLayouts(); - waiter.Wait(); - } - } - - // Add a few more tabs after the tabstrip is full to ensure the tabstrip - // starts scrolling. This needs to expand the tabstrip width by a decent - // amount in order to get the tabstrip to be wider than the entire tabstrip - // region, not just the portion of that that's allocated to the tabstrip - // itself (e.g. some of that space is for the NTB). - for (int i = 0; i < 10; i++) { - chrome::AddTabAt(browser(), GURL("about:blank"), -1, false); - { - LayoutWaiter waiter( - tab_strip()->tab_at(tab_strip()->GetModelCount() - 1)); - RunScheduledLayouts(); - waiter.Wait(); - } - } - - raw_ptr<TabStripScrollContainer> scroll_container = - views::AsViewClass<TabStripScrollContainer>( - tab_strip_region_view()->GetTabStripContainerForTesting()); - raw_ptr<views::ImageButton> leading_scroll_button_ = - scroll_container->GetLeadingScrollButtonForTesting(); - raw_ptr<views::ImageButton> trailing_scroll_button_ = - scroll_container->GetTrailingScrollButtonForTesting(); - - // Check to see if children are visible - EXPECT_TRUE(leading_scroll_button_ != nullptr && - leading_scroll_button_->IsDrawn()); - EXPECT_TRUE(trailing_scroll_button_ != nullptr && - trailing_scroll_button_->IsDrawn()); - - gfx::Point scrolling_button_point = - leading_scroll_button_->bounds().CenterPoint(); - gfx::Rect scrolling_button_rect = - gfx::Rect(scrolling_button_point, gfx::Size(1, 1)); - gfx::RectF floating_rect_in_target_coords_f(scrolling_button_rect); - views::View::ConvertRectToTarget(leading_scroll_button_, - tab_strip_region_view(), - &floating_rect_in_target_coords_f); - - EXPECT_FALSE(tab_strip_region_view()->IsRectInWindowCaption( - gfx::ToEnclosingRect(floating_rect_in_target_coords_f))); -} - -INSTANTIATE_TEST_SUITE_P(All, - TabStripRegionViewTest, - ::testing::Values(true, false));
diff --git a/chrome/browser/ui/views/tabs/compound_tab_container.cc b/chrome/browser/ui/views/tabs/compound_tab_container.cc deleted file mode 100644 index 12c4408..0000000 --- a/chrome/browser/ui/views/tabs/compound_tab_container.cc +++ /dev/null
@@ -1,1147 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/compound_tab_container.h" - -#include <memory> - -#include "base/functional/bind.h" -#include "base/trace_event/trace_event.h" -#include "base/types/to_address.h" -#include "chrome/browser/ui/tabs/tab_style.h" -#include "chrome/browser/ui/tabs/tab_types.h" -#include "chrome/browser/ui/ui_features.h" -#include "chrome/browser/ui/views/tabs/tab.h" -#include "chrome/browser/ui/views/tabs/tab_container_impl.h" -#include "chrome/browser/ui/views/tabs/tab_hover_card_controller.h" -#include "chrome/browser/ui/views/tabs/tab_scrolling_animation.h" -#include "chrome/browser/ui/views/tabs/tab_slot_animation_delegate.h" -#include "chrome/browser/ui/views/tabs/tab_slot_view.h" -#include "chrome/browser/ui/views/tabs/tab_strip_controller.h" -#include "ui/base/metadata/metadata_impl_macros.h" -#include "ui/base/models/list_selection_model.h" -#include "ui/gfx/geometry/rect_conversions.h" -#include "ui/views/controls/scroll_view.h" -#include "ui/views/layout/layout_types.h" -#include "ui/views/rect_based_targeting_utils.h" -#include "ui/views/view.h" -#include "ui/views/view_utils.h" - -namespace { -class PinnedTabContainerController final : public TabContainerController { - public: - explicit PinnedTabContainerController( - TabContainerController& base_controller, - CompoundTabContainer& compound_tab_container) - : base_controller_(base_controller), - compound_tab_container_(compound_tab_container) {} - - ~PinnedTabContainerController() override = default; - - bool IsValidModelIndex(int index) const override { - return base_controller_->IsValidModelIndex(index) && - index < NumPinnedTabsInModel(); - } - - std::optional<int> GetActiveIndex() const override { - const std::optional<int> active_index = base_controller_->GetActiveIndex(); - if (active_index.has_value() && !IsValidModelIndex(active_index.value())) { - return std::nullopt; - } - return base_controller_->GetActiveIndex(); - } - - int NumPinnedTabsInModel() const override { - return base_controller_->NumPinnedTabsInModel(); - } - - void OnDropIndexUpdate(const std::optional<int> index, - const bool drop_before) override { - base_controller_->OnDropIndexUpdate(index, drop_before); - } - - bool IsGroupCollapsed(const tab_groups::TabGroupId& group) const override { - NOTREACHED(); // Pinned container can't have groups. - } - - std::optional<int> GetFirstTabInGroup( - const tab_groups::TabGroupId& group) const override { - NOTREACHED(); // Pinned container can't have groups. - } - - gfx::Range ListTabsInGroup( - const tab_groups::TabGroupId& group) const override { - NOTREACHED(); // Pinned container can't have groups. - } - - bool CanExtendDragHandle() const override { - return base_controller_->CanExtendDragHandle(); - } - - const views::View* GetTabClosingModeMouseWatcherHostView() const override { - return base_controller_->GetTabClosingModeMouseWatcherHostView(); - } - - bool IsAnimatingInTabStrip() const override { - return base_controller_->IsAnimatingInTabStrip(); - } - - bool IsBrowserClosing() const override { - return base_controller_->IsBrowserClosing(); - } - - void UpdateAnimationTarget(TabSlotView* tab_slot_view, - gfx::Rect target_bounds) override { - compound_tab_container_->UpdateAnimationTarget(tab_slot_view, target_bounds, - TabPinned::kPinned); - } - - private: - const raw_ref<TabContainerController> base_controller_; - const raw_ref<CompoundTabContainer> compound_tab_container_; -}; - -class UnpinnedTabContainerController final : public TabContainerController { - public: - explicit UnpinnedTabContainerController( - TabContainerController& base_controller, - CompoundTabContainer& compound_tab_container) - : base_controller_(base_controller), - compound_tab_container_(compound_tab_container) {} - - ~UnpinnedTabContainerController() override = default; - - bool IsValidModelIndex(int index) const override { - return ContainerToModelIndex(index).has_value(); - } - - std::optional<int> GetActiveIndex() const override { - const std::optional<int> base_model_active_index = - base_controller_->GetActiveIndex(); - if (base_model_active_index.has_value()) { - return ModelToContainerIndex(base_model_active_index.value()); - } - return std::nullopt; - } - - int NumPinnedTabsInModel() const override { return 0; } - - void OnDropIndexUpdate(const std::optional<int> index, - const bool drop_before) override { - // We can't use ContainerIndexToModelIndex here because `index` might be - // after the last tab (i.e. the drop would open a new tab at the end of the - // tabstrip). - std::optional<int> model_index = std::nullopt; - if (index.has_value() && index > 0) { - model_index = index.value() + base_controller_->NumPinnedTabsInModel(); - // The adjusted index must be either a valid index in the model, or be the - // next index after the end of the model. - CHECK(base_controller_->IsValidModelIndex(model_index.value()) || - base_controller_->IsValidModelIndex(model_index.value() - 1)); - } - - base_controller_->OnDropIndexUpdate(model_index, drop_before); - } - - bool IsGroupCollapsed(const tab_groups::TabGroupId& group) const override { - return base_controller_->IsGroupCollapsed(group); - } - - std::optional<int> GetFirstTabInGroup( - const tab_groups::TabGroupId& group) const override { - const std::optional<int> model_index = - base_controller_->GetFirstTabInGroup(group); - if (!model_index) { - return std::nullopt; - } - return ModelToContainerIndex(model_index.value()); - } - - gfx::Range ListTabsInGroup( - const tab_groups::TabGroupId& group) const override { - const gfx::Range model_range = base_controller_->ListTabsInGroup(group); - return gfx::Range(ModelToContainerIndex(model_range.start()).value(), - ModelToContainerIndex(model_range.end() - 1).value()); - } - - bool CanExtendDragHandle() const override { - return base_controller_->CanExtendDragHandle(); - } - - const views::View* GetTabClosingModeMouseWatcherHostView() const override { - return base_controller_->GetTabClosingModeMouseWatcherHostView(); - } - - bool IsAnimatingInTabStrip() const override { - return base_controller_->IsAnimatingInTabStrip(); - } - - bool IsBrowserClosing() const override { - return base_controller_->IsBrowserClosing(); - } - - void UpdateAnimationTarget(TabSlotView* tab_slot_view, - gfx::Rect target_bounds) override { - compound_tab_container_->UpdateAnimationTarget(tab_slot_view, target_bounds, - TabPinned::kUnpinned); - } - - private: - std::optional<int> ModelToContainerIndex(int model_index) const { - if (model_index < base_controller_->NumPinnedTabsInModel() || - !base_controller_->IsValidModelIndex(model_index)) { - return std::nullopt; - } - return model_index - base_controller_->NumPinnedTabsInModel(); - } - - std::optional<int> ContainerToModelIndex(int container_index) const { - if (container_index < 0) { - return std::nullopt; - } - const int model_index = - container_index + base_controller_->NumPinnedTabsInModel(); - if (!base_controller_->IsValidModelIndex(model_index)) { - return std::nullopt; - } - return model_index; - } - - const raw_ref<TabContainerController> base_controller_; - const raw_ref<CompoundTabContainer> compound_tab_container_; -}; - -// Animates tabs being pinned or unpinned, then hands them back to -// `tab_container_`. -class PinUnpinAnimationDelegate : public TabSlotAnimationDelegate { - public: - PinUnpinAnimationDelegate(TabContainer* tab_container, TabSlotView* slot_view) - : TabSlotAnimationDelegate(tab_container, slot_view) {} - PinUnpinAnimationDelegate(const PinUnpinAnimationDelegate&) = delete; - PinUnpinAnimationDelegate& operator=(const PinUnpinAnimationDelegate&) = - delete; - ~PinUnpinAnimationDelegate() override = default; - - void AnimationEnded(const gfx::Animation* animation) override { - TabSlotAnimationDelegate::AnimationEnded(animation); - tab_container()->ReturnTabSlotView(slot_view()); - } -}; -} // namespace - -CompoundTabContainer::CompoundTabContainer( - TabContainerController& controller, - TabHoverCardController* hover_card_controller, - TabDragContextBase* drag_context, - TabSlotController& tab_slot_controller, - views::View* scroll_contents_view) - : controller_(controller), - pinned_tab_container_controller_( - std::make_unique<PinnedTabContainerController>(controller, *this)), - pinned_tab_container_(*AddChildView(std::make_unique<TabContainerImpl>( - *(pinned_tab_container_controller_.get()), - hover_card_controller, - drag_context, - tab_slot_controller, - scroll_contents_view))), - unpinned_tab_container_controller_( - std::make_unique<UnpinnedTabContainerController>(controller, *this)), - unpinned_tab_container_(*AddChildView(std::make_unique<TabContainerImpl>( - *(unpinned_tab_container_controller_.get()), - hover_card_controller, - drag_context, - tab_slot_controller, - scroll_contents_view))), - hover_card_controller_(hover_card_controller), - scroll_contents_view_(scroll_contents_view), - bounds_animator_(this) { - SetEventTargeter(std::make_unique<views::ViewTargeter>(this)); -} - -CompoundTabContainer::~CompoundTabContainer() { - // Tabs call back up to the TabStrip during animation end and destruction. - // Ensure that happens now so we aren't in a half-destructed state when they - // do so. - CancelAnimation(); - RemoveChildViewT(base::to_address(pinned_tab_container_)); - RemoveChildViewT(base::to_address(unpinned_tab_container_)); -} - -void CompoundTabContainer::SetAvailableWidthCallback( - base::RepeatingCallback<int()> available_width_callback) { - // Store this ourselves, and let our child containers fall back to calling - // GetAvailableSize. - available_width_callback_ = available_width_callback; -} - -std::vector<Tab*> CompoundTabContainer::AddTabs( - std::vector<TabInsertionParams> tabs_params) { - std::vector<Tab*> added_tabs; - - // Assume all tabs are either pinned or unpinned - if (!tabs_params.empty()) { - if (tabs_params[0].pinned == TabPinned::kPinned) { - for (const TabInsertionParams& param : tabs_params) { - CHECK_EQ(param.pinned, TabPinned::kPinned); - CHECK_LE(param.model_index, NumPinnedTabs()); - } - - added_tabs = pinned_tab_container_->AddTabs(std::move(tabs_params)); - } else { - for (auto& param : tabs_params) { - CHECK_EQ(param.pinned, TabPinned::kUnpinned); - CHECK_GE(param.model_index, NumPinnedTabs()); - param.model_index -= NumPinnedTabs(); - } - added_tabs = unpinned_tab_container_->AddTabs(std::move(tabs_params)); - } - } - - return added_tabs; -} - -void CompoundTabContainer::MoveTab(int from_model_index, int to_model_index) { - const bool prev_pinned = from_model_index < NumPinnedTabs(); - // The tab's TabData has already been updated at this point to reflect its - // next pinned status. Consistency with `to_model_index` is verified below. - const bool next_pinned = GetTabAtModelIndex(from_model_index)->data().pinned; - - // If the tab was pinned/unpinned as part of this move, we will need to - // transfer it between our TabContainers. - if (prev_pinned != next_pinned) { - TransferTabBetweenContainers(from_model_index, to_model_index); - } else if (prev_pinned) { - CHECK_LT(to_model_index, NumPinnedTabs()); - pinned_tab_container_->MoveTab(from_model_index, to_model_index); - } else { // !prev_pinned - CHECK_GE(to_model_index, NumPinnedTabs()); - unpinned_tab_container_->MoveTab(from_model_index - NumPinnedTabs(), - to_model_index - NumPinnedTabs()); - } -} - -void CompoundTabContainer::RemoveTab(int index, bool was_active) { - CHECK(IsValidViewModelIndex(index)) << index; - if (index < NumPinnedTabs()) { - pinned_tab_container_->RemoveTab(index, was_active); - } else { - unpinned_tab_container_->RemoveTab(index - NumPinnedTabs(), was_active); - } -} - -void CompoundTabContainer::SetTabPinned(int model_index, TabPinned pinned) { - // This method does not support reorders, so the tab must already be at a - // location that can hold either a pinned or an unpinned tab, i.e. the border - // between the pinned and unpinned subsets. - CHECK_EQ(model_index, - pinned == TabPinned::kPinned ? NumPinnedTabs() : NumPinnedTabs() - 1) - << "Cannot " << (pinned == TabPinned::kPinned ? "pin" : "unpin") - << " the tab at model index " << model_index << " when there are " - << NumPinnedTabs() << " pinned tabs without moving that tab." - << " Use MoveTab to move and (un)pin a tab at the same time."; - // The tab's data must already have been updated. - DCHECK_EQ(pinned == TabPinned::kPinned, - GetTabAtModelIndex(model_index)->data().pinned); - TransferTabBetweenContainers(model_index, model_index); -} - -void CompoundTabContainer::SetActiveTab( - std::optional<size_t> prev_active_index, - std::optional<size_t> new_active_index) { - std::optional<size_t> prev_pinned_active_index; - std::optional<size_t> new_pinned_active_index; - std::optional<size_t> prev_unpinned_active_index; - std::optional<size_t> new_unpinned_active_index; - if (prev_active_index.has_value()) { - if (prev_active_index < static_cast<size_t>(NumPinnedTabs())) { - prev_pinned_active_index = prev_active_index; - } else { - prev_unpinned_active_index = prev_active_index.value() - NumPinnedTabs(); - } - } - if (new_active_index.has_value()) { - if (new_active_index < static_cast<size_t>(NumPinnedTabs())) { - new_pinned_active_index = new_active_index; - } else { - new_unpinned_active_index = new_active_index.value() - NumPinnedTabs(); - } - } - - pinned_tab_container_->SetActiveTab(prev_pinned_active_index, - new_pinned_active_index); - unpinned_tab_container_->SetActiveTab(prev_unpinned_active_index, - new_unpinned_active_index); -} - -Tab* CompoundTabContainer::RemoveTabFromViewModel(int model_index) { - // TODO(crbug.com/40882151): This only needs to be implemented in - // TabContainerImpl. - NOTREACHED(); -} - -Tab* CompoundTabContainer::AddTabToViewModel(Tab* tab, - int model_index, - TabPinned pinned) { - // TODO(crbug.com/40882151): This only needs to be implemented in - // TabContainerImpl. - NOTREACHED(); -} - -void CompoundTabContainer::ReturnTabSlotView(TabSlotView* view) { - GetTabContainerFor(view).ReturnTabSlotView(view); -} - -void CompoundTabContainer::ScrollTabToVisible(int model_index) { - // TODO(crbug.com/40060338): Implement. I guess. -} - -void CompoundTabContainer::ScrollTabContainerByOffset(int offset) { - std::optional<gfx::Rect> visible_content_rect = GetVisibleContentRect(); - if (!visible_content_rect.has_value() || offset == 0) { - return; - } - - // If tabcontainer is scrolled towards trailing tab, the start edge should - // have the x coordinate of the right bound. If it is scrolled towards the - // leading tab it should have the x coordinate of the left bound. - int start_edge = - (offset > 0) ? visible_content_rect->right() : visible_content_rect->x(); - - AnimateScrollToShowXCoordinate(start_edge, start_edge + offset); -} - -void CompoundTabContainer::OnGroupCreated(const tab_groups::TabGroupId& group) { - unpinned_tab_container_->OnGroupCreated(group); -} - -void CompoundTabContainer::OnGroupEditorOpened( - const tab_groups::TabGroupId& group) { - unpinned_tab_container_->OnGroupEditorOpened(group); -} - -void CompoundTabContainer::OnGroupMoved(const tab_groups::TabGroupId& group) { - unpinned_tab_container_->OnGroupMoved(group); -} - -void CompoundTabContainer::OnGroupContentsChanged( - const tab_groups::TabGroupId& group) { - unpinned_tab_container_->OnGroupContentsChanged(group); -} - -void CompoundTabContainer::OnGroupVisualsChanged( - const tab_groups::TabGroupId& group, - const tab_groups::TabGroupVisualData* old_visuals, - const tab_groups::TabGroupVisualData* new_visuals) { - unpinned_tab_container_->OnGroupVisualsChanged(group, old_visuals, - new_visuals); -} - -void CompoundTabContainer::ToggleTabGroup( - const tab_groups::TabGroupId& group, - bool is_collapsing, - ToggleTabGroupCollapsedStateOrigin origin) { - unpinned_tab_container_->ToggleTabGroup(group, is_collapsing, origin); -} - -void CompoundTabContainer::OnGroupClosed(const tab_groups::TabGroupId& group) { - unpinned_tab_container_->OnGroupClosed(group); -} - -void CompoundTabContainer::UpdateTabGroupVisuals( - tab_groups::TabGroupId group_id) { - unpinned_tab_container_->UpdateTabGroupVisuals(group_id); -} - -void CompoundTabContainer::NotifyTabstripBubbleOpened() { - unpinned_tab_container_->NotifyTabstripBubbleOpened(); -} - -void CompoundTabContainer::NotifyTabstripBubbleClosed() { - unpinned_tab_container_->NotifyTabstripBubbleClosed(); -} - -void CompoundTabContainer::OnSplitCreated(const std::vector<int>& indices) { - OnSplitChanged(indices, &TabContainer::OnSplitCreated); -} - -void CompoundTabContainer::OnSplitRemoved(const std::vector<int>& indices) { - OnSplitChanged(indices, &TabContainer::OnSplitRemoved); -} - -void CompoundTabContainer::OnSplitContentsChanged( - const std::vector<int>& indices) { - OnSplitChanged(indices, &TabContainer::OnSplitContentsChanged); -} - -std::optional<int> CompoundTabContainer::GetModelIndexOf( - const TabSlotView* slot_view) const { - const std::optional<int> unpinned_index = - unpinned_tab_container_->GetModelIndexOf(slot_view); - if (unpinned_index.has_value()) { - return unpinned_index.value() + NumPinnedTabs(); - } - return pinned_tab_container_->GetModelIndexOf(slot_view); -} - -Tab* CompoundTabContainer::GetTabAtModelIndex(int index) const { - CHECK_LT(index, GetTabCount()); - const int num_pinned_tabs = NumPinnedTabs(); - if (index < num_pinned_tabs) { - return pinned_tab_container_->GetTabAtModelIndex(index); - } - return unpinned_tab_container_->GetTabAtModelIndex(index - num_pinned_tabs); -} - -int CompoundTabContainer::GetTabCount() const { - return pinned_tab_container_->GetTabCount() + - unpinned_tab_container_->GetTabCount(); -} - -std::optional<int> CompoundTabContainer::GetModelIndexOfFirstNonClosingTab( - Tab* tab) const { - if (tab->data().pinned) { - const std::optional<int> pinned_index = - pinned_tab_container_->GetModelIndexOfFirstNonClosingTab(tab); - - // If there are no non-closing pinned tabs after `tab`, return the first - // non-closing unpinned tab, if there is one (if the unpinned container is - // empty or only has closing tabs, GetTabCount will be 0). - if (!pinned_index.has_value() && - unpinned_tab_container_->GetTabCount() > 0) { - return NumPinnedTabs(); - } - return pinned_index; - } else { - const std::optional<int> unpinned_index = - unpinned_tab_container_->GetModelIndexOfFirstNonClosingTab(tab); - if (unpinned_index.has_value()) { - return unpinned_index.value() + NumPinnedTabs(); - } - return std::nullopt; - } -} - -void CompoundTabContainer::UpdateHoverCard( - Tab* tab, - TabSlotController::HoverCardUpdateType update_type) { - // Some operations (including e.g. starting a drag) can cause the tab focus - // to change at the same time as the tabstrip is starting to animate; the - // hover card should not be visible at this time. - // See crbug.com/1220840 for an example case. - if (controller_->IsAnimatingInTabStrip()) { - tab = nullptr; - update_type = TabSlotController::HoverCardUpdateType::kAnimating; - } - - if (!hover_card_controller_) { - return; - } - - hover_card_controller_->UpdateHoverCard(tab, update_type); -} - -void CompoundTabContainer::HandleLongTap(ui::GestureEvent* const event) { - TabContainer* const tab_container = GetTabContainerAt(event->location()); - if (!tab_container) { - return; - } - - ConvertEventToTarget(tab_container, event); - tab_container->HandleLongTap(event); -} - -bool CompoundTabContainer::IsRectInContentArea(const gfx::Rect& rect) { - if (pinned_tab_container_->IsRectInContentArea(ToEnclosingRect( - ConvertRectToTarget(this, base::to_address(pinned_tab_container_), - gfx::RectF(rect))))) { - return true; - } - - return unpinned_tab_container_->IsRectInContentArea( - ToEnclosingRect(ConvertRectToTarget( - this, base::to_address(unpinned_tab_container_), gfx::RectF(rect)))); -} - -std::optional<ZOrderableTabContainerElement> -CompoundTabContainer::GetLeadingElementForZOrdering() const { - // TODO(crbug.com/40882151): This only needs to be implemented in - // TabContainerImpl. - NOTREACHED(); -} -std::optional<ZOrderableTabContainerElement> -CompoundTabContainer::GetTrailingElementForZOrdering() const { - // TODO(crbug.com/40882151): This only needs to be implemented in - // TabContainerImpl. - NOTREACHED(); -} - -void CompoundTabContainer::OnTabSlotAnimationProgressed(TabSlotView* view) { - GetTabContainerFor(view).OnTabSlotAnimationProgressed(view); -} - -void CompoundTabContainer::OnTabCloseAnimationCompleted(Tab* tab) { - // TODO(crbug.com/40882151): This only needs to be implemented in - // TabContainerImpl. - NOTREACHED(); -} - -void CompoundTabContainer::InvalidateIdealBounds() { - pinned_tab_container_->InvalidateIdealBounds(); - unpinned_tab_container_->InvalidateIdealBounds(); -} - -void CompoundTabContainer::AnimateToIdealBounds() { - // `pinned_tab_container_` must plan its animation first so - // `unpinned_tab_container_` has up-to-date available width. - pinned_tab_container_->AnimateToIdealBounds(); - unpinned_tab_container_->AnimateToIdealBounds(); - - // Animate the pinning or unpinning tabs too. - for (views::View* child : children()) { - Tab* tab = views::AsViewClass<Tab>(child); - if (!tab) { - continue; - } - - const std::optional<int> model_index = GetModelIndexOf(tab); - // The tab may have been closed during a pin/unpin animation, in which case - // it a) has no model index and b) is already animating to its correct - // bounds because that will have been updated in `UpdateAnimationTarget()`. - if (!model_index.has_value()) { - continue; - } - - AnimateTabTo(tab, GetIdealBounds(model_index.value())); - } -} - -bool CompoundTabContainer::IsAnimating() const { - return bounds_animator_.IsAnimating() || - pinned_tab_container_->IsAnimating() || - unpinned_tab_container_->IsAnimating(); -} - -void CompoundTabContainer::CancelAnimation() { - pinned_tab_container_->CancelAnimation(); - unpinned_tab_container_->CancelAnimation(); -} - -void CompoundTabContainer::CompleteAnimationAndLayout() { - bounds_animator_.Complete(); - pinned_tab_container_->CompleteAnimationAndLayout(); - unpinned_tab_container_->CompleteAnimationAndLayout(); - DeprecatedLayoutImmediately(); -} - -int CompoundTabContainer::GetAvailableWidthForTabContainer() const { - // Falls back to views::View::GetAvailableSize() when - // `available_width_callback_` is not defined, e.g. when tab scrolling is - // disabled. - return available_width_callback_ - ? available_width_callback_.Run() - : parent()->GetAvailableSize(this).width().value(); -} - -void CompoundTabContainer::EnterTabClosingMode( - std::optional<int> override_width, - CloseTabSource source) { - if (override_width.has_value()) { - override_width = override_width.value() - - pinned_tab_container_->GetPreferredSize().width(); - } - - // The pinned container can't be in closing mode, as pinned tabs don't resize. - unpinned_tab_container_->EnterTabClosingMode(override_width, source); -} - -void CompoundTabContainer::ExitTabClosingMode() { - // The pinned container can't be in closing mode, as pinned tabs don't resize. - unpinned_tab_container_->ExitTabClosingMode(); -} - -void CompoundTabContainer::SetTabSlotVisibility() { - // TODO(crbug.com/40060338): Impl -} - -bool CompoundTabContainer::InTabClose() { - // The pinned container can't be in closing mode, as pinned tabs don't resize. - return unpinned_tab_container_->InTabClose(); -} - -TabGroupViews* CompoundTabContainer::GetGroupViews( - tab_groups::TabGroupId group_id) const { - return unpinned_tab_container_->GetGroupViews(group_id); -} - -const std::map<tab_groups::TabGroupId, std::unique_ptr<TabGroupViews>>& -CompoundTabContainer::get_group_views_for_testing() const { - // Only the unpinned container can have groups. - return unpinned_tab_container_->get_group_views_for_testing(); // IN-TEST -} - -std::map<tab_groups::TabGroupId, TabGroupHeader*> -CompoundTabContainer::GetGroupHeaders() const { - return unpinned_tab_container_->GetGroupHeaders(); -} - -gfx::Rect CompoundTabContainer::GetIdealBounds(int model_index) const { - // Ideal bounds for pinned tabs are fine as-is. - if (model_index < NumPinnedTabs()) { - return pinned_tab_container_->GetIdealBounds(model_index); - } - - return ConvertUnpinnedContainerIdealBoundsToLocal( - unpinned_tab_container_->GetIdealBounds(model_index - NumPinnedTabs())); -} - -gfx::Rect CompoundTabContainer::GetIdealBounds( - tab_groups::TabGroupId group) const { - return ConvertUnpinnedContainerIdealBoundsToLocal( - unpinned_tab_container_->GetIdealBounds(group)); -} - -gfx::Size CompoundTabContainer::GetMinimumSize() const { - return GetCombinedSizeForTabContainerSizes( - pinned_tab_container_->GetMinimumSize(), - unpinned_tab_container_->GetMinimumSize()); -} - -views::SizeBounds CompoundTabContainer::GetAvailableSize( - const views::View* child) const { - if (child == base::to_address(pinned_tab_container_)) { - return views::SizeBounds(GetAvailableWidthForTabContainer(), - views::SizeBound()); - } - - CHECK_EQ(child, base::to_address(unpinned_tab_container_)); - return views::SizeBounds(GetAvailableWidthForUnpinnedTabContainer(), - views::SizeBound()); -} - -gfx::Size CompoundTabContainer::CalculatePreferredSize( - const views::SizeBounds& available_size) const { - return GetCombinedSizeForTabContainerSizes( - pinned_tab_container_->GetPreferredSize(), - unpinned_tab_container_->GetPreferredSize()); -} - -views::View* CompoundTabContainer::GetTooltipHandlerForPoint( - const gfx::Point& point) { - TabContainer* const sub_container = GetTabContainerAt(point); - return sub_container ? sub_container->GetTooltipHandlerForPoint( - ConvertPointToTarget(this, sub_container, point)) - : this; -} - -void CompoundTabContainer::Layout(PassKey) { - // Pinned container gets however much space it wants. - pinned_tab_container_->SetBoundsRect( - gfx::Rect(pinned_tab_container_->GetPreferredSize())); - - // Unpinned container can have whatever is left over. - const int unpinned_container_leading_x = std::max( - 0, pinned_tab_container_->width() - TabStyle::Get()->GetTabOverlap()); - const int available_width = width() - unpinned_container_leading_x; - - const gfx::Size pref_size = unpinned_tab_container_->GetPreferredSize(); - - unpinned_tab_container_->SetBounds( - unpinned_container_leading_x, 0, - std::min(available_width, pref_size.width()), pref_size.height()); -} - -void CompoundTabContainer::PaintChildren(const views::PaintInfo& paint_info) { - TRACE_EVENT1("views", "View::PaintChildren", "class", GetClassName()); - - // N.B. We override PaintChildren only to define paint order for our children. - // We do this instead of GetChildrenInZOrder for consistency with - // TabContainerImpl. - - // Paint our containers first, ordered based on their overlapping elements. - // I.e., the last tab in `pinned_tab_container_` will overlap the first tab - // (or group header) in `unpinned_tab_container_`, and to paint them in the - // right order, we have to paint their containers in the same order. - // N.B. if either are nullopt, it doesn't matter what order we paint in - // because that whole container must be empty and therefore won't paint - // anything at all. - std::optional<ZOrderableTabContainerElement> trailing_pinned_element = - pinned_tab_container_->GetTrailingElementForZOrdering(); - std::optional<ZOrderableTabContainerElement> leading_unpinned_element = - unpinned_tab_container_->GetLeadingElementForZOrdering(); - if (trailing_pinned_element < leading_unpinned_element) { - pinned_tab_container_->Paint(paint_info); - unpinned_tab_container_->Paint(paint_info); - } else { - unpinned_tab_container_->Paint(paint_info); - pinned_tab_container_->Paint(paint_info); - } - - // Then paint all tabs animating between pinned and unpinned, ordered based on - // their individual z-values. - std::vector<ZOrderableTabContainerElement> orderable_children; - for (views::View* const child : children()) { - if (!ZOrderableTabContainerElement::CanOrderView(child)) { - continue; - } - orderable_children.emplace_back(child); - } - - // Sort in ascending order by z-value. Stable sort breaks ties by child index. - std::stable_sort(orderable_children.begin(), orderable_children.end()); - - for (const ZOrderableTabContainerElement& child : orderable_children) { - child.view()->Paint(paint_info); - } -} - -void CompoundTabContainer::ChildPreferredSizeChanged(views::View* child) { - PreferredSizeChanged(); -} - -std::optional<BrowserRootView::DropIndex> CompoundTabContainer::GetDropIndex( - const ui::DropTargetEvent& event) { - TabContainer* sub_drop_target = GetTabContainerForDrop(event.location()); - CHECK(sub_drop_target); - CHECK(sub_drop_target->GetDropTarget( - ConvertPointToTarget(this, sub_drop_target, event.location()))); - - // Convert to `sub_drop_target`'s local coordinate space. - const gfx::Point loc_in_sub_target = ConvertPointToTarget( - this, sub_drop_target->GetViewForDrop(), event.location()); - const ui::DropTargetEvent adjusted_event = ui::DropTargetEvent( - event.data(), gfx::PointF(loc_in_sub_target), - gfx::PointF(loc_in_sub_target), event.source_operations()); - - if (sub_drop_target == base::to_address(pinned_tab_container_)) { - // Pinned tab container shares an index and coordinate space, so no - // adjustments needed. - return sub_drop_target->GetDropIndex(adjusted_event); - } else { - // For the unpinned container, we need to transform the output to the - // correct index space. - const std::optional<BrowserRootView::DropIndex> sub_target_index = - sub_drop_target->GetDropIndex(adjusted_event); - return BrowserRootView::DropIndex{ - .index = sub_target_index->index + NumPinnedTabs(), - .relative_to_index = sub_target_index->relative_to_index, - .group_inclusion = sub_target_index->group_inclusion}; - } -} - -BrowserRootView::DropTarget* CompoundTabContainer::GetDropTarget( - gfx::Point loc_in_local_coords) { - TabContainer* const sub_drop_target = - GetTabContainerForDrop(loc_in_local_coords); - - if (sub_drop_target == nullptr || - !sub_drop_target->GetDropTarget( - ConvertPointToTarget(this, sub_drop_target, loc_in_local_coords))) { - return nullptr; - } - return this; -} - -views::View* CompoundTabContainer::GetViewForDrop() { - return this; -} - -void CompoundTabContainer::HandleDragUpdate( - const std::optional<BrowserRootView::DropIndex>& index) { - // Update `current_text_drop_target_`. - TabContainer* next_drop_target = nullptr; - if (index.has_value()) { - next_drop_target = base::to_address(index->index < NumPinnedTabs() - ? pinned_tab_container_ - : unpinned_tab_container_); - } - if (next_drop_target != current_text_drop_target_) { - if (current_text_drop_target_) { - current_text_drop_target_->HandleDragExited(); - } - current_text_drop_target_ = next_drop_target; - } - - if (current_text_drop_target_ == nullptr) { // I.e. if `index` is nullopt. - return; - } - - // Forward to `current_text_drop_target_`, adjusting if needed. - if (current_text_drop_target_ == base::to_address(pinned_tab_container_)) { - pinned_tab_container_->HandleDragUpdate(index); - } else { - BrowserRootView::DropIndex adjusted_index{ - .index = index->index - NumPinnedTabs(), - .relative_to_index = index->relative_to_index, - .group_inclusion = index->group_inclusion}; - unpinned_tab_container_->HandleDragUpdate(adjusted_index); - } -} - -void CompoundTabContainer::HandleDragExited() { - if (current_text_drop_target_) { - current_text_drop_target_->HandleDragExited(); - current_text_drop_target_ = nullptr; - } -} - -views::View* CompoundTabContainer::TargetForRect(views::View* root, - const gfx::Rect& rect) { - CHECK_EQ(root, this); - - if (!views::UsePointBasedTargeting(rect)) { - return views::ViewTargeterDelegate::TargetForRect(root, rect); - } - - const gfx::Point point(rect.CenterPoint()); - TabContainer* const sub_container = GetTabContainerAt(point); - if (sub_container == nullptr) { - return this; - } - - return sub_container->GetEventHandlerForRect(ToEnclosingRect( - ConvertRectToTarget(this, sub_container, gfx::RectF(rect)))); -} - -void CompoundTabContainer::UpdateAnimationTarget(TabSlotView* tab_slot_view, - gfx::Rect target_bounds, - TabPinned pinned) { - if (pinned == TabPinned::kUnpinned) { - target_bounds = ConvertUnpinnedContainerIdealBoundsToLocal(target_bounds); - } - - if (tab_slot_view->parent() != this) { - controller_->UpdateAnimationTarget(tab_slot_view, target_bounds); - return; - } - - // We should only have tabs to deal with here, as groups cannot be pinned. - DCHECK(views::IsViewClass<Tab>(tab_slot_view)); - if (bounds_animator_.IsAnimating(tab_slot_view)) { - bounds_animator_.SetTargetBounds(tab_slot_view, target_bounds); - } -} - -int CompoundTabContainer::NumPinnedTabs() const { - return pinned_tab_container_->GetTabCount(); -} - -bool CompoundTabContainer::IsValidViewModelIndex(int index) const { - const int total_num_tabs = pinned_tab_container_->GetTabCount() + - unpinned_tab_container_->GetTabCount(); - return index >= 0 && index < total_num_tabs; -} - -void CompoundTabContainer::TransferTabBetweenContainers(int from_model_index, - int to_model_index) { - // If the tab at `from_model_index` is already being transferred, complete - // all pending transfers before we embark upon this one to avoid conflicts. - if (bounds_animator_.IsAnimating(GetTabAtModelIndex(from_model_index))) { - // We are out of sync with the model right now (because we're handling a - // model update), so we need to be careful here. We can complete our - // directly managed animations, but we can't ask the sub-containers to do - // the same, as their ideal bounds calculations assume the model and - // viewmodel are in sync. - bounds_animator_.Complete(); - } - - const bool prev_pinned = from_model_index < NumPinnedTabs(); - const bool next_pinned = !prev_pinned; - - const int before_num_pinned_tabs = NumPinnedTabs(); - const int after_num_pinned_tabs = - before_num_pinned_tabs + (next_pinned ? 1 : -1); - - if (next_pinned) { - // We are going from `unpinned_tab_container_` to `pinned_tab_container_`. - // Indices must be valid for those containers. If `from_model_index` == - // `to_model_index`, we're pinning the first unpinned tab. - CHECK_GE(from_model_index, before_num_pinned_tabs); - CHECK_LT(to_model_index, after_num_pinned_tabs); - } else { - // We are going from `pinned_tab_container_` to `unpinned_tab_container_`. - // Indices must be valid for those containers. If `from_model_index` == - // `to_model_index`, we're unpinning the last pinned tab. - CHECK_LT(from_model_index, before_num_pinned_tabs); - CHECK_GE(to_model_index, after_num_pinned_tabs); - } - - TabContainer& from_container = - *(prev_pinned ? pinned_tab_container_ : unpinned_tab_container_); - const int from_container_index = - prev_pinned ? from_model_index - : from_model_index - before_num_pinned_tabs; - TabContainer& to_container = - *(next_pinned ? pinned_tab_container_ : unpinned_tab_container_); - const int to_container_index = - next_pinned ? to_model_index : to_model_index - after_num_pinned_tabs; - - // Take `tab` ourselves, so we can animate it. Save and restore its bounds to - // ensure it doesn't move visually from its current starting bounds. - const gfx::RectF initial_tab_bounds = ConvertRectToTarget( - &from_container, this, - gfx::RectF( - from_container.GetTabAtModelIndex(from_container_index)->bounds())); - Tab* const tab = AddChildViewRaw( - from_container.RemoveTabFromViewModel(from_container_index)); - tab->SetBoundsRect(ToEnclosingRect(initial_tab_bounds)); - - // Let `to_container` update its layout data structures. - to_container.AddTabToViewModel( - tab, to_container_index, - next_pinned ? TabPinned::kPinned : TabPinned::kUnpinned); - - AnimateToIdealBounds(); -} - -void CompoundTabContainer::AnimateTabTo(Tab* tab, gfx::Rect ideal_bounds) { - if (bounds_animator_.IsAnimating(tab)) { - bounds_animator_.SetTargetBounds(tab, ideal_bounds); - } else { - bounds_animator_.SetAnimationDuration( - gfx::Animation::RichAnimationDuration(base::Milliseconds(200))); - bounds_animator_.AnimateViewTo(tab, ideal_bounds, - std::make_unique<PinUnpinAnimationDelegate>( - &GetTabContainerFor(tab), tab)); - } -} - -gfx::Rect CompoundTabContainer::ConvertUnpinnedContainerIdealBoundsToLocal( - gfx::Rect ideal_bounds) const { - const int unpinned_container_ideal_leading_x = - GetUnpinnedContainerIdealLeadingX(); - ideal_bounds.Offset(unpinned_container_ideal_leading_x, 0); - return ideal_bounds; -} - -TabContainer& CompoundTabContainer::GetTabContainerFor( - TabSlotView* view) const { - if (view->GetTabSlotViewType() == TabSlotView::ViewType::kTabGroupHeader) { - return unpinned_tab_container_.get(); - } - - Tab* tab = views::AsViewClass<Tab>(view); - return tab->data().pinned ? pinned_tab_container_.get() - : unpinned_tab_container_.get(); -} - -TabContainer* CompoundTabContainer::GetTabContainerForDrop( - gfx::Point point_in_local_coords) const { - const int cutoff_x = (pinned_tab_container_->bounds().right() + - unpinned_tab_container_->bounds().x()) / - 2; - - if (point_in_local_coords.x() < cutoff_x) { - return base::to_address(pinned_tab_container_); - } - return base::to_address(unpinned_tab_container_); -} - -TabContainer* CompoundTabContainer::GetTabContainerAt( - gfx::Point point_in_local_coords) const { - const bool in_pinned = - pinned_tab_container_->bounds().Contains(point_in_local_coords); - const bool in_unpinned = - unpinned_tab_container_->bounds().Contains(point_in_local_coords); - - if (in_pinned && in_unpinned) { - const int cutoff_x = (pinned_tab_container_->bounds().right() + - unpinned_tab_container_->bounds().x()) / - 2; - if (point_in_local_coords.x() < cutoff_x) { - return base::to_address(pinned_tab_container_); - } - return base::to_address(unpinned_tab_container_); - } - - if (in_pinned) { - return base::to_address(pinned_tab_container_); - } - if (in_unpinned) { - return base::to_address(unpinned_tab_container_); - } - - // `point_in_local_coords` might be in neither sub container if our layout is - // (transiently) stale, e.g. during window creation. - return nullptr; -} - -int CompoundTabContainer::GetUnpinnedContainerIdealLeadingX() const { - return NumPinnedTabs() > 0 - ? pinned_tab_container_->GetIdealBounds(NumPinnedTabs() - 1) - .right() - - TabStyle::Get()->GetTabOverlap() - : 0; -} - -int CompoundTabContainer::GetAvailableWidthForUnpinnedTabContainer() const { - // The unpinned container gets the width the pinned container doesn't want. - return GetAvailableWidthForTabContainer() - - GetUnpinnedContainerIdealLeadingX(); -} - -gfx::Size CompoundTabContainer::GetCombinedSizeForTabContainerSizes( - const gfx::Size pinned_size, - const gfx::Size unpinned_size) const { - gfx::Size largest_container = pinned_size; - largest_container.SetToMax(unpinned_size); - - const int width_with_overlap = pinned_size.width() + unpinned_size.width() - - TabStyle::Get()->GetTabOverlap(); - return gfx::Size(std::max(width_with_overlap, largest_container.width()), - largest_container.height()); -} - -std::optional<gfx::Rect> CompoundTabContainer::GetVisibleContentRect() const { - const views::ScrollView* const scroll_container = - views::ScrollView::GetScrollViewForContents(scroll_contents_view_); - if (!scroll_container) { - return std::nullopt; - } - - return scroll_container->GetVisibleRect(); -} - -void CompoundTabContainer::AnimateScrollToShowXCoordinate( - const int start_edge, - const int target_edge) { - if (tab_scrolling_animation_) { - tab_scrolling_animation_->Stop(); - } - - gfx::Rect start_rect(start_edge, 0, 0, 0); - gfx::Rect target_rect(target_edge, 0, 0, 0); - - tab_scrolling_animation_ = std::make_unique<TabScrollingAnimation>( - scroll_contents_view_, bounds_animator_.container(), start_rect, - target_rect); - tab_scrolling_animation_->Start(); -} - -void CompoundTabContainer::OnSplitChanged(const std::vector<int>& indices, - SplitChangedCallback callback) { - CHECK(!indices.empty()); - int pinned_count = NumPinnedTabs(); - - // All the indices are expected to either be in the pinned or unpinned - // container and so checking just the first index. - if (indices[0] < pinned_count) { - return ((*pinned_tab_container_).*callback)(indices); - } - - if (pinned_count == 0) { - return ((*unpinned_tab_container_).*callback)(indices); - } - - std::vector<int> unpinned_indices; - unpinned_indices.reserve(indices.size()); - - std::transform(indices.begin(), indices.end(), - std::back_inserter(unpinned_indices), - [pinned_count](int index) { return index - pinned_count; }); - - return ((*unpinned_tab_container_).*callback)(unpinned_indices); -} - -BEGIN_METADATA(CompoundTabContainer) -END_METADATA
diff --git a/chrome/browser/ui/views/tabs/compound_tab_container.h b/chrome/browser/ui/views/tabs/compound_tab_container.h deleted file mode 100644 index b9bd661..0000000 --- a/chrome/browser/ui/views/tabs/compound_tab_container.h +++ /dev/null
@@ -1,234 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_VIEWS_TABS_COMPOUND_TAB_CONTAINER_H_ -#define CHROME_BROWSER_UI_VIEWS_TABS_COMPOUND_TAB_CONTAINER_H_ - -#include <memory> - -#include "base/memory/raw_ptr.h" -#include "chrome/browser/ui/views/tabs/tab_container.h" -#include "chrome/browser/ui/views/tabs/tab_container_controller.h" -#include "components/tab_groups/tab_group_id.h" -#include "ui/base/metadata/metadata_header_macros.h" -#include "ui/gfx/geometry/point.h" -#include "ui/views/view_targeter_delegate.h" - -class TabHoverCardController; -class TabDragContextBase; - -// Composes two TabContainers into one, keeping the pinned tabs in one container -// and the unpinned tabs in the other. -// Indices in the public and private API are all in overall indices, unless -// specifically noted otherwise as being relative to a specific container. -class CompoundTabContainer : public TabContainer, - public views::ViewTargeterDelegate { - METADATA_HEADER(CompoundTabContainer, TabContainer) - - public: - CompoundTabContainer(TabContainerController& controller, - TabHoverCardController* hover_card_controller, - TabDragContextBase* drag_context, - TabSlotController& tab_slot_controller, - views::View* scroll_contents_view); - ~CompoundTabContainer() override; - - // TabContainer: - void SetAvailableWidthCallback( - base::RepeatingCallback<int()> available_width_callback) override; - std::vector<Tab*> AddTabs( - std::vector<TabInsertionParams> tabs_params) override; - void MoveTab(int from_model_index, int to_model_index) override; - void RemoveTab(int index, bool was_active) override; - void SetTabPinned(int model_index, TabPinned pinned) override; - void SetActiveTab(std::optional<size_t> prev_active_index, - std::optional<size_t> new_active_index) override; - Tab* RemoveTabFromViewModel(int model_index) override; - Tab* AddTabToViewModel(Tab* tab, int model_index, TabPinned pinned) override; - void ReturnTabSlotView(TabSlotView* view) override; - void ScrollTabToVisible(int model_index) override; - void ScrollTabContainerByOffset(int offset) override; - void OnGroupCreated(const tab_groups::TabGroupId& group) override; - void OnGroupEditorOpened(const tab_groups::TabGroupId& group) override; - void OnGroupMoved(const tab_groups::TabGroupId& group) override; - void OnGroupContentsChanged(const tab_groups::TabGroupId& group) override; - void OnGroupVisualsChanged( - const tab_groups::TabGroupId& group, - const tab_groups::TabGroupVisualData* old_visuals, - const tab_groups::TabGroupVisualData* new_visuals) override; - void OnGroupClosed(const tab_groups::TabGroupId& group) override; - void ToggleTabGroup(const tab_groups::TabGroupId& group, - bool is_collapsing, - ToggleTabGroupCollapsedStateOrigin origin) override; - void UpdateTabGroupVisuals(tab_groups::TabGroupId group_id) override; - void NotifyTabstripBubbleOpened() override; - void NotifyTabstripBubbleClosed() override; - void OnSplitCreated(const std::vector<int>& indices) override; - void OnSplitRemoved(const std::vector<int>& indices) override; - void OnSplitContentsChanged(const std::vector<int>& indices) override; - std::optional<int> GetModelIndexOf( - const TabSlotView* slot_view) const override; - Tab* GetTabAtModelIndex(int index) const override; - int GetTabCount() const override; - std::optional<int> GetModelIndexOfFirstNonClosingTab(Tab* tab) const override; - void UpdateHoverCard( - Tab* tab, - TabSlotController::HoverCardUpdateType update_type) override; - void HandleLongTap(ui::GestureEvent* event) override; - bool IsRectInContentArea(const gfx::Rect& rect) override; - std::optional<ZOrderableTabContainerElement> GetLeadingElementForZOrdering() - const override; - std::optional<ZOrderableTabContainerElement> GetTrailingElementForZOrdering() - const override; - void OnTabSlotAnimationProgressed(TabSlotView* view) override; - void OnTabCloseAnimationCompleted(Tab* tab) override; - void InvalidateIdealBounds() override; - void AnimateToIdealBounds() override; - bool IsAnimating() const override; - void CancelAnimation() override; - void CompleteAnimationAndLayout() override; - int GetAvailableWidthForTabContainer() const override; - void EnterTabClosingMode(std::optional<int> override_width, - CloseTabSource source) override; - void ExitTabClosingMode() override; - void SetTabSlotVisibility() override; - bool InTabClose() override; - TabGroupViews* GetGroupViews(tab_groups::TabGroupId group_id) const override; - std::map<tab_groups::TabGroupId, TabGroupHeader*> GetGroupHeaders() - const override; - const std::map<tab_groups::TabGroupId, std::unique_ptr<TabGroupViews>>& - get_group_views_for_testing() const override; - gfx::Rect GetIdealBounds(int model_index) const override; - gfx::Rect GetIdealBounds(tab_groups::TabGroupId group) const override; - - // views::View - gfx::Size GetMinimumSize() const override; - views::SizeBounds GetAvailableSize(const View* child) const override; - gfx::Size CalculatePreferredSize( - const views::SizeBounds& available_size) const override; - views::View* GetTooltipHandlerForPoint(const gfx::Point& point) override; - void Layout(PassKey) override; - void PaintChildren(const views::PaintInfo& paint_info) override; - void ChildPreferredSizeChanged(views::View* child) override; - - // BrowserRootView::DropTarget: - std::optional<BrowserRootView::DropIndex> GetDropIndex( - const ui::DropTargetEvent& event) override; - BrowserRootView::DropTarget* GetDropTarget( - gfx::Point loc_in_local_coords) override; - views::View* GetViewForDrop() override; - void HandleDragUpdate( - const std::optional<BrowserRootView::DropIndex>& index) override; - void HandleDragExited() override; - - // views::ViewTargeterDelegate: - views::View* TargetForRect(views::View* root, const gfx::Rect& rect) override; - - // Notifies this CompoundTabContainer that `tab_slot_view` must be animated to - // `target_bounds`. `pinned` indicates whether these bounds are relative to - // `pinned_tab_container_` or `unpinned_tab_container_`. - void UpdateAnimationTarget(TabSlotView* tab_slot_view, - gfx::Rect target_bounds, - TabPinned pinned); - - private: - int NumPinnedTabs() const; - - // Returns true iff `index` is a valid index in the joint viewmodel index - // space of the two TabContainers, i.e. if there's a Tab view that corresponds - // to `index`. These index spaces are different when the model has added or - // removed a tab but we haven't finished processing that change ourselves. - bool IsValidViewModelIndex(int index) const; - - // Moves the tab at `from_model_index` from whichever TabContainer currently - // holds it into the other TabContainer, inserting it into that container at - // the index that corresponds to `to_model_index`. - void TransferTabBetweenContainers(int from_model_index, int to_model_index); - - // Converts `ideal_bounds` from `unpinned_tab_container_`'s coordinate space - // into local coordinate space. References ideal bounds instead of current - // bounds to correctly account for any ongoing animations in the pinned tab - // container. - gfx::Rect ConvertUnpinnedContainerIdealBoundsToLocal( - gfx::Rect ideal_bounds) const; - - // Animates `tab` to `ideal_bounds` using `bounds_animator_`. Retargets an - // existing animation if one is already running. - void AnimateTabTo(Tab* tab, gfx::Rect ideal_bounds); - - // Returns the child TabContainer that should contain `view`. NB this can be - // different from `view->parent()` e.g. while `view` is being dragged. - TabContainer& GetTabContainerFor(TabSlotView* view) const; - - // Returns the child TabContainer that should handle text drag and drop events - // at `point_in_local_coords`. - TabContainer* GetTabContainerForDrop(gfx::Point point_in_local_coords) const; - - // Returns the child TabContainer that contains `point_in_local_coords`, or - // nullptr if neither contain it. If both contain it, chooses based on where - // `point_in_local_coords` is within the overlap area. - TabContainer* GetTabContainerAt(gfx::Point point_in_local_coords) const; - - // Returns the x position that `unpinned_tab_container_` should be at after - // any running animations finish. - int GetUnpinnedContainerIdealLeadingX() const; - - int GetAvailableWidthForUnpinnedTabContainer() const; - - // Computes the size of this compound container assuming the pinned and - // unpinned containers have the given sizes. - gfx::Size GetCombinedSizeForTabContainerSizes(gfx::Size pinned_size, - gfx::Size unpinned_size) const; - - // Private getter to retrieve the visible rect of the scroll container. - std::optional<gfx::Rect> GetVisibleContentRect() const; - - // Animates and scrolls the tab container from the start_edge to the - // target_edge. If the target_edge is beyond the tab strip it will be clamped - // bounds of the tabstrip. - void AnimateScrollToShowXCoordinate(const int start_edge, - const int target_edge); - - // Forwards the split changed event to the appropriate tab container. - using SplitChangedCallback = void (TabContainer::*)(const std::vector<int>&); - void OnSplitChanged(const std::vector<int>& indices, - SplitChangedCallback callback); - - const raw_ref<TabContainerController> controller_; - - // Adapts `pinned_tab_container_`'s interactions with the model to account for - // it only holding pinned tabs. - const std::unique_ptr<TabContainerController> - pinned_tab_container_controller_; - // The TabContainer that holds the pinned tabs. - const raw_ref<TabContainer, DanglingUntriaged> pinned_tab_container_; - - // Adapts `unpinned_tab_container_`'s interactions with the model to account - // for it only holding unpinned tabs. - const std::unique_ptr<TabContainerController> - unpinned_tab_container_controller_; - // The TabContainer that holds the unpinned tabs. - const raw_ref<TabContainer, DanglingUntriaged> unpinned_tab_container_; - - base::RepeatingCallback<int()> available_width_callback_; - - const raw_ptr<TabHoverCardController, DanglingUntriaged> - hover_card_controller_; - - // The View that is to be scrolled by `tab_scrolling_animation_`. May be - // nullptr in tests. - const raw_ptr<views::View> scroll_contents_view_; - - // Responsible for animating the scroll of the tab container. - std::unique_ptr<gfx::LinearAnimation> tab_scrolling_animation_; - - // Animates tabs between pinned and unpinned states. - views::BoundsAnimator bounds_animator_; - - // The sub-container that handled the last drag/drop update, if any. Used to - // ensure HandleDragExited is called when necessary. - raw_ptr<TabContainer, DanglingUntriaged> current_text_drop_target_ = nullptr; -}; - -#endif // CHROME_BROWSER_UI_VIEWS_TABS_COMPOUND_TAB_CONTAINER_H_
diff --git a/chrome/browser/ui/views/tabs/compound_tab_container_unittest.cc b/chrome/browser/ui/views/tabs/compound_tab_container_unittest.cc deleted file mode 100644 index db276ef..0000000 --- a/chrome/browser/ui/views/tabs/compound_tab_container_unittest.cc +++ /dev/null
@@ -1,761 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/compound_tab_container.h" - -#include <memory> - -#include "base/memory/raw_ref.h" -#include "chrome/browser/ui/layout_constants.h" -#include "chrome/browser/ui/tabs/tab_renderer_data.h" -#include "chrome/browser/ui/views/frame/browser_root_view.h" -#include "chrome/browser/ui/views/tabs/dragging/tab_drag_context.h" -#include "chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h" -#include "chrome/browser/ui/views/tabs/fake_tab_slot_controller.h" -#include "chrome/browser/ui/views/tabs/tab_group_header.h" -#include "chrome/test/views/chrome_views_test_base.h" -#include "tab_style_views.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "ui/base/dragdrop/drag_drop_types.h" -#include "ui/base/dragdrop/drop_target_event.h" -#include "ui/base/dragdrop/os_exchange_data.h" -#include "ui/base/metadata/metadata_header_macros.h" -#include "ui/base/metadata/metadata_impl_macros.h" -#include "ui/gfx/animation/animation_test_api.h" -#include "ui/views/view_utils.h" -#include "ui/views/widget/widget.h" - -namespace { - -class FakeTabDragContext : public TabDragContextBase { - METADATA_HEADER(FakeTabDragContext, TabDragContextBase) - public: - FakeTabDragContext() = default; - ~FakeTabDragContext() override = default; - - void UpdateAnimationTarget(TabSlotView* tab_slot_view, - const gfx::Rect& target_bounds) override {} - bool IsDragSessionActive() const override { return false; } - bool IsAnimatingDragEnd() const override { return false; } - void CompleteEndDragAnimations() override {} - int GetTabDragAreaWidth() const override { return width(); } -}; - -BEGIN_METADATA(FakeTabDragContext) -END_METADATA - -class FakeTabContainerController final : public TabContainerController { - public: - explicit FakeTabContainerController(TabStripController& tab_strip_controller) - : tab_strip_controller_(tab_strip_controller) {} - ~FakeTabContainerController() override = default; - - bool IsValidModelIndex(int index) const override { - return tab_strip_controller_->IsValidIndex(index); - } - - std::optional<int> GetActiveIndex() const override { - return tab_strip_controller_->GetActiveIndex(); - } - - int NumPinnedTabsInModel() const override { - for (size_t i = 0; - i < static_cast<size_t>(tab_strip_controller_->GetCount()); ++i) { - if (!tab_strip_controller_->IsTabPinned(static_cast<int>(i))) { - return static_cast<int>(i); - } - } - - // All tabs are pinned. - return tab_strip_controller_->GetCount(); - } - - void OnDropIndexUpdate(std::optional<int> index, bool drop_before) override { - tab_strip_controller_->OnDropIndexUpdate(index, drop_before); - } - - bool IsGroupCollapsed(const tab_groups::TabGroupId& group) const override { - return tab_strip_controller_->IsGroupCollapsed(group); - } - - std::optional<int> GetFirstTabInGroup( - const tab_groups::TabGroupId& group) const override { - return tab_strip_controller_->GetFirstTabInGroup(group); - } - - gfx::Range ListTabsInGroup( - const tab_groups::TabGroupId& group) const override { - return tab_strip_controller_->ListTabsInGroup(group); - } - - bool IsBrowserClosing() const override { - return tab_strip_controller_->IsBrowserClosing(); - } - - bool CanExtendDragHandle() const override { - return !tab_strip_controller_->IsFrameCondensed() && - !tab_strip_controller_->EverHasVisibleBackgroundTabShapes(); - } - - const views::View* GetTabClosingModeMouseWatcherHostView() const override { - return nullptr; - } - - bool IsAnimatingInTabStrip() const override { return false; } - - MOCK_METHOD(void, - UpdateAnimationTarget, - (TabSlotView*, gfx::Rect), - (override)); - - private: - const raw_ref<TabStripController> tab_strip_controller_; -}; - -void SetTabDataPinned(Tab* tab, TabPinned pinned) { - TabRendererData tab_data = tab->data(); - tab_data.pinned = pinned == TabPinned::kPinned; - tab->SetData(tab_data); -} -} // namespace - -class CompoundTabContainerTest : public ChromeViewsTestBase { - public: - CompoundTabContainerTest() - : animation_mode_reset_(gfx::AnimationTestApi::SetRichAnimationRenderMode( - gfx::Animation::RichAnimationRenderMode::FORCE_ENABLED)) {} - CompoundTabContainerTest(const CompoundTabContainerTest&) = delete; - CompoundTabContainerTest& operator=(const CompoundTabContainerTest&) = delete; - ~CompoundTabContainerTest() override = default; - - void SetUp() override { - ChromeViewsTestBase::SetUp(); - - tab_strip_controller_ = std::make_unique<FakeBaseTabStripController>(); - tab_container_controller_ = std::make_unique<FakeTabContainerController>( - *(tab_strip_controller_.get())); - ON_CALL(*tab_container_controller_, UpdateAnimationTarget) - .WillByDefault(testing::Return()); - tab_slot_controller_ = - std::make_unique<FakeTabSlotController>(tab_strip_controller_.get()); - - std::unique_ptr<TabDragContextBase> drag_context = - std::make_unique<FakeTabDragContext>(); - std::unique_ptr<CompoundTabContainer> tab_container = - std::make_unique<CompoundTabContainer>( - *tab_container_controller_.get(), nullptr /*hover_card_controller*/, - drag_context.get(), *(tab_slot_controller_.get()), - nullptr /*scroll_contents_view*/); - tab_container->SetAvailableWidthCallback(base::BindRepeating( - [](CompoundTabContainerTest* test) { - return test->tab_container_width_; - }, - this)); - - widget_ = - CreateTestWidget(views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET); - tab_container_ = - widget_->GetRootView()->AddChildView(std::move(tab_container)); - drag_context_ = - widget_->GetRootView()->AddChildView(std::move(drag_context)); - SetTabContainerWidth(1000); - - tab_slot_controller_->set_tab_container(tab_container_); - } - - void TearDown() override { - drag_context_ = nullptr; - tab_container_ = nullptr; - widget_.reset(); - tab_slot_controller_.reset(); - tab_container_controller_.reset(); - tab_strip_controller_.reset(); - - ChromeViewsTestBase::TearDown(); - } - - protected: - Tab* AddTab(int model_index, - TabPinned pinned, - std::optional<tab_groups::TabGroupId> group = std::nullopt, - TabActive active = TabActive::kInactive) { - std::vector<TabContainer::TabInsertionParams> tabs_params; - tabs_params.emplace_back(std::make_unique<Tab>(tab_slot_controller_.get()), - model_index, pinned); - - Tab* tab = tab_container_->AddTabs(std::move(tabs_params))[0]; - tab_strip_controller_->AddTab(model_index, active, pinned); - - if (active == TabActive::kActive) { - tab_slot_controller_->set_active_tab(tab); - } - - if (group) { - AddTabToGroup(model_index, group.value()); - } - - SetTabDataPinned(tab, pinned); - - return tab; - } - - // Removes the tab from the viewmodel, but leaves the Tab view itself around - // so it can animate closed. - void RemoveTab(int model_index) { - bool was_active = - tab_container_->GetTabAtModelIndex(model_index)->IsActive(); - tab_strip_controller_->RemoveTab(model_index); - tab_container_->RemoveTab(model_index, was_active); - } - - void AddTabToGroup(int model_index, tab_groups::TabGroupId group) { - tab_container_->GetTabAtModelIndex(model_index)->SetGroup(group); - tab_strip_controller_->AddTabToGroup(model_index, group); - - const auto& group_views = tab_container_->get_group_views_for_testing(); - if (group_views.find(group) == group_views.end()) { - tab_container_->OnGroupCreated(group); - } - - tab_container_->OnGroupMoved(group); - } - - void SetTabContainerWidth(int width) { - tab_container_width_ = width; - gfx::Size size(tab_container_width_, GetLayoutConstant(TAB_STRIP_HEIGHT)); - widget_->SetSize(size); - drag_context_->SetSize(size); - tab_container_->SetSize(size); - } - - int GetWidthOfActiveTab() { - return tab_container_ - ->GetTabAtModelIndex(tab_strip_controller_->GetActiveIndex().value()) - ->width(); - } - - std::unique_ptr<FakeBaseTabStripController> tab_strip_controller_; - std::unique_ptr<FakeTabContainerController> tab_container_controller_; - std::unique_ptr<FakeTabSlotController> tab_slot_controller_; - raw_ptr<TabDragContextBase> drag_context_; - raw_ptr<CompoundTabContainer> tab_container_; - std::unique_ptr<views::Widget> widget_; - - // Used to force animation on, so that tabs aren't deleted immediately on - // removal. - gfx::AnimationTestApi::RenderModeResetter animation_mode_reset_; - - int tab_container_width_ = 0; -}; - -TEST_F(CompoundTabContainerTest, PinnedTabReparents) { - // Start with one tab, initially pinned. - Tab* const tab = AddTab(0, TabPinned::kPinned); - TabContainer* const pinned_container = - views::AsViewClass<TabContainer>(tab->parent()); - ASSERT_NE(pinned_container, nullptr); - - // Unpin the tab and it should move to the compound container for animation. - SetTabDataPinned(tab, TabPinned::kUnpinned); - tab_container_->SetTabPinned(0, TabPinned::kUnpinned); - EXPECT_EQ(tab->parent(), tab_container_); - - // Complete the animation and it should move to the other TabContainer. - tab_container_->CompleteAnimationAndLayout(); - TabContainer* const unpinned_container = - views::AsViewClass<TabContainer>(tab->parent()); - ASSERT_NE(unpinned_container, nullptr); - EXPECT_NE(pinned_container, unpinned_container); - - // Re-pin the tab and it should animate in the compound container again. - SetTabDataPinned(tab, TabPinned::kPinned); - tab_container_->SetTabPinned(0, TabPinned::kPinned); - EXPECT_EQ(tab->parent(), tab_container_); - - // Complete animation and it should be back in the pinned container. - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(tab->parent(), pinned_container); -} - -TEST_F(CompoundTabContainerTest, PinDuringUnpinAnimation) { - // Start with one tab, initially pinned. - Tab* const tab = AddTab(0, TabPinned::kPinned); - TabContainer* const pinned_container = - views::AsViewClass<TabContainer>(tab->parent()); - ASSERT_NE(pinned_container, nullptr); - - // Unpin the tab and it should move to the compound container for animation. - SetTabDataPinned(tab, TabPinned::kUnpinned); - tab_container_->SetTabPinned(0, TabPinned::kUnpinned); - EXPECT_EQ(tab->parent(), tab_container_); - - // Re-pin the tab and it should still be in the compound container. - SetTabDataPinned(tab, TabPinned::kPinned); - tab_container_->SetTabPinned(0, TabPinned::kPinned); - EXPECT_EQ(tab->parent(), tab_container_); - - // Complete animation and it should be back in the pinned container. - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(tab->parent(), pinned_container); -} - -TEST_F(CompoundTabContainerTest, MoveTabsWithinContainers) { - // Start with two tabs each pinned and unpinned. - const Tab* const tab0 = AddTab(0, TabPinned::kPinned); - const Tab* const tab1 = AddTab(1, TabPinned::kPinned); - const Tab* const tab2 = AddTab(2, TabPinned::kUnpinned); - const Tab* const tab3 = AddTab(3, TabPinned::kUnpinned); - - // Swap each pair. - tab_container_->MoveTab(0, 1); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(0), tab1); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(1), tab0); - - tab_container_->MoveTab(2, 3); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(2), tab3); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(3), tab2); - - // And back again. - tab_container_->MoveTab(1, 0); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(0), tab0); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(1), tab1); - - tab_container_->MoveTab(3, 2); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(2), tab2); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(3), tab3); -} - -TEST_F(CompoundTabContainerTest, MoveTabBetweenContainers) { - // Start with one pinned tab and two unpinned tabs. - const views::View* const pinned_container = - AddTab(0, TabPinned::kPinned)->parent(); - const views::View* const unpinned_container = - AddTab(1, TabPinned::kUnpinned)->parent(); - Tab* const moving_tab = AddTab(2, TabPinned::kUnpinned); - - // Pin `moving_tab` as part of a move. - SetTabDataPinned(moving_tab, TabPinned::kPinned); - tab_container_->MoveTab(2, 1); - // It should be in the compound container, animating. - EXPECT_EQ(moving_tab->parent(), tab_container_); - EXPECT_TRUE(tab_container_->IsAnimating()); - - // Finish animating and it should be pinned and at index 1. - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(moving_tab->parent(), pinned_container); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(1), moving_tab); - - // Move it to index 0, then unpin it as part of another move. - tab_container_->MoveTab(1, 0); - SetTabDataPinned(moving_tab, TabPinned::kUnpinned); - tab_container_->MoveTab(0, 1); - // It should be in the compound container, animating. - EXPECT_EQ(moving_tab->parent(), tab_container_); - EXPECT_TRUE(tab_container_->IsAnimating()); - - // It should be unpinned and at index 1. - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(moving_tab->parent(), unpinned_container); - EXPECT_EQ(tab_container_->GetTabAtModelIndex(1), moving_tab); -} - -TEST_F(CompoundTabContainerTest, RemoveTab) { - // Start with two pinned tabs and two unpinned tabs. - AddTab(0, TabPinned::kPinned); - AddTab(1, TabPinned::kPinned); - AddTab(2, TabPinned::kUnpinned); - AddTab(3, TabPinned::kUnpinned); - - // Remove the last tab. - RemoveTab(3); - EXPECT_EQ(tab_container_->GetTabCount(), 3); - // Remove the middle tab. - RemoveTab(1); - EXPECT_EQ(tab_container_->GetTabCount(), 2); - // Remove the first tab. - RemoveTab(0); - EXPECT_EQ(tab_container_->GetTabCount(), 1); - // Remove the only remaining tab. - RemoveTab(0); - EXPECT_EQ(tab_container_->GetTabCount(), 0); -} - -TEST_F(CompoundTabContainerTest, GetIndexOfFirstNonClosingTab) { - // Test that CompoundTabContainer can identify the tab events should be - // forwarded to in case one is closing. - - // Create a tabstrip with four tabs. - Tab* first_pinned = AddTab(0, TabPinned::kPinned); - AddTab(1, TabPinned::kPinned); - Tab* first_unpinned = AddTab(2, TabPinned::kUnpinned); - AddTab(3, TabPinned::kUnpinned); - - // RemoveTab below *starts* the tab removal process, but leaves the view - // around to be animated closed. - - // Remove `first_unpinned`, so the next non-closing tab is the other unpinned - // tab, i.e. both tabs are in `unpinned_tab_container_`. - RemoveTab(2); - EXPECT_EQ(tab_container_->GetModelIndexOfFirstNonClosingTab(first_unpinned), - 2); - - // Both tabs are in `pinned_tab_container_`. - RemoveTab(0); - EXPECT_EQ(tab_container_->GetModelIndexOfFirstNonClosingTab(first_pinned), 0); - - // One tab is in each container. - RemoveTab(0); - EXPECT_EQ(tab_container_->GetModelIndexOfFirstNonClosingTab(first_pinned), 0); - - // There is no next tab, and this one is unpinned. - RemoveTab(0); - EXPECT_EQ(tab_container_->GetModelIndexOfFirstNonClosingTab(first_unpinned), - std::nullopt); - - // There is no next tab, and this one is pinned. - EXPECT_EQ(tab_container_->GetModelIndexOfFirstNonClosingTab(first_pinned), - std::nullopt); -} - -TEST_F(CompoundTabContainerTest, ExitsClosingModeAtStandardWidth) { - AddTab(0, TabPinned::kUnpinned, std::nullopt, TabActive::kActive); - - // Create just enough tabs so tabs are not full size. - const int standard_width = - TabStyle::Get()->GetStandardWidth(/*is_split*/ false); - while (tab_container_->GetTabAtModelIndex(0)->width() == standard_width) { - AddTab(0, TabPinned::kUnpinned); - tab_container_->CompleteAnimationAndLayout(); - } - - // The test closes two tabs, we need at least one left over after that. - ASSERT_GE(tab_container_->GetTabCount(), 3); - - // Enter tab closing mode manually; this would normally happen as the result - // of a mouse/touch-based tab closure action. - tab_container_->EnterTabClosingMode(std::nullopt, CloseTabSource::kFromMouse); - - // Close the second-to-last tab; tab closing mode should remain active, - // constraining tab widths to below full size. - RemoveTab(tab_container_->GetTabCount() - 2); - tab_container_->CompleteAnimationAndLayout(); - ASSERT_LT(GetWidthOfActiveTab(), standard_width); - - // Close the last tab; tab closing mode should allow tabs to resize to full - // size. - RemoveTab(tab_container_->GetTabCount() - 1); - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(GetWidthOfActiveTab(), standard_width); -} - -TEST_F(CompoundTabContainerTest, ClosingPinnedTabsEngagesClosingMode) { - // This test verifies that tab closing mode engages correctly when closing a - // pinned tab. - - // Add two unpinned tabs to be governed by closing mode. - AddTab(0, TabPinned::kUnpinned, std::nullopt, TabActive::kActive); - AddTab(1, TabPinned::kUnpinned, std::nullopt, TabActive::kInactive); - - // Create just enough (pinned) tabs so the active tab is not full size. - const int standard_width = - TabStyle::Get()->GetStandardWidth(/*is_split*/ false); - while (tab_container_->GetTabAtModelIndex(tab_container_->GetTabCount() - 1) - ->width() == standard_width) { - AddTab(0, TabPinned::kPinned, std::nullopt, TabActive::kInactive); - tab_container_->CompleteAnimationAndLayout(); - } - - // The test closes two tabs, we need at least one left over after that. - ASSERT_GE(tab_container_->GetTabCount(), 3); - - // Enter tab closing mode manually; this would normally happen as the result - // of a mouse/touch-based tab closure action. - tab_container_->EnterTabClosingMode(std::nullopt, CloseTabSource::kFromMouse); - - // Close the third-to-last tab, which is the last pinned tab; tab closing mode - // should constrain tab widths to below full size. - RemoveTab(tab_container_->GetTabCount() - 3); - tab_container_->CompleteAnimationAndLayout(); - ASSERT_LT(GetWidthOfActiveTab(), standard_width); - - // Close the last tab, which is the inactive unpinned tab; tab closing mode - // should allow tabs to resize to full size. - RemoveTab(tab_container_->GetTabCount() - 1); - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(GetWidthOfActiveTab(), standard_width); -} - -TEST_F(CompoundTabContainerTest, ExitsClosingModeWhenClosingLastUnpinnedTab) { - // Add two unpinned tabs to be governed by closing mode. - AddTab(0, TabPinned::kUnpinned, std::nullopt, TabActive::kInactive); - AddTab(1, TabPinned::kUnpinned, std::nullopt, TabActive::kActive); - - // Create just enough (pinned) tabs so the active tab is not full size. - const int standard_width = - TabStyle::Get()->GetStandardWidth(/*is_split*/ false); - while (tab_container_->GetTabAtModelIndex(tab_container_->GetTabCount() - 1) - ->width() == standard_width) { - AddTab(0, TabPinned::kPinned); - tab_container_->CompleteAnimationAndLayout(); - } - - // The test closes two tabs, we need at least one left over after that. - ASSERT_GE(tab_container_->GetTabCount(), 3); - - // Enter tab closing mode manually; this would normally happen as the result - // of a mouse/touch-based tab closure action. - tab_container_->EnterTabClosingMode(std::nullopt, CloseTabSource::kFromMouse); - - // Close the second-to-last tab, which is the inactive unpinned tab; tab - // closing mode should remain active, constraining tab widths to below full - // size. - RemoveTab(tab_container_->GetTabCount() - 2); - tab_container_->CompleteAnimationAndLayout(); - ASSERT_LT(GetWidthOfActiveTab(), standard_width); - - // Close the last tab, which is the active unpinned tab; tab closing mode - // should exit. - RemoveTab(tab_container_->GetTabCount() - 1); - tab_container_->CompleteAnimationAndLayout(); - EXPECT_FALSE(tab_container_->InTabClose()); -} - -TEST_F(CompoundTabContainerTest, UpdateAnimationTarget) { - using testing::Return; - - gfx::Rect animation_target(10, 10); - - // Start with one unpinned tab. - Tab* tab = AddTab(0, TabPinned::kUnpinned); - // Verify that animation target updates for unpinned container are unchanged - // when there are no pinned tabs. - EXPECT_CALL(*tab_container_controller_, - UpdateAnimationTarget(testing::_, animation_target)) - .WillOnce(Return()); - tab_container_->UpdateAnimationTarget(tab, animation_target, - TabPinned::kUnpinned); - - // Add a pinned tab. - AddTab(0, TabPinned::kPinned); - // Verify that animation target updates for pinned container are unchanged. - EXPECT_CALL(*tab_container_controller_, - UpdateAnimationTarget(testing::_, animation_target)) - .WillOnce(Return()); - tab_container_->UpdateAnimationTarget(tab, animation_target, - TabPinned::kPinned); - - // Verify that animation target updates for unpinned container are adjusted - // when there are pinned tabs. - EXPECT_CALL(*tab_container_controller_, - UpdateAnimationTarget(testing::_, testing::Ne(animation_target))) - .WillOnce(Return()); - tab_container_->UpdateAnimationTarget(tab, animation_target, - TabPinned::kUnpinned); -} - -TEST_F(CompoundTabContainerTest, SubContainersOverlap) { - // With only pinned tabs, the compound container should match the pinned - // container's width. - views::View* const pinned_container = AddTab(0, TabPinned::kPinned)->parent(); - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(tab_container_->GetPreferredSize().width(), - pinned_container->GetPreferredSize().width()); - EXPECT_EQ(tab_container_->GetMinimumSize().width(), - pinned_container->GetMinimumSize().width()); - EXPECT_EQ(pinned_container->bounds().width(), - pinned_container->GetPreferredSize().width()); - - // With both subcontainers nonempty, the compound container's width should be - // less than the sum of its parts. - views::View* const unpinned_container = - AddTab(1, TabPinned::kUnpinned)->parent(); - tab_container_->CompleteAnimationAndLayout(); - EXPECT_LT(tab_container_->GetPreferredSize().width(), - pinned_container->GetPreferredSize().width() + - unpinned_container->GetPreferredSize().width()); - EXPECT_LT(tab_container_->GetMinimumSize().width(), - pinned_container->GetMinimumSize().width() + - unpinned_container->GetMinimumSize().width()); - // And the two containers should overlap. - EXPECT_LT(unpinned_container->bounds().x(), - pinned_container->bounds().right()); - - // Same as case 1, but reversed. - RemoveTab(0); - tab_container_->CompleteAnimationAndLayout(); - EXPECT_EQ(tab_container_->GetPreferredSize().width(), - unpinned_container->GetPreferredSize().width()); - EXPECT_EQ(tab_container_->GetMinimumSize().width(), - unpinned_container->GetMinimumSize().width()); - EXPECT_EQ(unpinned_container->bounds().width(), - unpinned_container->GetPreferredSize().width()); -} - -TEST_F(CompoundTabContainerTest, AvailableWidth) { - views::View* const pinned_container = AddTab(0, TabPinned::kPinned)->parent(); - views::View* const unpinned_container = - AddTab(1, TabPinned::kUnpinned)->parent(); - - // `pinned_container` gets as much space as we can give it - in this test - // harness, that's `tab_container_`'s width. - EXPECT_EQ(tab_container_->GetAvailableSize(pinned_container).width().value(), - tab_container_->width()); - - // `unpinned_container` doesn't, because `pinned_container` has some reserved. - EXPECT_LT( - tab_container_->GetAvailableSize(unpinned_container).width().value(), - tab_container_->width()); - - // Because of the overlap, `unpinned_container` should have slightly more - // available width than `(total available - pinned_container reserved width)`. - EXPECT_GT( - tab_container_->GetAvailableSize(unpinned_container).width().value(), - tab_container_->width() - pinned_container->GetPreferredSize().width()); -} - -TEST_F(CompoundTabContainerTest, GetEventAndTooltipHandlerForOverlappingArea) { - Tab* const pinned_tab = AddTab(0, TabPinned::kPinned); - views::View* const pinned_container = pinned_tab->parent(); - Tab* const unpinned_tab = AddTab(1, TabPinned::kUnpinned); - views::View* const unpinned_container = unpinned_tab->parent(); - tab_container_->CompleteAnimationAndLayout(); - - // Points squarely in each tab should be handled by the tab. - EXPECT_EQ(pinned_tab, tab_container_->GetEventHandlerForPoint( - pinned_container->bounds().CenterPoint())); - LOG(ERROR) << tab_container_ - ->GetEventHandlerForPoint( - pinned_container->bounds().CenterPoint()) - ->GetClassName(); - EXPECT_EQ(pinned_tab, tab_container_->GetTooltipHandlerForPoint( - pinned_container->bounds().CenterPoint())); - EXPECT_EQ(unpinned_tab, tab_container_->GetEventHandlerForPoint( - unpinned_container->bounds().CenterPoint())); - EXPECT_EQ(unpinned_tab, tab_container_->GetTooltipHandlerForPoint( - unpinned_container->bounds().CenterPoint())); - - auto averagePoint = [](gfx::Point point, gfx::Point other) { - return gfx::Point((point.x() + other.x()) / 2, (point.y() + other.y()) / 2); - }; - - const gfx::Point pinned_container_right = - pinned_container->bounds().right_center(); - const gfx::Point unpinned_container_left = - unpinned_container->bounds().left_center(); - const gfx::Point center = - averagePoint(pinned_container_right, unpinned_container_left); - - // A point in the overlap area, but left of the tab divider between the two - // containers, should go to the pinned container. - const gfx::Point pinned_overlap_test_point = - averagePoint(center, unpinned_container_left); - EXPECT_EQ(pinned_tab, - tab_container_->GetEventHandlerForPoint(pinned_overlap_test_point)); - EXPECT_EQ(pinned_tab, tab_container_->GetTooltipHandlerForPoint( - pinned_overlap_test_point)); - - // A point in the overlap area, but right of the tab divider between the two - // containers, should go to the unpinned container. - const gfx::Point unpinned_overlap_test_point = - averagePoint(center, pinned_container_right); - EXPECT_EQ(unpinned_tab, tab_container_->GetEventHandlerForPoint( - unpinned_overlap_test_point)); - EXPECT_EQ(unpinned_tab, tab_container_->GetTooltipHandlerForPoint( - unpinned_overlap_test_point)); -} - -namespace { -ui::DropTargetEvent MakeEventForDragLocation(const gfx::Point& p) { - return ui::DropTargetEvent({}, gfx::PointF(p), {}, - ui::DragDropTypes::DRAG_LINK); -} -} // namespace - -TEST_F(CompoundTabContainerTest, DropIndexForDragLocationIsCorrect) { - auto group = tab_groups::TabGroupId::GenerateNew(); - const Tab* const tab1 = - AddTab(0, TabPinned::kPinned, std::nullopt, TabActive::kActive); - const Tab* const tab2 = AddTab(1, TabPinned::kUnpinned, group); - const Tab* const tab3 = AddTab(2, TabPinned::kUnpinned, group); - tab_container_->CompleteAnimationAndLayout(); - - const TabGroupHeader* const group_header = - tab_container_->GetGroupViews(group)->header(); - - using DropIndex = BrowserRootView::DropIndex; - using BrowserRootView::DropIndex::GroupInclusion::kDontIncludeInGroup; - using BrowserRootView::DropIndex::GroupInclusion::kIncludeInGroup; - using BrowserRootView::DropIndex::RelativeToIndex::kInsertBeforeIndex; - using BrowserRootView::DropIndex::RelativeToIndex::kReplaceIndex; - - const auto bounds_in_ctc = [this](const views::View* view) { - return ToEnclosingRect(views::View::ConvertRectToTarget( - view, tab_container_, gfx::RectF(view->GetLocalBounds()))); - }; - - // Check dragging near the edge of each tab. - EXPECT_EQ((DropIndex{.index = 0, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(tab1).left_center() + gfx::Vector2d(1, 0)))); - EXPECT_EQ((DropIndex{.index = 1, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(tab1).right_center() + gfx::Vector2d(-1, 0)))); - EXPECT_EQ((DropIndex{.index = 1, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(tab2).left_center() + gfx::Vector2d(1, 0)))); - EXPECT_EQ((DropIndex{.index = 2, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(tab2).right_center() + gfx::Vector2d(-1, 0)))); - EXPECT_EQ((DropIndex{.index = 2, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(tab3).left_center() + gfx::Vector2d(1, 0)))); - EXPECT_EQ((DropIndex{.index = 3, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(tab3).right_center() + gfx::Vector2d(-1, 0)))); - - // Check dragging in the center of each tab. - EXPECT_EQ((DropIndex{.index = 0, - .relative_to_index = kReplaceIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex( - MakeEventForDragLocation(bounds_in_ctc(tab1).CenterPoint()))); - EXPECT_EQ((DropIndex{.index = 1, - .relative_to_index = kReplaceIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex( - MakeEventForDragLocation(bounds_in_ctc(tab2).CenterPoint()))); - EXPECT_EQ((DropIndex{.index = 2, - .relative_to_index = kReplaceIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex( - MakeEventForDragLocation(bounds_in_ctc(tab3).CenterPoint()))); - - // Check dragging over group header. - // The left half of the header should drop outside the group. - EXPECT_EQ( - (DropIndex{.index = 1, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kDontIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(group_header).CenterPoint() + gfx::Vector2d(-1, 0)))); - // The right half of the header should drop inside the group. - EXPECT_EQ( - (DropIndex{.index = 1, - .relative_to_index = kInsertBeforeIndex, - .group_inclusion = kIncludeInGroup}), - tab_container_->GetDropIndex(MakeEventForDragLocation( - bounds_in_ctc(group_header).CenterPoint() + gfx::Vector2d(1, 0)))); -}
diff --git a/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.cc b/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.cc index a1ee2b5..f0718ef9 100644 --- a/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.cc +++ b/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.cc
@@ -52,34 +52,6 @@ start_point_in_screen) .x()), last_point_in_screen_(start_point_in_screen) { - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip) && - base::FeatureList::IsEnabled(tabs::kScrollableTabStripWithDragging)) { - const int drag_with_scroll_mode = base::GetFieldTrialParamByFeatureAsInt( - tabs::kScrollableTabStripWithDragging, - tabs::kTabScrollingWithDraggingModeName, - static_cast<int>( - TabStripScrollSession::ScrollWithDragStrategy::kConstantSpeed)); - - switch (drag_with_scroll_mode) { - case static_cast<int>( - TabStripScrollSession::ScrollWithDragStrategy::kConstantSpeed): - tab_strip_scroll_session_ = - std::make_unique<TabStripScrollSessionWithTimer>( - *this, TabStripScrollSessionWithTimer::ScrollSessionTimerType:: - kConstantTimer); - break; - case static_cast<int>( - TabStripScrollSession::ScrollWithDragStrategy::kVariableSpeed): - tab_strip_scroll_session_ = - std::make_unique<TabStripScrollSessionWithTimer>( - *this, TabStripScrollSessionWithTimer::ScrollSessionTimerType:: - kVariableTimer); - break; - default: - NOTREACHED(); - } - } - MoveAttachedImpl(start_point_in_screen, true); } @@ -116,10 +88,6 @@ return attached_context_; } -views::ScrollView* DraggingTabsSession::GetScrollView() { - return attached_context_->GetScrollView(); -} - void DraggingTabsSession::MoveAttachedImpl(gfx::Point point_in_screen, bool just_attached) { last_point_in_screen_ = point_in_screen; @@ -204,10 +172,6 @@ } } - if (tab_strip_scroll_session_) { - tab_strip_scroll_session_->MaybeStart(); - } - if (!did_layout) { attached_context_->LayoutDraggedViewsAt( views, drag_data_.source_view_drag_data()->attached_view, @@ -357,8 +321,6 @@ // window. In this case, since the dragged tabs can't move further right in // the tabstrip, it will never go "beyond" the left_group and therefore // never leave it unless we add this check. See crbug.com/1134376. - // TODO(crbug.com/40842551): Update this to work better with Tab Scrolling - // once dragging near the end of the tabstrip is cleaner. if (tab_bounds_in_drag_context_coords(selected_unpinned.back()).right() >= attached_context_->TabDragAreaEndX()) { return std::nullopt;
diff --git a/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.h b/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.h index cddf52f7..f0cf1139 100644 --- a/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.h +++ b/chrome/browser/ui/views/tabs/dragging/dragging_tabs_session.h
@@ -8,14 +8,13 @@ #include "base/memory/raw_ptr.h" #include "chrome/browser/ui/views/tabs/dragging/drag_session_data.h" #include "chrome/browser/ui/views/tabs/dragging/tab_drag_context.h" -#include "chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.h" #include "components/tab_groups/tab_group_id.h" #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/rect.h" // Handles dragging tabs within a single TabDragContext on behalf of // TabDragController. -class DraggingTabsSession final : public TabDragWithScrollManager { +class DraggingTabsSession final { public: // `drag_data` is a copy of the drag configuration for the full session. // `attached_context` is the context in which the tabs are being dragged. @@ -29,14 +28,12 @@ float offset_to_width_ratio_, bool initial_move, gfx::Point point_in_screen); - ~DraggingTabsSession() final; + ~DraggingTabsSession(); - // TabDragWithScrollManager: - void MoveAttached(gfx::Point point_in_screen) override; - gfx::Rect GetEnclosingRectForDraggedTabs() override; - gfx::Point GetLastPointInScreen() override; - views::View* GetAttachedContext() override; - views::ScrollView* GetScrollView() override; + void MoveAttached(gfx::Point point_in_screen); + gfx::Rect GetEnclosingRectForDraggedTabs(); + gfx::Point GetLastPointInScreen(); + views::View* GetAttachedContext(); private: void MoveAttachedImpl(gfx::Point point_in_screen, bool just_attached); @@ -77,10 +74,6 @@ int last_move_attached_context_loc_; gfx::Point last_point_in_screen_; - - // the scrolling session that handles scrolling when the tabs are dragged - // to the scrollable regions of the tab_strip. - std::unique_ptr<TabStripScrollSession> tab_strip_scroll_session_ = nullptr; }; #endif // CHROME_BROWSER_UI_VIEWS_TABS_DRAGGING_DRAGGING_TABS_SESSION_H_
diff --git a/chrome/browser/ui/views/tabs/dragging/tab_drag_controller_interactive_uitest.cc b/chrome/browser/ui/views/tabs/dragging/tab_drag_controller_interactive_uitest.cc index b752d29..03b4aac0 100644 --- a/chrome/browser/ui/views/tabs/dragging/tab_drag_controller_interactive_uitest.cc +++ b/chrome/browser/ui/views/tabs/dragging/tab_drag_controller_interactive_uitest.cc
@@ -752,8 +752,7 @@ class DetachToBrowserTabDragControllerTest : public TabDragControllerInteractiveTestMixin<TabDragControllerTest>, - public ::testing::WithParamInterface< - testing::tuple<bool, bool, const char*>> { + public ::testing::WithParamInterface<testing::tuple<bool, const char*>> { public: DetachToBrowserTabDragControllerTest() { std::vector<base::test::FeatureRefAndParams> enabled_features_with_params; @@ -780,9 +779,6 @@ disabled_features.push_back(features::kCalculateNativeWinOcclusion); #endif // BUILDFLAG(IS_WIN) if (std::get<0>(GetParam())) { - enabled_features_with_params.push_back({tabs::kSplitTabStrip, {}}); - } - if (std::get<1>(GetParam())) { enabled_features_with_params.push_back( {features::kTearOffWebAppTabOpensWebAppWindow, {}}); } @@ -811,7 +807,7 @@ } InputSource input_source() override { - return UNSAFE_TODO(strstr(std::get<2>(GetParam()), "mouse")) + return UNSAFE_TODO(strstr(std::get<1>(GetParam()), "mouse")) ? InputSource::INPUT_SOURCE_MOUSE : InputSource::INPUT_SOURCE_TOUCH; } @@ -2261,7 +2257,6 @@ TabDragging, TabDragDelegateTest, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse", "touch"))); #else @@ -2269,7 +2264,6 @@ TabDragging, TabDragDelegateTest, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse"))); #endif // BUILDFLAG(IS_CHROMEOS) @@ -3883,7 +3877,7 @@ // Check that right type of browser window is opened, depending on the value // of kTearOffWebAppTabOpensWebAppWindow experiment. EXPECT_EQ(new_browser->GetType(), - std::get<1>(GetParam()) + std::get<0>(GetParam()) ? BrowserWindowInterface::Type::TYPE_APP : BrowserWindowInterface::Type::TYPE_NORMAL); } @@ -3892,7 +3886,6 @@ TabDragging, DetachTabWithUrlControlledByWebApp, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Bool(), /*input_source=*/::testing::Values("mouse"))); @@ -4056,55 +4049,6 @@ } #endif // !BUILDFLAG(IS_MAC) -class DetachToBrowserTabDragControllerTestWithScrollableTabStripEnabled - : public DetachToBrowserTabDragControllerTest { - public: - DetachToBrowserTabDragControllerTestWithScrollableTabStripEnabled() { - scoped_feature_list_.InitWithFeatures({tabs::kScrollableTabStrip}, {}); - } - - private: - base::test::ScopedFeatureList scoped_feature_list_; -}; - -// Disabling on macOS due to DCHECK crashes; see https://crbug.com/1183043. -#if BUILDFLAG(IS_LINUX) || (BUILDFLAG(IS_MAC) && DCHECK_IS_ON()) -#define MAYBE_DraggingRightExpandsTabStripSize \ - DISABLED_DraggingRightExpandsTabStripSize -#else -#define MAYBE_DraggingRightExpandsTabStripSize DraggingRightExpandsTabStripSize -#endif -// Creates a browser with two tabs and drags the rightmost tab. Given the -// browser window is large enough, the tabstrip should expand to accommodate -// this tab. Note: There must be at least two tabs because dragging a singular -// tab will drag the window. -// Disabled for Linux due to test dragging flakiness. -IN_PROC_BROWSER_TEST_P( - DetachToBrowserTabDragControllerTestWithScrollableTabStripEnabled, - MAYBE_DraggingRightExpandsTabStripSize) { - TabStrip* tab_strip = GetTabStripForBrowser(browser()); - - AddTabsAndResetBrowser(browser(), 1); - - const TabStyle* tab_style = TabStyle::Get(); - // We must ensure that we set the bounds of the browser window such that it is - // wide enough to allow the tab strip to expand to accommodate this tab. - browser()->window()->SetBounds(gfx::Rect( - 0, 0, tab_style->GetStandardWidth(/*is_split*/ false) * 5, 400)); - - const int tab_strip_width = tab_strip->width(); - ASSERT_TRUE(PressInputAtCenter(tab_strip->tab_at(1))); - ASSERT_TRUE(DragInputToCenter( - tab_strip->tab_at(1), - gfx::Vector2d(tab_style->GetStandardWidth(/*is_split*/ false), 0))); - BrowserView::GetBrowserViewForBrowser(browser()) - ->GetWidget() - ->LayoutRootViewIfNecessary(); - EXPECT_EQ(tab_strip_width + tab_style->GetStandardWidth(/*is_split*/ false), - tab_strip->width()); - ASSERT_TRUE(ReleaseInput()); -} - namespace { // Invoked from the nested run loop. @@ -5940,14 +5884,6 @@ TabDragging, DetachToBrowserTabDragControllerTest, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), - /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), - /*input_source=*/::testing::Values("mouse", "touch"))); -INSTANTIATE_TEST_SUITE_P( - TabDragging, - DetachToBrowserTabDragControllerTestWithScrollableTabStripEnabled, - ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse", "touch"))); #else @@ -5955,14 +5891,6 @@ TabDragging, DetachToBrowserTabDragControllerTest, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), - /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Bool(), - /*input_source=*/::testing::Values("mouse"))); -INSTANTIATE_TEST_SUITE_P( - TabDragging, - DetachToBrowserTabDragControllerTestWithScrollableTabStripEnabled, - ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Bool(), /*input_source=*/::testing::Values("mouse"))); #endif // BUILDFLAG(IS_CHROMEOS) @@ -5972,49 +5900,42 @@ TabDragging, DetachToBrowserInSeparateDisplayTabDragControllerTest, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse"))); INSTANTIATE_TEST_SUITE_P( TabDragging, DetachToBrowserTabDragControllerTestTouch, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("touch"))); INSTANTIATE_TEST_SUITE_P( TabDragging, DifferentDeviceScaleFactorDisplayTabDragControllerTest, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse"))); INSTANTIATE_TEST_SUITE_P( TabDragging, DetachToBrowserInSeparateDisplayAndCancelTabDragControllerTest, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse"))); INSTANTIATE_TEST_SUITE_P( TabDragging, DetachToBrowserTabDragControllerTestWithTabbedSystemApp, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse", "touch"))); INSTANTIATE_TEST_SUITE_P( TabDragging, DetachToBrowserTabDragControllerTestWithOnTaskLocked, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse", "touch"))); INSTANTIATE_TEST_SUITE_P( TabDragging, DetachToBrowserTabDragControllerTestWithTabbedWebApp, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse", "touch"))); #elif !BUILDFLAG(IS_MAC) @@ -6022,7 +5943,6 @@ TabDragging, DetachToBrowserTabDragControllerTestWithTabbedWebApp, ::testing::Combine( - /*kSplitTabStrip=*/::testing::Bool(), /*kTearOffWebAppTabOpensWebAppWindow=*/::testing::Values(false), /*input_source=*/::testing::Values("mouse"))); #endif
diff --git a/chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.cc b/chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.cc deleted file mode 100644 index 9f96f4a..0000000 --- a/chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.cc +++ /dev/null
@@ -1,184 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.h" - -#include <algorithm> - -#include "base/check.h" -#include "chrome/browser/ui/views/tabs/dragging/tab_drag_controller.h" -#include "ui/gfx/geometry/point.h" -#include "ui/views/controls/scroll_view.h" - -namespace { -// Duration after which the repeating timer event is called -const base::TimeDelta kScrollTimerDelay = base::Milliseconds(10); -// This is used to calculate the offset but is also helpful -// for different minimum sizes of tabs. -const int kNumberOfTabsScrolledPerSecond = 4; -} // namespace - -TabStripScrollSession::TabStripScrollSession( - TabDragWithScrollManager& tab_drag_with_scroll_manager) - : tab_drag_with_scroll_manager_(tab_drag_with_scroll_manager) {} - -TabStripScrollSession::~TabStripScrollSession() = default; - -TabStripScrollSessionWithTimer::TabStripScrollSessionWithTimer( - TabDragWithScrollManager& tab_drag_with_scroll_manager, - ScrollSessionTimerType timer_type) - : TabStripScrollSession(tab_drag_with_scroll_manager), - scroll_timer_(std::make_unique<base::RepeatingTimer>()), - timer_type_(timer_type) {} - -TabStripScrollSessionWithTimer::~TabStripScrollSessionWithTimer() = default; - -void TabStripScrollSessionWithTimer::MaybeStart() { - if (!tab_drag_with_scroll_manager_->GetAttachedContext() || IsRunning()) { - return; - } - - const TabStripScrollSession::TabScrollDirection scroll_direction = - GetTabScrollDirection(); - - if (scroll_direction != - TabStripScrollSession::TabScrollDirection::kNoScroll) { - Start(scroll_direction); - } -} - -void TabStripScrollSessionWithTimer::Start(TabScrollDirection direction) { - scroll_timer_->Start( - FROM_HERE, kScrollTimerDelay, - base::BindRepeating(&TabStripScrollSessionWithTimer::TabScrollCallback, - base::Unretained(this))); - scroll_direction_ = direction; -} - -void TabStripScrollSessionWithTimer::TabScrollCallback() { - DCHECK(scroll_direction_ != - TabStripScrollSession::TabScrollDirection::kNoScroll); - if (GetTabScrollDirection() != scroll_direction_) { - scroll_timer_->Stop(); - return; - } - - const int tab_scroll_offset = CalculateSpeed(); - views::ScrollView* const scroll_view = - tab_drag_with_scroll_manager_->GetScrollView(); - scroll_view->ScrollByOffset(gfx::PointF(tab_scroll_offset, 0)); - - tab_drag_with_scroll_manager_->MoveAttached( - tab_drag_with_scroll_manager_->GetLastPointInScreen()); -} - -bool TabStripScrollSessionWithTimer::IsRunning() { - return scroll_timer_->IsRunning(); -} - -int TabStripScrollSessionWithTimer::CalculateSpeed() { - // TODO(crbug.com/40875170): Use the expected offset at a given time to - // calculate the current offset. This can help with making up - // for rounding off the calculation to int in the next call. - // Also use the time elapsed to calculate the expected offset. - DCHECK(scroll_direction_ != - TabStripScrollSession::TabScrollDirection::kNoScroll); - const int tab_scroll_offset = - (scroll_direction_ == TabScrollDirection::kScrollTowardsTrailingTabs) - ? ceil(CalculateBaseScrollOffset()) - : floor(-CalculateBaseScrollOffset()); - - switch (timer_type_) { - case TabStripScrollSessionWithTimer::ScrollSessionTimerType::kConstantTimer: - return tab_scroll_offset; - case TabStripScrollSessionWithTimer::ScrollSessionTimerType::kVariableTimer: - if (scroll_direction_ == TabScrollDirection::kScrollTowardsTrailingTabs) { - return ceil(std::clamp(GetRatioInScrollableRegion() * tab_scroll_offset, - 0.0, CalculateBaseScrollOffset() * 3)); - } else { - return floor( - std::clamp(GetRatioInScrollableRegion() * tab_scroll_offset, - CalculateBaseScrollOffset() * -3, 0.0)); - } - default: - NOTREACHED(); - } -} - -double TabStripScrollSessionWithTimer::CalculateBaseScrollOffset() { - return kNumberOfTabsScrolledPerSecond * - TabStyle::Get()->GetMinimumInactiveWidth() * - (kScrollTimerDelay / base::Milliseconds(1000)); -} - -double TabStripScrollSessionWithTimer::GetRatioInScrollableRegion() { - const gfx::Rect dragged_tabs_rect_drag_context_coord = - tab_drag_with_scroll_manager_->GetEnclosingRectForDraggedTabs(); - const views::ScrollView* const scroll_view = - tab_drag_with_scroll_manager_->GetScrollView(); - const gfx::Rect visible_rect_drag_context_coord = - gfx::ToEnclosingRect(views::View::ConvertRectToTarget( - scroll_view->contents(), - tab_drag_with_scroll_manager_->GetAttachedContext(), - gfx::RectF(scroll_view->GetVisibleRect()))); - - double ratio = 0; - double scrollable_start = 0; - - switch (scroll_direction_) { - case TabStripScrollSession::TabScrollDirection::kScrollTowardsTrailingTabs: - scrollable_start = - visible_rect_drag_context_coord.right() - GetScrollableOffset(); - ratio = - (dragged_tabs_rect_drag_context_coord.right() - scrollable_start) / - GetScrollableOffset(); - return ratio; - case TabStripScrollSession::TabScrollDirection::kScrollTowardsLeadingTabs: - scrollable_start = - visible_rect_drag_context_coord.origin().x() + GetScrollableOffset(); - ratio = (scrollable_start - - dragged_tabs_rect_drag_context_coord.origin().x()) / - GetScrollableOffset(); - return ratio; - default: - return ratio; - } -} - -TabStripScrollSession::TabScrollDirection -TabStripScrollSessionWithTimer::GetTabScrollDirection() { - const views::ScrollView* const scroll_view = - tab_drag_with_scroll_manager_->GetScrollView(); - - const gfx::Rect dragged_tabs_rect_drag_context_coord = - tab_drag_with_scroll_manager_->GetEnclosingRectForDraggedTabs(); - const gfx::Rect visible_rect_drag_context_coord = - gfx::ToEnclosingRect(views::View::ConvertRectToTarget( - scroll_view->contents(), - tab_drag_with_scroll_manager_->GetAttachedContext(), - gfx::RectF(scroll_view->GetVisibleRect()))); - - const bool maybe_scroll_towards_trailing_tabs = - dragged_tabs_rect_drag_context_coord.right() >= - (visible_rect_drag_context_coord.right() - GetScrollableOffset()); - - const bool maybe_scroll_towards_leading_tabs = - dragged_tabs_rect_drag_context_coord.origin().x() <= - (visible_rect_drag_context_coord.origin().x() + GetScrollableOffset()); - - // TODO(crbug.com/40875138): Add case for both maybe scroll left and right. - // This would happen when many tabs are selected. - if (maybe_scroll_towards_trailing_tabs) { - return TabStripScrollSession::TabScrollDirection:: - kScrollTowardsTrailingTabs; - } else if (maybe_scroll_towards_leading_tabs) { - return TabStripScrollSession::TabScrollDirection::kScrollTowardsLeadingTabs; - } else { - return TabStripScrollSession::TabScrollDirection::kNoScroll; - } -} - -int TabStripScrollSession::GetScrollableOffset() const { - return TabStyle::Get()->GetMinimumInactiveWidth() / 5; -}
diff --git a/chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.h b/chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.h deleted file mode 100644 index 99e3b77a..0000000 --- a/chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.h +++ /dev/null
@@ -1,126 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_VIEWS_TABS_DRAGGING_TAB_STRIP_SCROLL_SESSION_H_ -#define CHROME_BROWSER_UI_VIEWS_TABS_DRAGGING_TAB_STRIP_SCROLL_SESSION_H_ - -#include "base/memory/raw_ptr.h" -#include "base/time/time.h" -#include "base/timer/timer.h" -#include "chrome/browser/ui/views/tabs/tab_style_views.h" - -class TabDragWithScrollManager { - public: - virtual ~TabDragWithScrollManager() = default; - - // Handles dragging tabs while the tabs are attached. `just_attached` should - // be true iff this is the first call to MoveAttached after attaching. This - // also starts a scroll session if needed. - // TODO(crbug.com/40875136): Make this an observer of the scroll_session - // class. - virtual void MoveAttached(gfx::Point point_in_screen) = 0; - - // Returns a rect starting from the origin of the first dragged tab - // to the end of the last dragged tab. - virtual gfx::Rect GetEnclosingRectForDraggedTabs() = 0; - - // Returns the point in screen when the last drag occurred. - virtual gfx::Point GetLastPointInScreen() = 0; - - // Returns the `attached_context_`. - virtual views::View* GetAttachedContext() = 0; - - // Get Scroll View from the `attached_context_`. - virtual views::ScrollView* GetScrollView() = 0; -}; - -// Interface that starts and stops a scrolling session. Current implementations -// are timer based implementations -class TabStripScrollSession { - public: - explicit TabStripScrollSession(TabDragWithScrollManager& drag_controller); - TabStripScrollSession(const TabStripScrollSession&) = delete; - TabStripScrollSession& operator=(const TabStripScrollSession&) = delete; - virtual ~TabStripScrollSession(); - enum class ScrollWithDragStrategy { - kConstantSpeed = 1, - kVariableSpeed = 2, - kDisabled = 3 - }; - enum class TabScrollDirection { - kNoScroll, - kScrollTowardsLeadingTabs, - kScrollTowardsTrailingTabs - }; - // Calculates which direction should the scrolling occur and - // starts the `Start()` method - virtual void MaybeStart() = 0; - // Check if the scroll session is still active - virtual bool IsRunning() = 0; - // Determines which direction should the scrolling happen. - virtual TabStripScrollSession::TabScrollDirection GetTabScrollDirection() = 0; - // The offset from the start or end of scroll view when the scrolling should - // begin. - int GetScrollableOffset() const; - - protected: - // Start the scroll_session towards the direction passed - virtual void Start(TabScrollDirection direction) = 0; - // Direction in which the scroll is currently happening - TabScrollDirection scroll_direction_ = TabScrollDirection::kNoScroll; - // the controller for running operations like MoveAttached and getting - // the attached_context. - const raw_ref<TabDragWithScrollManager> tab_drag_with_scroll_manager_; -}; - -class TabStripScrollSessionWithTimer : public TabStripScrollSession { - public: - // enum for type of timer. constant timer scrolls at a constant velocity but - // variable timer scrolls faster towards the ends of the visible view of - // tab_strip - enum class ScrollSessionTimerType { kVariableTimer, kConstantTimer }; - - TabStripScrollSessionWithTimer(TabDragWithScrollManager& drag_controller, - ScrollSessionTimerType timer_type); - - explicit TabStripScrollSessionWithTimer(const TabStripScrollSession&) = - delete; - TabStripScrollSessionWithTimer& operator=(const TabStripScrollSession&) = - delete; - ~TabStripScrollSessionWithTimer() override; - - void MaybeStart() override; - bool IsRunning() override; - TabStripScrollSession::TabScrollDirection GetTabScrollDirection() override; - - // public method for unittest to use a mockTimer - void SetTimerForTesting(base::RepeatingTimer* testing_timer) { - scroll_timer_.reset(testing_timer); - } - // Getter to expose kScrollableOffsetFromScrollView to test class - int GetScrollableOffsetFromScrollViewForTesting() { - return GetScrollableOffset(); - } - // Returns the base scroll offset which is the case with constant timer - double CalculateBaseScrollOffset(); - - private: - void Start(TabScrollDirection direction) override; - // Returns the offset to be scrolled per callback. For variable timer based - // implementation the maximum speed is 3*base_speed - int CalculateSpeed(); - // Callback invoked by the timer - void TabScrollCallback(); - // Returns the ratio of how far the bounds of the tab_strip are the - // dragged tabs at - double GetRatioInScrollableRegion(); - // timer for scrolling and dragging - std::unique_ptr<base::RepeatingTimer> scroll_timer_; - // type of timer which can have a constant velocity or a variable velocity - // based on how close the tabs are to the end of the visible content view. - const ScrollSessionTimerType timer_type_ = - ScrollSessionTimerType::kConstantTimer; -}; - -#endif // CHROME_BROWSER_UI_VIEWS_TABS_DRAGGING_TAB_STRIP_SCROLL_SESSION_H_
diff --git a/chrome/browser/ui/views/tabs/tab_container.h b/chrome/browser/ui/views/tabs/tab_container.h index 6ef56ab..4661589 100644 --- a/chrome/browser/ui/views/tabs/tab_container.h +++ b/chrome/browser/ui/views/tabs/tab_container.h
@@ -82,12 +82,6 @@ // may be called during `view`'s destruction. virtual void ReturnTabSlotView(TabSlotView* view) = 0; - // Scrolls so the tab at `model_index` is fully visible. - virtual void ScrollTabToVisible(int model_index) = 0; - - // Animates and scrolls the tab container by an offset. - virtual void ScrollTabContainerByOffset(int offset) = 0; - // Handle tab group model changes. virtual void OnGroupCreated(const tab_groups::TabGroupId& group) = 0; // Opens the editor bubble for the tab `group` as a result of an explicit user
diff --git a/chrome/browser/ui/views/tabs/tab_container_impl.cc b/chrome/browser/ui/views/tabs/tab_container_impl.cc index eb2d601..0228177 100644 --- a/chrome/browser/ui/views/tabs/tab_container_impl.cc +++ b/chrome/browser/ui/views/tabs/tab_container_impl.cc
@@ -23,7 +23,6 @@ #include "chrome/browser/ui/views/tabs/tab_group_underline.h" #include "chrome/browser/ui/views/tabs/tab_group_views.h" #include "chrome/browser/ui/views/tabs/tab_hover_card_controller.h" -#include "chrome/browser/ui/views/tabs/tab_scrolling_animation.h" #include "chrome/browser/ui/views/tabs/tab_slot_animation_delegate.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" @@ -41,7 +40,6 @@ #include "ui/gfx/image/image_skia_operations.h" #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/controls/image_view.h" -#include "ui/views/controls/scroll_view.h" #include "ui/views/mouse_watcher_view_host.h" #include "ui/views/rect_based_targeting_utils.h" #include "ui/views/view_utils.h" @@ -93,13 +91,11 @@ TabContainerController& controller, TabHoverCardController* hover_card_controller, TabDragContextBase* drag_context, - TabSlotController& tab_slot_controller, - views::View* scroll_contents_view) + TabSlotController& tab_slot_controller) : controller_(controller), hover_card_controller_(hover_card_controller), drag_context_(drag_context), tab_slot_controller_(tab_slot_controller), - scroll_contents_view_(scroll_contents_view), overall_bounds_view_(*AddChildView(std::make_unique<views::View>())), bounds_animator_(this), layout_helper_(std::make_unique<TabStripLayoutHelper>( @@ -276,11 +272,6 @@ // state we can just snap to the new bounds. CompleteAnimationAndLayout(); } - - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip) && - new_active_index.has_value()) { - ScrollTabToVisible(new_active_index.value()); - } } Tab* TabContainerImpl::RemoveTabFromViewModel(int model_index) { @@ -339,62 +330,6 @@ } } -void TabContainerImpl::ScrollTabToVisible(int model_index) { - std::optional<gfx::Rect> visible_content_rect = GetVisibleContentRect(); - - if (!visible_content_rect.has_value()) { - return; - } - - // If the tab strip won't be scrollable after the current tabstrip animations - // complete, scroll animation wouldn't be meaningful. - if (tabs_view_model_.ideal_bounds(GetTabCount() - 1).right() <= - GetAvailableWidthForTabContainer()) { - return; - } - - gfx::Rect active_tab_ideal_bounds = - tabs_view_model_.ideal_bounds(model_index); - - if ((active_tab_ideal_bounds.x() >= visible_content_rect->x()) && - (active_tab_ideal_bounds.right() <= visible_content_rect->right())) { - return; - } - - bool scroll_left = active_tab_ideal_bounds.x() < visible_content_rect->x(); - if (scroll_left) { - // Scroll the left edge of `visible_content_rect` to show the left edge of - // the tab at `model_index`. We can leave the width entirely up to the - // ScrollView. - int start_left_edge(visible_content_rect->x()); - int target_left_edge(active_tab_ideal_bounds.x()); - - AnimateScrollToShowXCoordinate(start_left_edge, target_left_edge); - } else { - // Scroll the right edge of `visible_content_rect` to show the right edge - // of the tab at `model_index`. We can leave the width entirely up to the - // ScrollView. - int start_right_edge(visible_content_rect->right()); - int target_right_edge(active_tab_ideal_bounds.right()); - AnimateScrollToShowXCoordinate(start_right_edge, target_right_edge); - } -} - -void TabContainerImpl::ScrollTabContainerByOffset(int offset) { - std::optional<gfx::Rect> visible_content_rect = GetVisibleContentRect(); - if (!visible_content_rect.has_value() || offset == 0) { - return; - } - - // If tabcontainer is scrolled towards trailing tab, the start edge should - // have the x coordinate of the right bound. If it is scrolled towards the - // leading tab it should have the x coordinate of the left bound. - int start_edge = - (offset > 0) ? visible_content_rect->right() : visible_content_rect->x(); - - AnimateScrollToShowXCoordinate(start_edge, start_edge + offset); -} - void TabContainerImpl::OnGroupCreated(const tab_groups::TabGroupId& group) { auto group_view = std::make_unique<TabGroupViews>( this, drag_context_, *tab_slot_controller_, group); @@ -756,8 +691,7 @@ int TabContainerImpl::GetAvailableWidthForTabContainer() const { // Falls back to views::View::GetAvailableSize() when - // `available_width_callback_` is not defined, e.g. when tab scrolling is - // disabled. + // `available_width_callback_` is not defined. return available_width_callback_ ? available_width_callback_.Run() : parent()->GetAvailableSize(this).width().value(); @@ -1216,16 +1150,6 @@ return &tabs_view_model_; } -std::optional<gfx::Rect> TabContainerImpl::GetVisibleContentRect() { - views::ScrollView* scroll_container = - views::ScrollView::GetScrollViewForContents(scroll_contents_view_); - if (!scroll_container) { - return std::nullopt; - } - - return scroll_container->GetVisibleRect(); -} - void TabContainerImpl::AnimateViewTo( View* view, const gfx::Rect& target, @@ -1235,21 +1159,6 @@ bounds_animator_.AnimateViewTo(view, target, std::move(delegate)); } -void TabContainerImpl::AnimateScrollToShowXCoordinate(const int start_edge, - const int target_edge) { - if (tab_scrolling_animation_) { - tab_scrolling_animation_->Stop(); - } - - gfx::Rect start_rect(start_edge, 0, 0, 0); - gfx::Rect target_rect(target_edge, 0, 0, 0); - - tab_scrolling_animation_ = std::make_unique<TabScrollingAnimation>( - scroll_contents_view_, bounds_animator_.container(), start_rect, - target_rect); - tab_scrolling_animation_->Start(); -} - void TabContainerImpl::AnimateTabSlotViewTo(TabSlotView* tab_slot_view, const gfx::Rect& target_bounds) { // If we don't own the tab, let our controller handle it. @@ -1686,17 +1595,6 @@ } bool TabContainerImpl::ShouldTabBeVisible(const Tab* tab) const { - // When the tabstrip is scrollable, it can grow to accommodate any number of - // tabs, so tabs can never become clipped. - // N.B. Tabs can still be not-visible because they're in a collapsed group, - // but that's handled elsewhere. - // N.B. This is separate from the tab being potentially scrolled offscreen - - // this solely determines whether the tab should be clipped for the - // pre-scrolling overflow behavior. - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { - return true; - } - // Detached tabs should always be invisible (as they close). if (tab->detached()) { return false;
diff --git a/chrome/browser/ui/views/tabs/tab_container_impl.h b/chrome/browser/ui/views/tabs/tab_container_impl.h index 5f3b79f..36f1623 100644 --- a/chrome/browser/ui/views/tabs/tab_container_impl.h +++ b/chrome/browser/ui/views/tabs/tab_container_impl.h
@@ -45,8 +45,7 @@ TabContainerImpl(TabContainerController& controller, TabHoverCardController* hover_card_controller, TabDragContextBase* drag_context, - TabSlotController& tab_slot_controller, - views::View* scroll_contents_view); + TabSlotController& tab_slot_controller); ~TabContainerImpl() override; // TabContainer: @@ -65,9 +64,6 @@ Tab* AddTabToViewModel(Tab* tab, int model_index, TabPinned pinned) override; void ReturnTabSlotView(TabSlotView* view) override; - void ScrollTabToVisible(int model_index) override; - - void ScrollTabContainerByOffset(int offset) override; void OnGroupCreated(const tab_groups::TabGroupId& group) override; void OnGroupEditorOpened(const tab_groups::TabGroupId& group) override; void OnGroupMoved(const tab_groups::TabGroupId& group) override; @@ -218,9 +214,6 @@ views::ViewModelT<Tab>* GetTabsViewModel(); - // Private getter to retrieve the visible rect of the scroll container. - std::optional<gfx::Rect> GetVisibleContentRect(); - // Uses `bounds_animator_` to animate `view` to `target`. Use this rather than // calling `bounds_animator_.AnimateViewTo()` directly so animations correctly // track changes in rich animation enable state. @@ -229,11 +222,6 @@ const gfx::Rect& target, std::unique_ptr<gfx::AnimationDelegate> delegate = nullptr); - // Animates and scrolls the tab container from the start_edge to the - // target_edge. If the target_edge is beyond the tab strip it will be clamped - // bounds of the tabstrip. - void AnimateScrollToShowXCoordinate(const int start_edge, - const int target_edge); // Animates `tab_slot_view` to `target_bounds` void AnimateTabSlotViewTo(TabSlotView* tab_slot_view, const gfx::Rect& target_bounds); @@ -371,10 +359,6 @@ const raw_ref<TabSlotController> tab_slot_controller_; - // The View that is to be scrolled by `tab_scrolling_animation_`. May be - // nullptr in tests. - const raw_ptr<views::View> scroll_contents_view_; - // This view is animated by `bounds_animator_` to guarantee that this // container's bounds change smoothly when tabs are animated into or out of // this container. @@ -383,9 +367,6 @@ // Responsible for animating tabs in response to model changes. views::BoundsAnimator bounds_animator_; - // Responsible for animating the scroll of the tab container. - std::unique_ptr<gfx::LinearAnimation> tab_scrolling_animation_; - const std::unique_ptr<TabStripLayoutHelper> layout_helper_; // MouseWatcher is used when a tab is closed to reset the layout.
diff --git a/chrome/browser/ui/views/tabs/tab_container_unittest.cc b/chrome/browser/ui/views/tabs/tab_container_unittest.cc index ffc98c38..cb7e9ae 100644 --- a/chrome/browser/ui/views/tabs/tab_container_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_container_unittest.cc
@@ -175,10 +175,10 @@ std::unique_ptr<FakeTabDragContext> drag_context = std::make_unique<FakeTabDragContext>(); std::unique_ptr<TabContainer> tab_container = - std::make_unique<TabContainerImpl>( - *(tab_container_controller_.get()), - nullptr /*hover_card_controller*/, drag_context.get(), - *(tab_slot_controller_.get()), nullptr /*scroll_contents_view*/); + std::make_unique<TabContainerImpl>(*(tab_container_controller_.get()), + nullptr /*hover_card_controller*/, + drag_context.get(), + *(tab_slot_controller_.get())); tab_container->SetAvailableWidthCallback(base::BindRepeating( [](TabContainerTest* test) { return test->tab_container_width_; }, this)); @@ -1008,10 +1008,6 @@ // Validates that group underlines are updated correctly in a single Layout // call when the visibility of tabs in the group change. See crbug.com/1356177 - // This test is only valid with scrolling off, since it pertains to tab - // visibility stuff that scrolling doesn't do. - ASSERT_FALSE(base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)); - SetTabContainerWidth(200); // Add tabs to a single group until the last one is not visible. tab_groups::TabGroupId group = tab_groups::TabGroupId::GenerateNew(); @@ -1044,10 +1040,6 @@ // call when the visibility of the group header changes, even if the group is // collapsed. See crbug.com/1374614 - // This test is only valid with scrolling off, since it pertains to tab - // visibility stuff that scrolling doesn't do. - ASSERT_FALSE(base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)); - SetTabContainerWidth(200); // Create a tab group with one tab and collapse it. tab_groups::TabGroupId group = tab_groups::TabGroupId::GenerateNew();
diff --git a/chrome/browser/ui/views/tabs/tab_scrolling_animation.cc b/chrome/browser/ui/views/tabs/tab_scrolling_animation.cc deleted file mode 100644 index f93cb9eb..0000000 --- a/chrome/browser/ui/views/tabs/tab_scrolling_animation.cc +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/tab_scrolling_animation.h" - -TabScrollingAnimation::TabScrollingAnimation( - views::View* contents_view, - gfx::AnimationContainer* bounds_animator_container, - const gfx::Rect start_visible_rect, - const gfx::Rect end_visible_rect) - : gfx::LinearAnimation( - gfx::Animation::RichAnimationDuration(base::Milliseconds(200)), - gfx::LinearAnimation::kDefaultFrameRate, - this), - contents_view_(contents_view), - start_visible_rect_(start_visible_rect), - end_visible_rect_(end_visible_rect) { - SetContainer(bounds_animator_container); -} - -void TabScrollingAnimation::AnimateToState(double state) { - gfx::Rect intermediary_rect( - start_visible_rect_.x() + - (end_visible_rect_.x() - start_visible_rect_.x()) * state, - start_visible_rect_.y(), start_visible_rect_.width(), - start_visible_rect_.height()); - contents_view_->ScrollRectToVisible(intermediary_rect); -} - -void TabScrollingAnimation::AnimationEnded(const gfx::Animation* animation) { - contents_view_->ScrollRectToVisible(end_visible_rect_); -}
diff --git a/chrome/browser/ui/views/tabs/tab_scrolling_animation.h b/chrome/browser/ui/views/tabs/tab_scrolling_animation.h deleted file mode 100644 index 30cff91..0000000 --- a/chrome/browser/ui/views/tabs/tab_scrolling_animation.h +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_SCROLLING_ANIMATION_H_ -#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_SCROLLING_ANIMATION_H_ - -#include "base/memory/raw_ptr.h" -#include "ui/gfx/animation/animation_delegate.h" -#include "ui/gfx/animation/linear_animation.h" -#include "ui/gfx/geometry/rect.h" -#include "ui/views/view.h" - -// Helper class that manages the tab scrolling animation. -class TabScrollingAnimation : public gfx::LinearAnimation, - public gfx::AnimationDelegate { - public: - explicit TabScrollingAnimation( - views::View* contents_view, - gfx::AnimationContainer* bounds_animator_container, - const gfx::Rect start_visible_rect, - const gfx::Rect end_visible_rect); - - TabScrollingAnimation(const TabScrollingAnimation&) = delete; - TabScrollingAnimation& operator=(const TabScrollingAnimation&) = delete; - ~TabScrollingAnimation() override = default; - - // gfx::LinearAnimation: - void AnimateToState(double state) override; - - // gfx::AnimationDelegate: - void AnimationEnded(const gfx::Animation* animation) override; - - private: - const raw_ptr<views::View> contents_view_; - const gfx::Rect start_visible_rect_; - const gfx::Rect end_visible_rect_; -}; - -#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_SCROLLING_ANIMATION_H_
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc index cf8b5a21..e517c65d 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.cc +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -59,7 +59,6 @@ #include "chrome/browser/ui/view_ids.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h" -#include "chrome/browser/ui/views/tabs/compound_tab_container.h" #include "chrome/browser/ui/views/tabs/dragging/tab_drag_controller.h" #include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab_container_impl.h" @@ -103,7 +102,6 @@ #include "ui/gfx/range/range.h" #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/cascading_property.h" -#include "ui/views/controls/scroll_view.h" #include "ui/views/interaction/element_tracker_views.h" #include "ui/views/view_class_properties.h" #include "ui/views/view_observer.h" @@ -133,12 +131,8 @@ TabStrip* tab_strip, TabHoverCardController* hover_card_controller, TabDragContext* drag_context) { - if (base::FeatureList::IsEnabled(tabs::kSplitTabStrip)) { - return std::make_unique<CompoundTabContainer>( - *tab_strip, hover_card_controller, drag_context, *tab_strip, tab_strip); - } - return std::make_unique<TabContainerImpl>( - *tab_strip, hover_card_controller, drag_context, *tab_strip, tab_strip); + return std::make_unique<TabContainerImpl>(*tab_strip, hover_card_controller, + drag_context, *tab_strip); } void UpdateDragEventSourceCrashKey( @@ -1494,14 +1488,6 @@ } } -void TabStrip::ScrollTowardsTrailingTabs(int offset) { - tab_container_->ScrollTabContainerByOffset(offset); -} - -void TabStrip::ScrollTowardsLeadingTabs(int offset) { - tab_container_->ScrollTabContainerByOffset(-offset); -} - void TabStrip::OnWidgetActivationChanged(views::Widget* widget, bool active) { if (active && selected_tabs_.active().has_value()) { // When the browser window is activated, set the accessible selection and @@ -2158,23 +2144,6 @@ } void TabStrip::Layout(PassKey) { - if (base::FeatureList::IsEnabled(tabs::kScrollableTabStrip)) { - // With tab scrolling, the TabStrip is the contents view of a ScrollView and - // as such is expected to set its own bounds during layout. - // (With great sizing power comes great sizing responsibility). - - // We should never be larger than our preferred width. - const int max_width = GetPreferredSize().width(); - // We should never be smaller than our minimum width. - const int min_width = GetMinimumSize().width(); - // If we can, we should fit within the tab strip region to avoid scrolling. - const int available_width = - tab_container_->GetAvailableWidthForTabContainer(); - // Be as wide as possible subject to the above constraints. - const int width = std::min(max_width, std::max(min_width, available_width)); - SetBounds(0, 0, width, GetLayoutConstant(TAB_STRIP_HEIGHT)); - } - if (tab_container_->bounds() != GetLocalBounds()) { UpdateHoverCard(nullptr, TabSlotController::HoverCardUpdateType::kAnimating);
diff --git a/chrome/browser/ui/views/tabs/tab_strip.h b/chrome/browser/ui/views/tabs/tab_strip.h index d4c4305..75b959df 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.h +++ b/chrome/browser/ui/views/tabs/tab_strip.h
@@ -97,12 +97,6 @@ // Sets the observer to be notified of changes within this TabStrip. void SetTabStripObserver(TabStripObserver* observer); - // Scroll the tabstrip towards the trailing tabs by an offset - void ScrollTowardsTrailingTabs(int offset); - - // Scroll the tabstrip towards the leading tabs by an offset - void ScrollTowardsLeadingTabs(int offset); - // Returns true if the specified rect (in TabStrip coordinates) intersects // the window caption area of the browser window. bool IsRectInWindowCaption(const gfx::Rect& rect);
diff --git a/chrome/browser/ui/views/tabs/tab_strip_scroll_container.cc b/chrome/browser/ui/views/tabs/tab_strip_scroll_container.cc deleted file mode 100644 index 4dab90f..0000000 --- a/chrome/browser/ui/views/tabs/tab_strip_scroll_container.cc +++ /dev/null
@@ -1,339 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/tab_strip_scroll_container.h" - -#include <memory> - -#include "base/functional/bind.h" -#include "base/memory/raw_ptr.h" -#include "cc/paint/paint_shader.h" -#include "chrome/app/vector_icons/vector_icons.h" -#include "chrome/browser/ui/color/chrome_color_id.h" -#include "chrome/browser/ui/ui_features.h" -#include "chrome/browser/ui/views/tabs/tab_strip.h" -#include "chrome/browser/ui/views/tabs/tab_strip_controller.h" -#include "chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.h" -#include "chrome/grit/generated_resources.h" -#include "ui/base/l10n/l10n_util.h" -#include "ui/base/metadata/metadata_header_macros.h" -#include "ui/base/metadata/metadata_impl_macros.h" -#include "ui/gfx/canvas.h" -#include "ui/views/animation/ink_drop.h" -#include "ui/views/bubble/bubble_dialog_delegate_view.h" -#include "ui/views/controls/button/image_button.h" -#include "ui/views/controls/button/image_button_factory.h" -#include "ui/views/controls/highlight_path_generator.h" -#include "ui/views/controls/scroll_view.h" -#include "ui/views/layout/fill_layout.h" -#include "ui/views/layout/flex_layout.h" -#include "ui/views/layout/flex_layout_types.h" -#include "ui/views/layout/layout_types.h" -#include "ui/views/view.h" - -namespace { -SkColor4f GetCurrentFrameColor(TabStrip* tab_strip) { - return SkColor4f::FromColor(tab_strip->controller()->GetFrameColor( - BrowserFrameActiveState::kUseCurrent)); -} - -SkColor4f GetShadowColor(TabStrip* tab_strip) { - return SkColor4f::FromColor( - tab_strip->GetColorProvider()->GetColor(ui::kColorShadowBase)); -} - -// Define a custom FlexRule for `scroll_view_`. Equivalent to using a -// (kScaleToMinimum, kPreferred) flex specification on the tabstrip itself, -// bypassing the ScrollView. -// TODO(crbug.com/40721975): Make ScrollView take on TabStrip's preferred size -// instead. -gfx::Size TabScrollContainerFlexRule(const views::View* tab_strip, - const views::View* view, - const views::SizeBounds& size_bounds) { - const gfx::Size preferred_size = tab_strip->GetPreferredSize(size_bounds); - const int minimum_width = tab_strip->GetMinimumSize().width(); - const int width = std::max( - minimum_width, size_bounds.width().min_of(preferred_size.width())); - return gfx::Size(width, preferred_size.height()); -} - -std::unique_ptr<views::ImageButton> CreateScrollButton( - views::Button::PressedCallback callback) { - // TODO(tbergquist): These have a lot in common with the NTB and the tab - // search buttons. Could probably extract a base class. - auto scroll_button = - std::make_unique<views::ImageButton>(std::move(callback)); - scroll_button->SetImageVerticalAlignment( - views::ImageButton::VerticalAlignment::ALIGN_MIDDLE); - scroll_button->SetImageHorizontalAlignment( - views::ImageButton::HorizontalAlignment::ALIGN_CENTER); - scroll_button->SetHasInkDropActionOnClick(true); - views::InkDrop::Get(scroll_button.get()) - ->SetMode(views::InkDropHost::InkDropMode::ON); - scroll_button->SetFocusBehavior(views::View::FocusBehavior::ACCESSIBLE_ONLY); - scroll_button->SetPreferredSize(gfx::Size(28, 28)); - views::HighlightPathGenerator::Install( - scroll_button.get(), - std::make_unique<views::CircleHighlightPathGenerator>(gfx::Insets())); - - const views::FlexSpecification button_flex_spec = - views::FlexSpecification(views::LayoutOrientation::kHorizontal, - views::MinimumFlexSizeRule::kScaleToMinimum, - views::MaximumFlexSizeRule::kPreferred); - scroll_button->SetProperty(views::kFlexBehaviorKey, button_flex_spec); - return scroll_button; -} - -// Must be kept the same as kTabScrollingButtonPositionVariations values -enum ScrollButtonPositionType { - kJoinedButtonsRight = 0, - kJoinedButtonsLeft = 1, - kSplitButtons = 2 -}; - -} // namespace - -TabStripScrollContainer::TabStripScrollContainer( - std::unique_ptr<TabStrip> tab_strip) { - SetLayoutManager(std::make_unique<views::FillLayout>()) - ->SetMinimumSizeEnabled(true); - - // TODO(crbug.com/40721975): ScrollView doesn't propagate changes to - // the TabStrip's preferred size; observe that manually. - tab_strip_observation_.Observe(tab_strip.get()); - tab_strip->SetAvailableWidthCallback( - base::BindRepeating(&TabStripScrollContainer::GetTabStripAvailableWidth, - base::Unretained(this))); - - std::unique_ptr<views::ScrollView> scroll_view = - std::make_unique<views::ScrollView>( - views::ScrollView::ScrollWithLayers::kEnabled); - scroll_view_ = scroll_view.get(); - scroll_view->SetBackgroundColor(std::nullopt); - scroll_view->SetHorizontalScrollBarMode( - views::ScrollView::ScrollBarMode::kHiddenButEnabled); - scroll_view->SetTreatAllScrollEventsAsHorizontal(true); - scroll_view->SetContents(std::move(tab_strip)); - - overflow_indicator_strategy_ = - TabStripScrollingOverflowIndicatorStrategy::CreateFromFeatureFlag( - scroll_view_, - base::BindRepeating(&GetCurrentFrameColor, this->tab_strip()), - base::BindRepeating(&GetShadowColor, this->tab_strip())); - overflow_indicator_strategy_->Init(); - // This base::Unretained is safe because the callback is called by the - // layout manager, which is cleaned up before view children like - // `scroll_view` (which owns `tab_strip`). - scroll_view->SetProperty( - views::kFlexBehaviorKey, - views::FlexSpecification(base::BindRepeating( - &TabScrollContainerFlexRule, base::Unretained(this->tab_strip())))); - - on_contents_scrolled_subscription_ = scroll_view->AddContentsScrolledCallback( - base::BindRepeating(&TabStripScrollContainer::OnContentsScrolledCallback, - base::Unretained(this))); - - if (!base::FeatureList::IsEnabled(features::kTabScrollingButtonPosition)) { - leading_scroll_button_ = nullptr; - trailing_scroll_button_ = nullptr; - overflow_view_ = AddChildView( - std::make_unique<OverflowView>(std::move(scroll_view), nullptr)); - return; - } - - int scroll_button_strategy = base::GetFieldTrialParamByFeatureAsInt( - features::kTabScrollingButtonPosition, - features::kTabScrollingButtonPositionParameterName, 0); - - std::unique_ptr<views::ImageButton> leading_scroll_button = - CreateScrollButton( - base::BindRepeating(&TabStripScrollContainer::ScrollTowardsLeadingTab, - base::Unretained(this))); - leading_scroll_button->GetViewAccessibility().SetName( - l10n_util::GetStringUTF16(IDS_ACCNAME_TAB_SCROLL_LEADING)); - leading_scroll_button->SetTooltipText( - l10n_util::GetStringUTF16(IDS_TOOLTIP_TAB_SCROLL_LEADING)); - - std::unique_ptr<views::ImageButton> trailing_scroll_button = - CreateScrollButton(base::BindRepeating( - &TabStripScrollContainer::ScrollTowardsTrailingTab, - base::Unretained(this))); - trailing_scroll_button->GetViewAccessibility().SetName( - l10n_util::GetStringUTF16(IDS_ACCNAME_TAB_SCROLL_TRAILING)); - trailing_scroll_button->SetTooltipText( - l10n_util::GetStringUTF16(IDS_TOOLTIP_TAB_SCROLL_TRAILING)); - - // The space in dips between the scroll buttons and the NTB. - constexpr int kScrollButtonsTrailingMargin = 8; - trailing_scroll_button->SetProperty( - views::kMarginsKey, - gfx::Insets::TLBR(0, 0, 0, kScrollButtonsTrailingMargin)); - - leading_scroll_button_ = leading_scroll_button.get(); - trailing_scroll_button_ = trailing_scroll_button.get(); - - switch (scroll_button_strategy) { - case ScrollButtonPositionType::kJoinedButtonsLeft: - case ScrollButtonPositionType::kJoinedButtonsRight: { - std::unique_ptr<views::View> scroll_button_container = - std::make_unique<views::View>(); - views::FlexLayout* scroll_button_layout = - scroll_button_container->SetLayoutManager( - std::make_unique<views::FlexLayout>()); - scroll_button_layout->SetOrientation( - views::LayoutOrientation::kHorizontal); - scroll_button_container->AddChildView(std::move(leading_scroll_button)); - scroll_button_container->AddChildView(std::move(trailing_scroll_button)); - overflow_view_ = AddChildView(std::make_unique<OverflowView>( - std::move(scroll_view), - scroll_button_strategy == ScrollButtonPositionType::kJoinedButtonsLeft - ? std::move(scroll_button_container) - : nullptr, - scroll_button_strategy == - ScrollButtonPositionType::kJoinedButtonsRight - ? std::move(scroll_button_container) - : nullptr)); - } break; - case ScrollButtonPositionType::kSplitButtons: - overflow_view_ = AddChildView(std::make_unique<OverflowView>( - std::move(scroll_view), std::move(leading_scroll_button), - std::move(trailing_scroll_button))); - break; - } -} - -TabStripScrollContainer::~TabStripScrollContainer() = default; - -void TabStripScrollContainer::OnViewPreferredSizeChanged(views::View* view) { - DCHECK_EQ(tab_strip(), view); - - PreferredSizeChanged(); -} - -void TabStripScrollContainer::OnContentsScrolledCallback() { - views::Widget* root_widget = tab_strip()->GetWidget(); - views::Widget::Widgets children_widgets = - views::Widget::GetAllOwnedWidgets(root_widget->GetNativeView()); - - for (views::Widget* child_widget : children_widgets) { - views::BubbleDialogDelegate* bdd = - child_widget->widget_delegate()->AsBubbleDialogDelegate(); - if (bdd) { - views::View* anchor_view = bdd->GetAnchorView(); - if (this->Contains(anchor_view)) { - child_widget->Hide(); - } - } - } - - // disable the scroll buttons if fully scrolled and re-enable them otherwise - MaybeUpdateScrollButtonState(); -} - -int TabStripScrollContainer::GetTabStripAvailableWidth() const { - return overflow_view_->GetAvailableSize(scroll_view_).width().value(); -} - -void TabStripScrollContainer::ScrollTowardsLeadingTab() { - gfx::Rect visible_content = scroll_view_->GetVisibleRect(); - tab_strip()->ScrollTowardsLeadingTabs(visible_content.width()); -} - -void TabStripScrollContainer::ScrollTowardsTrailingTab() { - gfx::Rect visible_content = scroll_view_->GetVisibleRect(); - tab_strip()->ScrollTowardsTrailingTabs(visible_content.width()); -} - -void TabStripScrollContainer::FrameColorsChanged() { - SkColor foreground_enabled_color = - tab_strip()->GetTabForegroundColor(TabActive::kInactive); - // TODO(crbug.com/40879445): Get a disabled color that is lighter - // and changes with the frame background color - SkColor foreground_disabled_color = - GetColorProvider()->GetColor(kColorTabForegroundInactiveFrameInactive); - - /* When the buttons are fully scrolled in a direction the corresponding button - is disabled. They are hidden when there are not enough tabs to be in tab - scrolling mode. */ - if (leading_scroll_button_) { - views::SetImageFromVectorIconWithColor( - leading_scroll_button_, kLeadingScrollIcon, foreground_enabled_color, - foreground_disabled_color); - } - if (trailing_scroll_button_) { - views::SetImageFromVectorIconWithColor( - trailing_scroll_button_, kTrailingScrollIcon, foreground_enabled_color, - foreground_disabled_color); - } - overflow_indicator_strategy_->FrameColorsChanged(); -} - -void TabStripScrollContainer::MaybeUpdateScrollButtonState() { - if (trailing_scroll_button_) { - if (scroll_view_->GetVisibleRect().right() == - scroll_view_->contents()->GetLocalBounds().right()) { - trailing_scroll_button_->SetEnabled(false); - } else { - trailing_scroll_button_->SetEnabled(true); - } - } - - if (leading_scroll_button_) { - if (scroll_view_->GetVisibleRect().x() == - scroll_view_->contents()->GetLocalBounds().x()) { - leading_scroll_button_->SetEnabled(false); - } else { - leading_scroll_button_->SetEnabled(true); - } - } -} - -bool TabStripScrollContainer::IsRectInWindowCaption(const gfx::Rect& rect) { - const auto get_target_rect = [&](views::View* target) { - gfx::RectF rect_in_target_coords_f(rect); - View::ConvertRectToTarget(this, target, &rect_in_target_coords_f); - return gfx::ToEnclosingRect(rect_in_target_coords_f); - }; - - if (leading_scroll_button_ && - leading_scroll_button_->GetLocalBounds().Intersects( - get_target_rect(leading_scroll_button_))) { - return !leading_scroll_button_->HitTestRect( - get_target_rect(leading_scroll_button_)); - } - - if (trailing_scroll_button_ && - trailing_scroll_button_->GetLocalBounds().Intersects( - get_target_rect(trailing_scroll_button_))) { - return !trailing_scroll_button_->HitTestRect( - get_target_rect(trailing_scroll_button_)); - } - - if (scroll_view_->GetLocalBounds().Intersects( - get_target_rect(scroll_view_))) { - return tab_strip()->IsRectInWindowCaption(get_target_rect(tab_strip())); - } - - return true; -} - -void TabStripScrollContainer::OnThemeChanged() { - View::OnThemeChanged(); - FrameColorsChanged(); -} - -void TabStripScrollContainer::AddedToWidget() { - paint_as_active_subscription_ = - GetWidget()->RegisterPaintAsActiveChangedCallback( - base::BindRepeating(&TabStripScrollContainer::FrameColorsChanged, - base::Unretained(this))); -} - -void TabStripScrollContainer::RemovedFromWidget() { - paint_as_active_subscription_ = {}; -} - -BEGIN_METADATA(TabStripScrollContainer) -ADD_READONLY_PROPERTY_METADATA(int, TabStripAvailableWidth) -END_METADATA
diff --git a/chrome/browser/ui/views/tabs/tab_strip_scroll_container.h b/chrome/browser/ui/views/tabs/tab_strip_scroll_container.h deleted file mode 100644 index f62366f..0000000 --- a/chrome/browser/ui/views/tabs/tab_strip_scroll_container.h +++ /dev/null
@@ -1,96 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_SCROLL_CONTAINER_H_ -#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_SCROLL_CONTAINER_H_ - -#include <memory> - -#include "base/memory/raw_ptr.h" -#include "base/scoped_observation.h" -#include "chrome/browser/ui/views/tabs/overflow_view.h" -#include "ui/base/metadata/metadata_header_macros.h" -#include "ui/views/view.h" -#include "ui/views/view_observer.h" - -namespace views { -class ImageButton; -} - -class TabStrip; -class TabStripScrollingOverflowIndicatorStrategy; - -// Allows the TabStrip to be scrolled back and forth when there are more tabs -// than can be displayed at one time. When the TabStrip is scrollable, displays -// buttons that control the scrolling. -class TabStripScrollContainer : public views::View, views::ViewObserver { - METADATA_HEADER(TabStripScrollContainer, views::View) - - public: - explicit TabStripScrollContainer(std::unique_ptr<TabStrip> tab_strip); - TabStripScrollContainer(const TabStripScrollContainer&) = delete; - TabStripScrollContainer& operator=(const TabStripScrollContainer&) = delete; - ~TabStripScrollContainer() override; - - // views::ViewObserver: - void OnViewPreferredSizeChanged(View* view) override; - - bool IsRectInWindowCaption(const gfx::Rect& rect); - - void OnContentsScrolledCallback(); - - views::ImageButton* GetLeadingScrollButtonForTesting() { - return leading_scroll_button_; - } - - views::ImageButton* GetTrailingScrollButtonForTesting() { - return trailing_scroll_button_; - } - - // Update the background colors when frame active state changes. - void FrameColorsChanged(); - - private: - int GetTabStripAvailableWidth() const; - - // Scrolls the tabstrip towards the first tab in the tabstrip. - void ScrollTowardsLeadingTab(); - - // Scrolls the tabstrip towards the last tab in the tabstrip. - void ScrollTowardsTrailingTab(); - - // enable or disable the scroll buttons based on the scroll position - void MaybeUpdateScrollButtonState(); - - TabStrip* tab_strip() { return tab_strip_observation_.GetSource(); } - - // Subscription for scrolling of content view - base::CallbackListSubscription on_contents_scrolled_subscription_; - - // views::View - void OnThemeChanged() override; - void AddedToWidget() override; - void RemovedFromWidget() override; - - // Manages the visibility of the scroll buttons based on whether `tab_strip_` - // is currently overflowing. - raw_ptr<OverflowView> overflow_view_; - - // Actually scrolls `tab_strip_`. - raw_ptr<views::ScrollView> scroll_view_; - base::ScopedObservation<TabStrip, views::ViewObserver> tab_strip_observation_{ - this}; - - // The buttons that allow users to manually scroll `tab_strip_`. - raw_ptr<views::ImageButton> leading_scroll_button_; - raw_ptr<views::ImageButton> trailing_scroll_button_; - - // The class handling the overflow indiciators for the scroll view. - std::unique_ptr<TabStripScrollingOverflowIndicatorStrategy> - overflow_indicator_strategy_; - - base::CallbackListSubscription paint_as_active_subscription_; -}; - -#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_SCROLL_CONTAINER_H_
diff --git a/chrome/browser/ui/views/tabs/tab_strip_scroll_container_unittest.cc b/chrome/browser/ui/views/tabs/tab_strip_scroll_container_unittest.cc deleted file mode 100644 index 3282d39..0000000 --- a/chrome/browser/ui/views/tabs/tab_strip_scroll_container_unittest.cc +++ /dev/null
@@ -1,74 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/tab_strip_scroll_container.h" - -#include <cstddef> -#include <memory> - -#include "chrome/browser/ui/views/tabs/tab_strip.h" -#include "chrome/test/views/chrome_views_test_base.h" -#include "fake_base_tab_strip_controller.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "ui/views/bubble/bubble_border.h" -#include "ui/views/bubble/bubble_dialog_delegate_view.h" -#include "ui/views/widget/widget_delegate.h" - -class TabStripScrollContainerTest : public ChromeViewsTestBase { - public: - TabStripScrollContainerTest() = default; - - void SetUp() override { - ChromeViewsTestBase::SetUp(); - - auto controller = std::make_unique<FakeBaseTabStripController>(); - controller_ = controller.get(); - auto tab_strip = std::make_unique<TabStrip>(std::move(controller)); - - tab_strip_ = tab_strip.get(); - controller_->set_tab_strip(tab_strip_); - root_widget_ = - CreateTestWidget(views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET); - root_widget_->Show(); - - // root_widget_ takes ownership of the content_view - tab_strip_scroll_container_ = root_widget_->SetContentsView( - std::make_unique<TabStripScrollContainer>(std::move(tab_strip))); - } - - void TearDown() override { - root_widget_.reset(); - ChromeViewsTestBase::TearDown(); - } - - ~TabStripScrollContainerTest() override = default; - - protected: - raw_ptr<FakeBaseTabStripController, DanglingUntriaged> controller_ = nullptr; - raw_ptr<TabStripScrollContainer, DanglingUntriaged> - tab_strip_scroll_container_ = nullptr; - raw_ptr<TabStrip, DanglingUntriaged> tab_strip_ = nullptr; - std::unique_ptr<views::Widget> root_widget_; -}; - -TEST_F(TabStripScrollContainerTest, AnchoredWidgetHidesOnScroll) { - // set up the child widget - views::Widget::InitParams params = - CreateParams(views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET, - views::Widget::InitParams::TYPE_BUBBLE); - params.bounds = gfx::Rect(0, 0, 400, 400); - params.delegate = new views::BubbleDialogDelegate( - tab_strip_, views::BubbleBorder::Arrow::LEFT_TOP); - params.delegate->SetOwnedByWidget( - views::WidgetDelegate::OwnedByWidgetPassKey()); - std::unique_ptr<views::Widget> widget_ = CreateTestWidget(std::move(params)); - widget_->Show(); - views::Widget::ReparentNativeView(widget_->GetNativeView(), - root_widget_->GetNativeView()); - - EXPECT_TRUE(widget_->IsVisible()); - tab_strip_scroll_container_->OnContentsScrolledCallback(); - EXPECT_FALSE(widget_->IsVisible()); -}
diff --git a/chrome/browser/ui/views/tabs/tab_strip_scroll_session_unittest.cc b/chrome/browser/ui/views/tabs/tab_strip_scroll_session_unittest.cc deleted file mode 100644 index 46bf484a..0000000 --- a/chrome/browser/ui/views/tabs/tab_strip_scroll_session_unittest.cc +++ /dev/null
@@ -1,283 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/dragging/tab_strip_scroll_session.h" - -#include <memory> - -#include "base/test/scoped_feature_list.h" -#include "base/timer/mock_timer.h" -#include "chrome/browser/ui/tabs/features.h" -#include "chrome/browser/ui/ui_features.h" -#include "chrome/browser/ui/views/tabs/dragging/tab_drag_controller.h" -#include "chrome/test/views/chrome_views_test_base.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "ui/gfx/geometry/point_f.h" -#include "ui/views/controls/scroll_view.h" -#include "ui/views/view.h" - -using ::testing::_; -using ::testing::AtLeast; -using ::testing::DoAll; -using ::testing::Return; -using ::testing::SaveArg; - -// Mock class for scroll_manager -class MockTabDragWithScrollManager : public TabDragWithScrollManager { - public: - MockTabDragWithScrollManager() = default; - ~MockTabDragWithScrollManager() override = default; - MockTabDragWithScrollManager(const MockTabDragWithScrollManager&) = delete; - MockTabDragWithScrollManager(MockTabDragWithScrollManager&&) = delete; - MockTabDragWithScrollManager& operator=(const MockTabDragWithScrollManager&) = - delete; - MockTabDragWithScrollManager& operator=(MockTabDragWithScrollManager&&) = - delete; - - MOCK_METHOD(void, MoveAttached, (gfx::Point point_in_screen), ()); - MOCK_METHOD(views::ScrollView*, GetScrollView, (), ()); - MOCK_METHOD(gfx::Point, GetLastPointInScreen, (), ()); - MOCK_METHOD(views::View*, GetAttachedContext, (), ()); - MOCK_METHOD(gfx::Rect, GetEnclosingRectForDraggedTabs, (), ()); -}; - -class TabStripScrollSessionWithTimerTestBase : public ChromeViewsTestBase { - public: - explicit TabStripScrollSessionWithTimerTestBase( - TabStripScrollSession::ScrollWithDragStrategy strategy) - : strategy_(strategy) { - scoped_feature_list_.InitWithFeatures({tabs::kScrollableTabStrip}, {}); - } - - ~TabStripScrollSessionWithTimerTestBase() override = default; - - void SetUp() override { - ChromeViewsTestBase::SetUp(); - - mock_timer_ = new base::MockRepeatingTimer(); - drag_controller_ = std::make_unique<MockTabDragWithScrollManager>(); - - if (strategy_ == - TabStripScrollSession::ScrollWithDragStrategy::kVariableSpeed) { - scroll_session_ = std::make_unique<TabStripScrollSessionWithTimer>( - *(drag_controller_.get()), - TabStripScrollSessionWithTimer::ScrollSessionTimerType:: - kVariableTimer); - } else { - scroll_session_ = std::make_unique<TabStripScrollSessionWithTimer>( - *(drag_controller_.get()), - TabStripScrollSessionWithTimer::ScrollSessionTimerType:: - kConstantTimer); - } - scroll_session_->SetTimerForTesting(mock_timer_); - - scroll_view_ = std::make_unique<views::ScrollView>(); - scroll_view_->SetBounds(0, 0, - 5 * TabStyle::Get()->GetMinimumInactiveWidth(), 5); - - attached_context_ = - scroll_view_->SetContents(std::make_unique<views::View>()); - attached_context_->SetBounds( - 0, 0, 10 * TabStyle::Get()->GetMinimumInactiveWidth(), 5); - } - - void TearDown() override { ChromeViewsTestBase::TearDown(); } - - protected: - TabStripScrollSession::ScrollWithDragStrategy strategy_ = - TabStripScrollSession::ScrollWithDragStrategy::kDisabled; - std::unique_ptr<MockTabDragWithScrollManager> drag_controller_; - std::unique_ptr<views::ScrollView> scroll_view_; - std::unique_ptr<TabStripScrollSessionWithTimer> scroll_session_; - raw_ptr<views::View, DanglingUntriaged> attached_context_; - raw_ptr<base::MockRepeatingTimer> mock_timer_; - base::test::ScopedFeatureList scoped_feature_list_; -}; - -class TabStripScrollSessionTestWithConstantSpeed - : public TabStripScrollSessionWithTimerTestBase { - public: - TabStripScrollSessionTestWithConstantSpeed() - : TabStripScrollSessionWithTimerTestBase( - TabStripScrollSession::ScrollWithDragStrategy::kConstantSpeed) {} - TabStripScrollSessionTestWithConstantSpeed( - const TabStripScrollSessionTestWithConstantSpeed&) = delete; - TabStripScrollSessionTestWithConstantSpeed& operator=( - const TabStripScrollSessionTestWithConstantSpeed&) = delete; - ~TabStripScrollSessionTestWithConstantSpeed() override = default; - - private: -}; - -// When the tab scroll direction is `kNoScroll` then do not start the scroll -// session -TEST_F(TabStripScrollSessionTestWithConstantSpeed, - GivenNoScrollWhenScrollSessionMaybeStartThenTimerDoesNotRun) { - // create a dragged_tab_rect outside of the right and left scrollable regions - const gfx::Rect dragged_tabs_rect = gfx::Rect( - scroll_view_->GetVisibleRect().top_right().x() - - 2 * scroll_session_->GetScrollableOffsetFromScrollViewForTesting(), - 0, (scroll_session_->GetScrollableOffsetFromScrollViewForTesting() / 2), - 1); - - EXPECT_CALL(*drag_controller_, GetAttachedContext()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(attached_context_)); - EXPECT_CALL(*drag_controller_, GetEnclosingRectForDraggedTabs()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(dragged_tabs_rect)); - EXPECT_CALL(*drag_controller_, GetScrollView()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(scroll_view_.get())); - - // assert - scroll_session_->MaybeStart(); - EXPECT_FALSE(mock_timer_->IsRunning()); -} - -// If there is no attached context to the `drag_controller_`, then do not run -// the timer. -TEST_F(TabStripScrollSessionTestWithConstantSpeed, - GivenNoAttachedContextWhenScrollSessionMaybeStartThenTimerDoesNotRun) { - // arrange - EXPECT_CALL(*drag_controller_, GetAttachedContext()) - .Times(1) - .WillOnce(Return(nullptr)); - - // act - scroll_session_->MaybeStart(); - - // assert - EXPECT_FALSE(mock_timer_->IsRunning()); -} - -// When scroll session starts with correct arguments, timer callback is invoked -TEST_F(TabStripScrollSessionTestWithConstantSpeed, - GivenScrollSessionWhenMaybeStartThenTimerCallback) { - // create a rect that is in the right scrollable region. - const gfx::Rect dragged_tabs_rect = - gfx::Rect(scroll_view_->GetVisibleRect().top_right().x(), 0, 1, 1); - - EXPECT_CALL(*drag_controller_, GetAttachedContext()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(attached_context_)); - - EXPECT_CALL(*drag_controller_, GetScrollView()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(scroll_view_.get())); - - EXPECT_CALL(*drag_controller_, GetLastPointInScreen()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(gfx::Point())); - - EXPECT_CALL(*drag_controller_, GetEnclosingRectForDraggedTabs()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(dragged_tabs_rect)); - - EXPECT_CALL(*drag_controller_, MoveAttached(_)).Times(1); - - // act - scroll_session_->MaybeStart(); - - // make sure timer is running - EXPECT_TRUE(mock_timer_->IsRunning()); - - if (mock_timer_->IsRunning()) { - mock_timer_->Fire(); - } - - // assert - EXPECT_TRUE(scroll_session_->IsRunning()); - EXPECT_EQ(ceil(scroll_session_->CalculateBaseScrollOffset()), - scroll_view_->GetVisibleRect().x()); -} - -// When scroll is started with one direction but in the callback check, -// the direction calculation is different, stop the timer. -TEST_F(TabStripScrollSessionTestWithConstantSpeed, - GivenScrollingTowardsRightWhenShouldScrollToLeftThenStopTimer) { - // arrange - const gfx::Rect dragged_tabs_rect_for_scrolling_left = - gfx::Rect(scroll_view_->GetVisibleRect().origin().x(), 0, 1, 1); - const gfx::Rect dragged_tabs_rect_for_scrolling_right = - gfx::Rect(scroll_view_->GetVisibleRect().top_right().x(), 0, 1, 1); - - EXPECT_CALL(*drag_controller_, GetAttachedContext()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(attached_context_)); - EXPECT_CALL(*drag_controller_, GetScrollView()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(scroll_view_.get())); - EXPECT_CALL(*drag_controller_, GetEnclosingRectForDraggedTabs()) - .Times(AtLeast(1)) - .WillOnce(Return(dragged_tabs_rect_for_scrolling_right)) - .WillRepeatedly(Return(dragged_tabs_rect_for_scrolling_left)); - EXPECT_CALL(*drag_controller_, MoveAttached(_)).Times(0); - - // act - scroll_session_->MaybeStart(); - // check if timer is running - EXPECT_TRUE(mock_timer_->IsRunning()); - mock_timer_->Fire(); - // assert - EXPECT_FALSE(scroll_session_->IsRunning()); - EXPECT_EQ(scroll_view_->GetVisibleRect().x(), 0); -} - -class TabStripScrollSessionTestWithVariableSpeed - : public TabStripScrollSessionWithTimerTestBase { - public: - TabStripScrollSessionTestWithVariableSpeed() - : TabStripScrollSessionWithTimerTestBase( - TabStripScrollSession::ScrollWithDragStrategy::kVariableSpeed) {} - TabStripScrollSessionTestWithVariableSpeed( - const TabStripScrollSessionTestWithVariableSpeed&) = delete; - TabStripScrollSessionTestWithVariableSpeed& operator=( - const TabStripScrollSessionTestWithVariableSpeed&) = delete; - ~TabStripScrollSessionTestWithVariableSpeed() override = default; - - private: -}; - -// When scroll session starts with correct arguments, timer callback is invoked -TEST_F(TabStripScrollSessionTestWithVariableSpeed, - GivenScrollSessionWhenMaybeStartThenTimerCallback) { - // create a rect starting from the scrollable region to half of the end of the - // attached_context - const gfx::Rect dragged_tabs_rect = gfx::Rect( - scroll_view_->GetVisibleRect().top_right().x() - - scroll_session_->GetScrollableOffsetFromScrollViewForTesting(), - 0, (scroll_session_->GetScrollableOffsetFromScrollViewForTesting() / 2), - 1); - - EXPECT_CALL(*drag_controller_, GetAttachedContext()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(attached_context_)); - EXPECT_CALL(*drag_controller_, GetScrollView()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(scroll_view_.get())); - - EXPECT_CALL(*drag_controller_, GetEnclosingRectForDraggedTabs()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(dragged_tabs_rect)); - - EXPECT_CALL(*drag_controller_, GetLastPointInScreen()) - .Times(AtLeast(1)) - .WillRepeatedly(Return(gfx::Point())); - - EXPECT_CALL(*drag_controller_, MoveAttached(_)).Times(1); - - scroll_session_->MaybeStart(); - EXPECT_TRUE(mock_timer_->IsRunning()); - - if (mock_timer_->IsRunning()) { - mock_timer_->Fire(); - } - - EXPECT_TRUE(scroll_session_->IsRunning()); - EXPECT_GE(scroll_view_->GetVisibleRect().x(), 0); - EXPECT_LE(scroll_view_->GetVisibleRect().x(), - ceil(scroll_session_->CalculateBaseScrollOffset())); -}
diff --git a/chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.cc b/chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.cc deleted file mode 100644 index afb408d..0000000 --- a/chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.cc +++ /dev/null
@@ -1,277 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.h" - -#include "base/notreached.h" -#include "cc/paint/paint_shader.h" -#include "chrome/browser/ui/tabs/features.h" -#include "chrome/browser/ui/views/frame/browser_frame_view.h" -#include "chrome/browser/ui/views/tabs/tab_style_views.h" -#include "third_party/skia/include/core/SkColor.h" -#include "ui/gfx/canvas.h" -#include "ui/views/controls/scroll_view.h" -#include "ui/views/view_utils.h" - -namespace { - -// Must be kept the same as kTabScrollingButtonPositionVariations values -enum OverflowFeatureFlag { - kDefault = 0, - kDivider = 1, - kFade = 2, - kShadow = 3, -}; - -} // anonymous namespace - -TabStripScrollingOverflowIndicatorStrategy:: - TabStripScrollingOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color) - : scroll_view_(scroll_view), - get_frame_color_(get_frame_color), - get_shadow_color_(get_shadow_color) {} - -TabStripScrollingOverflowIndicatorStrategy:: - ~TabStripScrollingOverflowIndicatorStrategy() = default; - -// static -std::unique_ptr<TabStripScrollingOverflowIndicatorStrategy> -TabStripScrollingOverflowIndicatorStrategy::CreateFromFeatureFlag( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color) { - const int overflow_feature_flag = base::GetFieldTrialParamByFeatureAsInt( - tabs::kScrollableTabStripOverflow, - tabs::kScrollableTabStripOverflowModeName, OverflowFeatureFlag::kDefault); - - switch (overflow_feature_flag) { - case OverflowFeatureFlag::kDivider: - return std::make_unique<DividerOverflowIndicatorStrategy>( - scroll_view, get_frame_color, get_shadow_color); - case OverflowFeatureFlag::kFade: - return std::make_unique<FadeOverflowIndicatorStrategy>( - scroll_view, get_frame_color, get_shadow_color); - case OverflowFeatureFlag::kShadow: - case OverflowFeatureFlag::kDefault: - return std::make_unique<ShadowOverflowIndicatorStrategy>( - scroll_view, get_frame_color, get_shadow_color); - default: - NOTREACHED(); - } -} - -GradientIndicatorView::GradientIndicatorView( - views::OverflowIndicatorAlignment side, - int opaque_width, - int shadow_opaque_width, - int shadow_blur_width) - : side_(side), - opaque_width_(opaque_width), - shadow_opaque_width_(shadow_opaque_width), - shadow_blur_width_(shadow_blur_width) { - DCHECK(side_ == views::OverflowIndicatorAlignment::kLeft || - side_ == views::OverflowIndicatorAlignment::kRight); - opaque_width_ = opaque_width; - shadow_opaque_width_ = shadow_opaque_width; - shadow_blur_width_ = shadow_blur_width; -} - -GradientIndicatorView::GradientIndicatorView( - views::OverflowIndicatorAlignment side) - : GradientIndicatorView(side, - kDefaultOpaqueWidth, - kDefaultShadowSpread, - kDefaultShadowBlur) {} - -void GradientIndicatorView::OnPaint(gfx::Canvas* canvas) { - // Mirror how the indicator is painted for the right vs left sides. - SkPoint points[2]; - if (side_ == views::OverflowIndicatorAlignment::kLeft) { - points[0].iset(GetContentsBounds().origin().x(), GetContentsBounds().y()); - points[1].iset(GetContentsBounds().right(), GetContentsBounds().y()); - } else { - points[0].iset(GetContentsBounds().right(), GetContentsBounds().y()); - points[1].iset(GetContentsBounds().origin().x(), GetContentsBounds().y()); - } - - SkColor4f colors[5]; - SkScalar color_positions[5]; - // Paint an opaque region on the outside. - colors[0] = frame_color_; - colors[1] = frame_color_; - color_positions[0] = 0; - color_positions[1] = static_cast<float>(opaque_width_) / GetTotalWidth(); - - // Paint a shadow-like gradient on the inside. - colors[2] = shadow_color_; - colors[3] = shadow_color_; - colors[4] = shadow_color_; - colors[4].fA = 0.0f; - color_positions[2] = static_cast<float>(opaque_width_) / GetTotalWidth(); - color_positions[3] = - static_cast<float>(opaque_width_ + shadow_opaque_width_) / - GetTotalWidth(); - color_positions[4] = 1; - - cc::PaintFlags flags; - flags.setShader(cc::PaintShader::MakeLinearGradient( - points, colors, color_positions, 5, SkTileMode::kClamp)); - canvas->DrawRect(GetContentsBounds(), flags); -} - -void GradientIndicatorView::SetShadowColor(SkColor4f new_shadow_color) { - shadow_color_ = new_shadow_color; - SchedulePaint(); -} - -void GradientIndicatorView::SetFrameColor(SkColor4f new_frame_color) { - frame_color_ = new_frame_color; - SchedulePaint(); -} - -BEGIN_METADATA(GradientIndicatorView) -END_METADATA - -GradientOverflowIndicatorStrategy::GradientOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color) - : TabStripScrollingOverflowIndicatorStrategy(scroll_view, - get_frame_color, - get_shadow_color) {} - -void GradientOverflowIndicatorStrategy::Init() { - scroll_view()->SetDrawOverflowIndicator(true); - - std::unique_ptr<GradientIndicatorView> left_overflow_indicator = - std::make_unique<GradientIndicatorView>( - views::OverflowIndicatorAlignment::kLeft); - left_overflow_indicator_ = left_overflow_indicator.get(); - - std::unique_ptr<GradientIndicatorView> right_overflow_indicator = - std::make_unique<GradientIndicatorView>( - views::OverflowIndicatorAlignment::kRight); - right_overflow_indicator_ = right_overflow_indicator.get(); - - scroll_view()->SetCustomOverflowIndicator( - views::OverflowIndicatorAlignment::kLeft, - std::move(left_overflow_indicator), - left_overflow_indicator_->GetTotalWidth(), false); - - scroll_view()->SetCustomOverflowIndicator( - views::OverflowIndicatorAlignment::kRight, - std::move(right_overflow_indicator), - right_overflow_indicator_->GetTotalWidth(), false); -} - -ShadowOverflowIndicatorStrategy::ShadowOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color) - : GradientOverflowIndicatorStrategy(scroll_view, - get_frame_color, - get_shadow_color) {} - -void ShadowOverflowIndicatorStrategy::FrameColorsChanged() { - const SkColor4f frame_color = get_frame_color(); - const SkColor4f shadow_color = get_shadow_color(); - - left_overflow_indicator()->SetFrameColor(frame_color); - right_overflow_indicator()->SetFrameColor(frame_color); - - left_overflow_indicator()->SetShadowColor(shadow_color); - right_overflow_indicator()->SetShadowColor(shadow_color); -} - -FadeOverflowIndicatorStrategy::FadeOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color) - : GradientOverflowIndicatorStrategy(scroll_view, - get_frame_color, - get_shadow_color) {} - -void FadeOverflowIndicatorStrategy::Init() { - scroll_view()->SetDrawOverflowIndicator(true); - - std::unique_ptr<GradientIndicatorView> left_overflow_indicator = - std::make_unique<GradientIndicatorView>( - views::OverflowIndicatorAlignment::kLeft); - left_overflow_indicator_ = left_overflow_indicator.get(); - - std::unique_ptr<GradientIndicatorView> right_overflow_indicator = - std::make_unique<GradientIndicatorView>( - views::OverflowIndicatorAlignment::kRight); - right_overflow_indicator_ = right_overflow_indicator.get(); - - const int min_tab_width = TabStyle::Get()->GetMinimumInactiveWidth(); - - left_overflow_indicator_->SetShadowBlurWidth(std::min(64, min_tab_width * 2)); - right_overflow_indicator_->SetShadowBlurWidth( - std::min(64, min_tab_width * 2)); - - scroll_view()->SetCustomOverflowIndicator( - views::OverflowIndicatorAlignment::kLeft, - std::move(left_overflow_indicator), - left_overflow_indicator_->GetTotalWidth(), false); - - scroll_view()->SetCustomOverflowIndicator( - views::OverflowIndicatorAlignment::kRight, - std::move(right_overflow_indicator), - right_overflow_indicator_->GetTotalWidth(), false); -} - -void FadeOverflowIndicatorStrategy::FrameColorsChanged() { - const SkColor4f frame_color = get_frame_color(); - - left_overflow_indicator()->SetFrameColor(frame_color); - right_overflow_indicator()->SetFrameColor(frame_color); - - left_overflow_indicator()->SetShadowColor(frame_color); - right_overflow_indicator()->SetShadowColor(frame_color); -} - -DividerOverflowIndicatorStrategy::DividerOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color) - : GradientOverflowIndicatorStrategy(scroll_view, - get_frame_color, - get_shadow_color) {} - -void DividerOverflowIndicatorStrategy::Init() { - scroll_view()->SetDrawOverflowIndicator(true); - - std::unique_ptr<GradientIndicatorView> left_overflow_indicator = - std::make_unique<GradientIndicatorView>( - views::OverflowIndicatorAlignment::kLeft); - left_overflow_indicator_ = left_overflow_indicator.get(); - - std::unique_ptr<GradientIndicatorView> right_overflow_indicator = - std::make_unique<GradientIndicatorView>( - views::OverflowIndicatorAlignment::kRight); - right_overflow_indicator_ = right_overflow_indicator.get(); - - left_overflow_indicator_->SetOpaqueWidth(0); - right_overflow_indicator_->SetOpaqueWidth(0); - - scroll_view()->SetCustomOverflowIndicator( - views::OverflowIndicatorAlignment::kLeft, - std::move(left_overflow_indicator), - left_overflow_indicator_->GetTotalWidth(), false); - - scroll_view()->SetCustomOverflowIndicator( - views::OverflowIndicatorAlignment::kRight, - std::move(right_overflow_indicator), - right_overflow_indicator_->GetTotalWidth(), false); -} - -void DividerOverflowIndicatorStrategy::FrameColorsChanged() { - const SkColor4f shadow_color = get_shadow_color(); - left_overflow_indicator()->SetShadowColor(shadow_color); - right_overflow_indicator()->SetShadowColor(shadow_color); -}
diff --git a/chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.h b/chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.h deleted file mode 100644 index 3bc3266c..0000000 --- a/chrome/browser/ui/views/tabs/tab_strip_scrolling_overflow_indicator_strategy.h +++ /dev/null
@@ -1,181 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_SCROLLING_OVERFLOW_INDICATOR_STRATEGY_H_ -#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_SCROLLING_OVERFLOW_INDICATOR_STRATEGY_H_ - -#include "base/functional/callback.h" -#include "base/memory/raw_ptr.h" -#include "chrome/browser/ui/ui_features.h" -#include "ui/base/metadata/metadata_header_macros.h" -#include "ui/base/metadata/metadata_impl_macros.h" -#include "ui/views/controls/scroll_view.h" -#include "ui/views/view.h" - -/* Class for defining the different Overflow View Strategies, some do not have - * a corresponding view class and require different methods for displaying than - * scroll views default overflow indicator */ -class TabStripScrollingOverflowIndicatorStrategy { - public: - TabStripScrollingOverflowIndicatorStrategy() = delete; - explicit TabStripScrollingOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color); - virtual ~TabStripScrollingOverflowIndicatorStrategy(); - - // Function to get the Featured Overflow Indicator Strategy - static std::unique_ptr<TabStripScrollingOverflowIndicatorStrategy> - CreateFromFeatureFlag(views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color); - - // Performs the setup for the Strategy. Initialize any views for overflow to - // the scroll view here. - virtual void Init() = 0; - - // When frame colors are changed the overflow indicators need to react. - virtual void FrameColorsChanged() {} - - // Accessors. - views::ScrollView* scroll_view() const { return scroll_view_; } - SkColor4f get_frame_color() const { return get_frame_color_.Run(); } - SkColor4f get_shadow_color() const { return get_shadow_color_.Run(); } - - private: - // The scroll view the indicators are attached to/owned by if they are views. - const raw_ptr<views::ScrollView> scroll_view_; - - // A callback to get the current frame color. - const base::RepeatingCallback<SkColor4f()> get_frame_color_; - - // A callback to get the shadow color. - const base::RepeatingCallback<SkColor4f()> get_shadow_color_; - - // The callback used to update the inidicators from the scrollview. - base::CallbackListSubscription on_contents_scrolled_subscription_; -}; - -class GradientIndicatorView : public views::View { - METADATA_HEADER(GradientIndicatorView, views::View) - - public: - explicit GradientIndicatorView(views::OverflowIndicatorAlignment side); - GradientIndicatorView(views::OverflowIndicatorAlignment side, - int opaque_width, - int shadow_opaque_width, - int shadow_blur_width); - // Making this smaller than the margin provided by the leftmost/rightmost - // tab's tail (TabStyle::kTabOverlap / 2) makes the transition in and out of - // the scroll state smoother. - static constexpr int kDefaultOpaqueWidth = 8; - - // The width of the full opacity part of the shadow. - static constexpr int kDefaultShadowSpread = 1; - - // The width of the soft edge of the shadow. - static constexpr int kDefaultShadowBlur = 3; - - // views::View overrides: - void OnPaint(gfx::Canvas* canvas) override; - - // Mutators for colors for the overflow. - void SetShadowColor(SkColor4f new_shadow_color); - void SetFrameColor(SkColor4f new_frame_color); - - // Mutators for widths for the overflow. - void SetOpaqueWidth(int opaque_width) { opaque_width_ = opaque_width; } - void SetShadowOpaqueWidth(int shadow_opaque_width) { - shadow_opaque_width_ = shadow_opaque_width; - } - void SetShadowBlurWidth(int shadow_blur_width) { - shadow_blur_width_ = shadow_blur_width; - } - - // Accessor for the full width of the GradientView - int GetTotalWidth() { - return opaque_width_ + shadow_opaque_width_ + shadow_blur_width_; - } - - private: - // Which side of the scroll view the indicator is on. - const views::OverflowIndicatorAlignment side_; - - // The color used for the shadow part of the view. - SkColor4f shadow_color_; - - // The color used for the frame part of the view. The frame hides the folio - // bottom of the tab on the sides. - SkColor4f frame_color_; - - // Configuration parameters for painting the indicator. - int opaque_width_; - int shadow_opaque_width_; - int shadow_blur_width_; -}; - -class GradientOverflowIndicatorStrategy - : public TabStripScrollingOverflowIndicatorStrategy { - public: - GradientOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color); - ~GradientOverflowIndicatorStrategy() override = default; - - void Init() override; - - GradientIndicatorView* left_overflow_indicator() const { - return left_overflow_indicator_; - } - - GradientIndicatorView* right_overflow_indicator() const { - return right_overflow_indicator_; - } - - protected: - // The views, owned by `scroll_view_`, that indicate that there are more - // tabs overflowing to the left or right. - raw_ptr<GradientIndicatorView> left_overflow_indicator_; - raw_ptr<GradientIndicatorView> right_overflow_indicator_; -}; - -class ShadowOverflowIndicatorStrategy - : public GradientOverflowIndicatorStrategy { - public: - ShadowOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color); - ~ShadowOverflowIndicatorStrategy() override = default; - - void FrameColorsChanged() override; -}; - -class FadeOverflowIndicatorStrategy : public GradientOverflowIndicatorStrategy { - public: - FadeOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color); - ~FadeOverflowIndicatorStrategy() override = default; - - void Init() override; - void FrameColorsChanged() override; -}; - -class DividerOverflowIndicatorStrategy - : public GradientOverflowIndicatorStrategy { - public: - DividerOverflowIndicatorStrategy( - views::ScrollView* scroll_view, - base::RepeatingCallback<SkColor4f()> get_frame_color, - base::RepeatingCallback<SkColor4f()> get_shadow_color); - ~DividerOverflowIndicatorStrategy() override = default; - - void Init() override; - void FrameColorsChanged() override; -}; - -#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_SCROLLING_OVERFLOW_INDICATOR_STRATEGY_H_
diff --git a/chrome/browser/ui/views/tabs/tab_strip_unittest.cc b/chrome/browser/ui/views/tabs/tab_strip_unittest.cc index 1a199f1..4e33d3e 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_unittest.cc
@@ -60,14 +60,11 @@ struct TabStripUnittestParams { const bool touch_ui; - const bool scrolling_enabled; }; constexpr TabStripUnittestParams kTabStripUnittestParams[] = { - {false, true}, - {false, false}, - {true, false}, - {true, true}, + {false}, + {true}, }; } // namespace @@ -106,16 +103,10 @@ // TabStripTestBase contains no test cases. class TabStripTestBase : public ChromeViewsTestBase { public: - TabStripTestBase(bool touch_ui, bool scrolling_enabled) + explicit TabStripTestBase(bool touch_ui) : touch_ui_scoper_(touch_ui), animation_mode_reset_(gfx::AnimationTestApi::SetRichAnimationRenderMode( - gfx::Animation::RichAnimationRenderMode::FORCE_ENABLED)) { - if (scrolling_enabled) { - scoped_feature_list_.InitWithFeatures({tabs::kScrollableTabStrip}, {}); - } else { - scoped_feature_list_.InitWithFeatures({}, {tabs::kScrollableTabStrip}); - } - } + gfx::Animation::RichAnimationRenderMode::FORCE_ENABLED)) {} TabStripTestBase(const TabStripTestBase&) = delete; TabStripTestBase& operator=(const TabStripTestBase&) = delete; ~TabStripTestBase() override = default; @@ -239,8 +230,7 @@ : public TabStripTestBase, public testing::WithParamInterface<TabStripUnittestParams> { public: - TabStripTest() - : TabStripTestBase(GetParam().touch_ui, GetParam().scrolling_enabled) {} + TabStripTest() : TabStripTestBase(GetParam().touch_ui) {} TabStripTest(const TabStripTest&) = delete; TabStripTest& operator=(const TabStripTest&) = delete; ~TabStripTest() override = default; @@ -849,137 +839,6 @@ EXPECT_TRUE(tab0->GetTabIconForTesting()->GetActiveStateForTesting()); } -// TabStripTestWithScrollingDisabled contains tests that will run with scrolling -// disabled. -// TODO(http://crbug.com/951078) Remove these tests as well as tests in -// TabStripTest with scrolling disabled once tab scrolling is fully launched. -class TabStripTestWithScrollingDisabled - : public TabStripTestBase, - public testing::WithParamInterface<bool> { - public: - TabStripTestWithScrollingDisabled() : TabStripTestBase(GetParam(), false) {} - TabStripTestWithScrollingDisabled(const TabStripTestWithScrollingDisabled&) = - delete; - TabStripTestWithScrollingDisabled& operator=( - const TabStripTestWithScrollingDisabled&) = delete; - ~TabStripTestWithScrollingDisabled() override = default; -}; - -TEST_P(TabStripTestWithScrollingDisabled, VisibilityInOverflow) { - constexpr int kInitialWidth = 250; - SetMaxTabStripWidth(kInitialWidth); - - // The first tab added to a reasonable-width strip should be visible. If we - // add enough additional tabs, eventually one should be invisible due to - // overflow. - int invisible_tab_index = 0; - for (; invisible_tab_index < 100; ++invisible_tab_index) { - controller_->AddTab(invisible_tab_index, TabActive::kInactive); - CompleteAnimationAndLayout(); - if (!tab_strip_->tab_at(invisible_tab_index)->GetVisible()) { - break; - } - } - EXPECT_GT(invisible_tab_index, 0); - EXPECT_LT(invisible_tab_index, 100); - - // The tabs before the invisible tab should still be visible. - for (int i = 0; i < invisible_tab_index; ++i) { - EXPECT_TRUE(tab_strip_->tab_at(i)->GetVisible()); - } - - // Enlarging the strip should result in the last tab becoming visible. - SetMaxTabStripWidth(kInitialWidth * 2); - EXPECT_TRUE(tab_strip_->tab_at(invisible_tab_index)->GetVisible()); - - // Shrinking it again should re-hide the last tab. - SetMaxTabStripWidth(kInitialWidth); - EXPECT_FALSE(tab_strip_->tab_at(invisible_tab_index)->GetVisible()); - - // Shrinking it still more should make more tabs invisible, though not all. - // All the invisible tabs should be at the end of the strip. - SetMaxTabStripWidth(kInitialWidth / 2); - int i = 0; - for (; i < invisible_tab_index; ++i) { - if (!tab_strip_->tab_at(i)->GetVisible()) { - break; - } - } - ASSERT_GT(i, 0); - EXPECT_LT(i, invisible_tab_index); - invisible_tab_index = i; - for (int j = invisible_tab_index + 1; j < tab_strip_->GetTabCount(); ++j) { - EXPECT_FALSE(tab_strip_->tab_at(j)->GetVisible()); - } - - // When we're already in overflow, adding tabs at the beginning or end of - // the strip should not change how many tabs are visible. - controller_->AddTab(tab_strip_->GetTabCount(), TabActive::kInactive); - CompleteAnimationAndLayout(); - EXPECT_TRUE(tab_strip_->tab_at(invisible_tab_index - 1)->GetVisible()); - EXPECT_FALSE(tab_strip_->tab_at(invisible_tab_index)->GetVisible()); - controller_->AddTab(0, TabActive::kInactive); - CompleteAnimationAndLayout(); - EXPECT_TRUE(tab_strip_->tab_at(invisible_tab_index - 1)->GetVisible()); - EXPECT_FALSE(tab_strip_->tab_at(invisible_tab_index)->GetVisible()); - - // If we remove enough tabs, all the tabs should be visible. - for (int j = tab_strip_->GetTabCount() - 1; j >= invisible_tab_index; --j) { - controller_->RemoveTab(j); - } - CompleteAnimationAndLayout(); - EXPECT_TRUE(tab_strip_->tab_at(tab_strip_->GetTabCount() - 1)->GetVisible()); -} - -TEST_P(TabStripTestWithScrollingDisabled, GroupedTabSlotOverflowVisibility) { - constexpr int kInitialWidth = 250; - SetMaxTabStripWidth(kInitialWidth); - - // The first tab added to a reasonable-width strip should be visible. If we - // add enough additional tabs, eventually one should be invisible due to - // overflow. - int invisible_tab_index = 0; - for (; invisible_tab_index < 100; ++invisible_tab_index) { - controller_->AddTab(invisible_tab_index, TabActive::kInactive); - CompleteAnimationAndLayout(); - if (!tab_strip_->tab_at(invisible_tab_index)->GetVisible()) { - break; - } - } - ASSERT_GT(invisible_tab_index, 0); - ASSERT_LT(invisible_tab_index, 100); - - // The tabs before the invisible tab should still be visible. - for (int i = 0; i < invisible_tab_index; ++i) { - ASSERT_TRUE(tab_strip_->tab_at(i)->GetVisible()); - } - - // The group header of an invisible tab should not be visible. - std::optional<tab_groups::TabGroupId> group1 = - tab_groups::TabGroupId::GenerateNew(); - controller_->MoveTabIntoGroup(invisible_tab_index, group1); - CompleteAnimationAndLayout(); - ASSERT_FALSE(tab_strip_->tab_at(invisible_tab_index)->GetVisible()); - EXPECT_FALSE(tab_strip_->group_header(group1.value())->GetVisible()); - - // The group header of a visible tab should be visible when the group is - // expanded and collapsed. - std::optional<tab_groups::TabGroupId> group2 = - tab_groups::TabGroupId::GenerateNew(); - controller_->MoveTabIntoGroup(0, group2); - CompleteAnimationAndLayout(); - ASSERT_FALSE(controller_->IsGroupCollapsed(group2.value())); - EXPECT_TRUE(tab_strip_->group_header(group2.value())->GetVisible()); - controller_->ToggleTabGroupCollapsedState( - group2.value(), ToggleTabGroupCollapsedStateOrigin::kMenuAction); - ASSERT_TRUE(controller_->IsGroupCollapsed(group2.value())); - EXPECT_TRUE(tab_strip_->group_header(group2.value())->GetVisible()); -} - INSTANTIATE_TEST_SUITE_P(All, TabStripTest, ::testing::ValuesIn(kTabStripUnittestParams)); - -INSTANTIATE_TEST_SUITE_P(All, - TabStripTestWithScrollingDisabled, - ::testing::Values(false, true));
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc index e4fec82..8cd7f5f 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
@@ -7215,9 +7215,17 @@ helper_.CheckWindowControlsOverlayToggle(Site::kMinimalUi, IsShown::kShown); } +// TODO(crbug.com/463520433): Fix flaky tests. +#if BUILDFLAG(IS_LINUX) +#define MAYBE_WAI_InstallMenuMinimalUi_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_ManifestUpdateDisplayMinimalUiWco_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_EnableWindowControlsOverlayMinimalUi \ + DISABLED_WAI_InstallMenuMinimalUi_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_ManifestUpdateDisplayMinimalUiWco_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_EnableWindowControlsOverlayMinimalUi +#else +#define MAYBE_WAI_InstallMenuMinimalUi_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_ManifestUpdateDisplayMinimalUiWco_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_EnableWindowControlsOverlayMinimalUi \ + WAI_InstallMenuMinimalUi_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_ManifestUpdateDisplayMinimalUiWco_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_EnableWindowControlsOverlayMinimalUi +#endif IN_PROC_BROWSER_TEST_F( WebAppIntegration, - WAI_InstallMenuMinimalUi_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_ManifestUpdateDisplayMinimalUiWco_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_EnableWindowControlsOverlayMinimalUi) { + MAYBE_WAI_InstallMenuMinimalUi_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_ManifestUpdateDisplayMinimalUiWco_MaybeClosePwa_LaunchFromPlatformShortcutMinimalUi_EnableWindowControlsOverlayMinimalUi) { // Test contents are generated by script. Please do not modify! // See `docs/webapps/why-is-this-test-failing.md` or // `docs/webapps/integration-testing-framework` for more info. @@ -8035,9 +8043,17 @@ helper_.CheckWindowControlsOverlay(Site::kWco, IsOn::kOff); } +// TODO(crbug.com/463520433): Fix flaky tests. +#if BUILDFLAG(IS_LINUX) +#define MAYBE_WAI_InstallOmniboxIconWco_MaybeClosePwa_LaunchFromPlatformShortcutWco_ManifestUpdateDisplayWcoStandalone_MaybeClosePwa_LaunchFromPlatformShortcutWco \ + DISABLED_WAI_InstallOmniboxIconWco_MaybeClosePwa_LaunchFromPlatformShortcutWco_ManifestUpdateDisplayWcoStandalone_MaybeClosePwa_LaunchFromPlatformShortcutWco +#else +#define MAYBE_WAI_InstallOmniboxIconWco_MaybeClosePwa_LaunchFromPlatformShortcutWco_ManifestUpdateDisplayWcoStandalone_MaybeClosePwa_LaunchFromPlatformShortcutWco \ + WAI_InstallOmniboxIconWco_MaybeClosePwa_LaunchFromPlatformShortcutWco_ManifestUpdateDisplayWcoStandalone_MaybeClosePwa_LaunchFromPlatformShortcutWco +#endif IN_PROC_BROWSER_TEST_F( WebAppIntegration, - WAI_InstallOmniboxIconWco_MaybeClosePwa_LaunchFromPlatformShortcutWco_ManifestUpdateDisplayWcoStandalone_MaybeClosePwa_LaunchFromPlatformShortcutWco) { + MAYBE_WAI_InstallOmniboxIconWco_MaybeClosePwa_LaunchFromPlatformShortcutWco_ManifestUpdateDisplayWcoStandalone_MaybeClosePwa_LaunchFromPlatformShortcutWco) { // Test contents are generated by script. Please do not modify! // See `docs/webapps/why-is-this-test-failing.md` or // `docs/webapps/integration-testing-framework` for more info.
diff --git a/chrome/browser/ui/webui/ash/settings/pages/device/inputs_section.cc b/chrome/browser/ui/webui/ash/settings/pages/device/inputs_section.cc index 0de6f33..b85ba7f 100644 --- a/chrome/browser/ui/webui/ash/settings/pages/device/inputs_section.cc +++ b/chrome/browser/ui/webui/ash/settings/pages/device/inputs_section.cc
@@ -512,7 +512,6 @@ mojom::Setting::kAddInputMethod, mojom::Setting::kRemoveInputMethod, mojom::Setting::kSetCurrentInputMethod, - mojom::Setting::kShowEmojiSuggestions, mojom::Setting::kShowInputOptionsInShelf, mojom::Setting::kSpellCheckOnOff, mojom::Setting::kAddSpellCheckLanguage,
diff --git a/chrome/browser/web_applications/isolated_web_apps/browser_navigator_iwa_browsertest.cc b/chrome/browser/web_applications/isolated_web_apps/browser_navigator_iwa_browsertest.cc index b9befc7..e10da5d 100644 --- a/chrome/browser/web_applications/isolated_web_apps/browser_navigator_iwa_browsertest.cc +++ b/chrome/browser/web_applications/isolated_web_apps/browser_navigator_iwa_browsertest.cc
@@ -18,7 +18,6 @@ #include "chrome/browser/external_protocol/external_protocol_handler.h" #include "chrome/browser/preloading/scoped_prewarm_feature_list.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_browsertest.h" @@ -38,6 +37,7 @@ #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h" #include "components/custom_handlers/protocol_handler.h" +#include "components/tabs/public/tab_interface.h" #include "components/web_package/signed_web_bundles/signed_web_bundle_id.h" #include "components/web_package/test_support/signed_web_bundles/web_bundle_signer.h" #include "components/webapps/isolated_web_apps/test_support/signing_keys.h" @@ -251,7 +251,45 @@ observer.Wait(); ASSERT_TRUE(web_app::AppBrowserController::IsForWebApp( - chrome::FindBrowserWithTab(observer.web_contents()), + tabs::TabInterface::GetFromContents(observer.web_contents()) + ->GetBrowserWindowInterface(), + url_info1_->app_id())); +} + +IN_PROC_BROWSER_TEST_F(BrowserNavigatorIwaTest, WindowOpenProtocolSelf) { + ASSERT_NO_FATAL_FAILURE(InstallBundles()); + + { + // Eliminate all prompts/guards along the way. + ExternalProtocolHandler::PermitLaunchUrl(); + apps::AppServiceProxyFactory::GetForProfile(profile()) + ->SetProtocolLinkPreference(url_info1_->app_id(), "meow"); + base::test::TestFuture<void> future; + web_app::WebAppProvider::GetForWebApps(profile()) + ->scheduler() + .UpdateProtocolHandlerUserApproval(url_info1_->app_id(), "meow", + web_app::ApiApprovalState::kAllowed, + future.GetCallback()); + ASSERT_TRUE(future.Wait()); + } + + // Open a protocol url from an app frame. + auto* rfh = web_app::OpenIsolatedWebApp(profile(), url_info1_->app_id()); + + GURL remapped_url = + custom_handlers::ProtocolHandler::CreateProtocolHandler( + "meow", + url_info1_->origin().GetURL().Resolve("/index.html?params=%s")) + .TranslateUrl(GURL("meow://hru")); + + ui_test_utils::UrlLoadObserver observer(remapped_url); + ASSERT_THAT(content::EvalJs(rfh, "window.open('meow://hru', '_self')"), + content::EvalJsResult::IsOk()); + observer.Wait(); + + ASSERT_TRUE(web_app::AppBrowserController::IsForWebApp( + tabs::TabInterface::GetFromContents(observer.web_contents()) + ->GetBrowserWindowInterface(), url_info1_->app_id())); } #endif
diff --git a/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc b/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc index 6070793..2b6e425 100644 --- a/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc +++ b/chrome/browser/webauthn/android/webauthn_request_delegate_android.cc
@@ -216,6 +216,10 @@ void WebAuthnRequestDelegateAndroid::OnPasswordCredentialSelected( const PasswordCredentialPair& password_credential) { + if (password_fetcher_) { + password_fetcher_->UpdateDateLastUsed(password_credential.first, + password_credential.second); + } if (password_callback_) { password_callback_.Run(password_credential.first, password_credential.second);
diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc index c1e52b7..d565540 100644 --- a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc +++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc
@@ -462,8 +462,9 @@ dialog_controller_->SetRequestBlePermissionCallback( request_ble_permission_callback); if (password_ui_controller_) { - password_ui_controller_->SetPasswordSelectedCallback( - password_selected_callback_); + password_ui_controller_->SetPasswordSelectedCallback(base::BindRepeating( + &ChromeAuthenticatorRequestDelegate::OnPasswordSelected, + weak_ptr_factory_.GetWeakPtr())); } } @@ -1254,9 +1255,21 @@ #endif +void ChromeAuthenticatorRequestDelegate::OnPasswordSelected( + password_manager::CredentialInfo info) { + if (password_fetcher_) { + password_fetcher_->UpdateDateLastUsed( + info.id.value_or(std::u16string()), + info.password.value_or(std::u16string())); + password_fetcher_.reset(); + } + if (password_selected_callback_) { + password_selected_callback_.Run(info); + } +} + void ChromeAuthenticatorRequestDelegate::OnPasswordCredentialsReceived( PasswordCredentials credentials) { - password_fetcher_.reset(); pending_password_credentials_ = std::make_unique<PasswordCredentials>(std::move(credentials)); TryToShowUI();
diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate.h b/chrome/browser/webauthn/chrome_authenticator_request_delegate.h index e81cd65..4f8aa33 100644 --- a/chrome/browser/webauthn/chrome_authenticator_request_delegate.h +++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate.h
@@ -310,6 +310,8 @@ const std::string& rp_id); #endif + void OnPasswordSelected(password_manager::CredentialInfo info); + void OnPasswordCredentialsReceived( PasswordCredentialFetcher::PasswordCredentials credentials);
diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc b/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc index eb799b46..a120b8d 100644 --- a/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc +++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc
@@ -838,6 +838,58 @@ PasswordCredentialFetcher::SetInstanceForTesting(nullptr); } +TEST_F(ChromeAuthenticatorRequestDelegateTest, + OnPasswordSelectedUpdatesDateLastUsed) { + content::WebContentsTester::For(web_contents()) + ->NavigateAndCommit(GURL(kOrigin)); + ChromeAuthenticatorRequestDelegate delegate(main_rfh()); + auto* password_fetcher = new FakePasswordCredentialFetcher(main_rfh()); + PasswordCredentialFetcher::SetInstanceForTesting(password_fetcher); + bool update_date_last_used_called = false; + password_fetcher->set_update_date_last_used_called_ptr( + &update_date_last_used_called); + auto password_ui_controller = + std::make_unique<testing::NiceMock<MockPasswordCredentialUIController>>( + main_rfh()->GetGlobalId(), delegate.dialog_model()); + + content::AuthenticatorRequestClientDelegate::PasswordSelectedCallback + password_selected_and_date_last_used_callback; + EXPECT_CALL(*password_ui_controller, SetPasswordSelectedCallback) + .WillOnce( + testing::SaveArg<0>(&password_selected_and_date_last_used_callback)); + delegate.SetPasswordUIControllerForTesting(std::move(password_ui_controller)); + delegate.SetUIPresentation(UIPresentation::kModalImmediate); + delegate.SetCredentialTypes(kRequestPassword | kRequestPublicKey); + delegate.SetRelyingPartyId(kRpId); + MockCableDiscoveryFactory discovery_factory; + + delegate.RegisterActionCallbacks( + base::DoNothing(), base::DoNothing(), base::DoNothing(), + base::DoNothing(), base::DoNothing(), base::DoNothing(), + base::DoNothing(), base::DoNothing(), base::DoNothing()); + + delegate.ConfigureDiscoveries(url::Origin::Create(GURL(kOrigin)), kOrigin, + content::AuthenticatorRequestClientDelegate:: + RequestSource::kWebAuthentication, + device::FidoRequestType::kGetAssertion, + device::ResidentKeyRequirement::kPreferred, + device::UserVerificationRequirement::kRequired, + /*user_name=*/std::nullopt, {}, + /*is_enclave_authenticator_available=*/false, + &discovery_factory); + + // Invoke the callback set on the UI controller, which in turn calls + // ChromeAuthenticatorRequestDelegate::OnPasswordSelected. + password_manager::CredentialInfo credential_info; + credential_info.id = u"test_user"; + credential_info.password = u"test_password"; + password_selected_and_date_last_used_callback.Run(credential_info); + + EXPECT_TRUE(update_date_last_used_called); + + PasswordCredentialFetcher::SetInstanceForTesting(nullptr); +} + TEST_F(ChromeAuthenticatorRequestDelegateTest, ImmediateMediationRateLimit) { constexpr base::TimeDelta kWindowSize = base::Minutes(1); constexpr int kMaxRequestsPerWindow = 2;
diff --git a/chrome/browser/webauthn/fake_password_credential_fetcher.cc b/chrome/browser/webauthn/fake_password_credential_fetcher.cc index 1a5b8e2c..48e24e9 100644 --- a/chrome/browser/webauthn/fake_password_credential_fetcher.cc +++ b/chrome/browser/webauthn/fake_password_credential_fetcher.cc
@@ -32,6 +32,14 @@ call_callback_immediately_ = call_immediately; } +void FakePasswordCredentialFetcher::UpdateDateLastUsed( + const std::u16string& username, + const std::u16string& password) { + if (update_date_last_used_called_ptr_) { + *update_date_last_used_called_ptr_ = true; + } +} + void FakePasswordCredentialFetcher::InvokeCallback() { if (callback_) { std::move(callback_).Run(std::move(passwords_));
diff --git a/chrome/browser/webauthn/fake_password_credential_fetcher.h b/chrome/browser/webauthn/fake_password_credential_fetcher.h index fa54e5d..ae7f1f2 100644 --- a/chrome/browser/webauthn/fake_password_credential_fetcher.h +++ b/chrome/browser/webauthn/fake_password_credential_fetcher.h
@@ -26,10 +26,22 @@ void SetCallCallbackImmediately(bool call_immediately); void InvokeCallback(); + void UpdateDateLastUsed(const std::u16string& username, + const std::u16string& password) override; + void set_update_date_last_used_called_ptr(bool* ptr) { + // PasswordCredentialFetcher is owned by the + // ChromeAuthenticatorRequestDelegate. The pointer is used to set the value + // of the bool in the test body, because the + // ChromeAuthenticatorRequestDelegate resets the fetcher after calling + // UpdateDateLastUsed. + update_date_last_used_called_ptr_ = ptr; + } + private: PasswordCredentials passwords_; PasswordCredentialsReceivedCallback callback_; bool fetch_passwords_called_ = false; + raw_ptr<bool> update_date_last_used_called_ptr_ = nullptr; bool call_callback_immediately_ = false; };
diff --git a/chrome/browser/webauthn/password_credential_fetcher.cc b/chrome/browser/webauthn/password_credential_fetcher.cc index 57b7faa..071933d 100644 --- a/chrome/browser/webauthn/password_credential_fetcher.cc +++ b/chrome/browser/webauthn/password_credential_fetcher.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "components/password_manager/core/browser/form_fetcher_impl.h" #include "components/password_manager/core/browser/password_form_digest.h" +#include "components/password_manager/core/browser/password_store/password_store_interface.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" @@ -29,18 +30,6 @@ return digest; } -password_manager::PasswordManagerClient* GetPasswordManagerClient( - RenderFrameHost& render_frame_host) { - WebContents* web_contents = - WebContents::FromRenderFrameHost(&render_frame_host); - - if (!web_contents) { - return nullptr; - } - - return ChromePasswordManagerClient::FromWebContents(web_contents); -} - } // namespace std::unique_ptr<PasswordCredentialFetcher> PasswordCredentialFetcher::Create( @@ -54,9 +43,11 @@ std::unique_ptr<PasswordCredentialFetcher> PasswordCredentialFetcher::CreateForTesting( RenderFrameHost* rfh, - std::unique_ptr<password_manager::FormFetcher> form_fetcher) { + std::unique_ptr<password_manager::FormFetcher> form_fetcher, + password_manager::PasswordManagerClient* client) { auto fetcher = base::WrapUnique(new PasswordCredentialFetcher(rfh)); fetcher->form_fetcher_ = std::move(form_fetcher); + fetcher->pwm_client_for_testing_ = client; return fetcher; } @@ -73,6 +64,38 @@ form_fetcher_->AddConsumer(this); } +void PasswordCredentialFetcher::UpdateDateLastUsed( + const std::u16string& username, + const std::u16string& password) { + CHECK(form_fetcher_); + + password_manager::PasswordManagerClient* client = GetPasswordManagerClient(); + if (!client) { + return; + } + + for (const auto& match : form_fetcher_->GetBestMatches()) { + if (match.username_value == username && match.password_value == password) { + PasswordForm updated_form = match; + updated_form.date_last_used = base::Time::Now(); + if ((updated_form.in_store & + password_manager::PasswordForm::Store::kProfileStore) != + password_manager::PasswordForm::Store::kNotSet) { + if (auto* store = client->GetProfilePasswordStore()) { + store->UpdateLogin(updated_form); + } + } + if ((updated_form.in_store & + password_manager::PasswordForm::Store::kAccountStore) != + password_manager::PasswordForm::Store::kNotSet) { + if (auto* store = client->GetAccountPasswordStore()) { + store->UpdateLogin(updated_form); + } + } + } + } +} + void PasswordCredentialFetcher::SetInstanceForTesting( PasswordCredentialFetcher* instance) { instance_for_testing_ = instance; @@ -100,9 +123,23 @@ return; } form_fetcher_ = std::make_unique<password_manager::FormFetcherImpl>( - GetSynthesizedFormForUrl(url), GetPasswordManagerClient(*rfh_), + GetSynthesizedFormForUrl(url), GetPasswordManagerClient(), /*should_migrate_http_passwords=*/false); } +password_manager::PasswordManagerClient* +PasswordCredentialFetcher::GetPasswordManagerClient() const { + if (pwm_client_for_testing_) { + return pwm_client_for_testing_; + } + WebContents* web_contents = WebContents::FromRenderFrameHost(rfh_); + + if (!web_contents) { + return nullptr; + } + + return ChromePasswordManagerClient::FromWebContents(web_contents); +} + PasswordCredentialFetcher* PasswordCredentialFetcher::instance_for_testing_ = nullptr;
diff --git a/chrome/browser/webauthn/password_credential_fetcher.h b/chrome/browser/webauthn/password_credential_fetcher.h index 16f2a7c..fbdb307 100644 --- a/chrome/browser/webauthn/password_credential_fetcher.h +++ b/chrome/browser/webauthn/password_credential_fetcher.h
@@ -17,6 +17,10 @@ class RenderFrameHost; } +namespace password_manager { +class PasswordManagerClient; +} + // Fetches password credentials for a given RenderFrameHost and URL. class PasswordCredentialFetcher : public password_manager::FormFetcher::Consumer { @@ -30,7 +34,8 @@ content::RenderFrameHost* rfh); static std::unique_ptr<PasswordCredentialFetcher> CreateForTesting( content::RenderFrameHost* rfh, - std::unique_ptr<password_manager::FormFetcher> form_fetcher); + std::unique_ptr<password_manager::FormFetcher> form_fetcher, + password_manager::PasswordManagerClient* client); ~PasswordCredentialFetcher() override; @@ -43,6 +48,12 @@ virtual void FetchPasswords(const GURL& url, PasswordCredentialsReceivedCallback callback); + // Updates the `date_last_used` field of the password form matching `username` + // and `password` to the current time. The update is persisted to the + // password store. + virtual void UpdateDateLastUsed(const std::u16string& username, + const std::u16string& password); + static void SetInstanceForTesting(PasswordCredentialFetcher* instance); private: @@ -54,11 +65,15 @@ void OnFetchCompleted() override; void CreateFormFetcher(const GURL& url); + password_manager::PasswordManagerClient* GetPasswordManagerClient() const; raw_ptr<content::RenderFrameHost> rfh_; std::unique_ptr<password_manager::FormFetcher> form_fetcher_; PasswordCredentialsReceivedCallback callback_; + raw_ptr<password_manager::PasswordManagerClient> pwm_client_for_testing_ = + nullptr; + // Owned by the test fixture. static PasswordCredentialFetcher* instance_for_testing_; };
diff --git a/chrome/browser/webauthn/password_credential_fetcher_unittest.cc b/chrome/browser/webauthn/password_credential_fetcher_unittest.cc index d10a03e..f76b2a0 100644 --- a/chrome/browser/webauthn/password_credential_fetcher_unittest.cc +++ b/chrome/browser/webauthn/password_credential_fetcher_unittest.cc
@@ -13,11 +13,16 @@ #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "components/password_manager/core/browser/fake_form_fetcher.h" #include "components/password_manager/core/browser/password_form.h" +#include "components/password_manager/core/browser/password_store/mock_password_store_interface.h" +#include "components/password_manager/core/browser/stub_password_manager_client.h" #include "content/public/browser/web_contents.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" using password_manager::PasswordForm; +using testing::_; +using testing::NiceMock; +using testing::Return; namespace { @@ -46,6 +51,19 @@ return form; } +class MockPasswordManagerClient + : public password_manager::StubPasswordManagerClient { + public: + MOCK_METHOD(password_manager::PasswordStoreInterface*, + GetProfilePasswordStore, + (), + (const, override)); + MOCK_METHOD(password_manager::PasswordStoreInterface*, + GetAccountPasswordStore, + (), + (const, override)); +}; + } // namespace class PasswordCredentialFetcherTest : public ChromeRenderViewHostTestHarness { @@ -54,19 +72,40 @@ ChromeRenderViewHostTestHarness::SetUp(); auto form_fetcher = std::make_unique<password_manager::FakeFormFetcher>(); form_fetcher_ = form_fetcher.get(); + client_ = std::make_unique<NiceMock<MockPasswordManagerClient>>(); + + profile_store_ = base::MakeRefCounted< + NiceMock<password_manager::MockPasswordStoreInterface>>(); + account_store_ = base::MakeRefCounted< + NiceMock<password_manager::MockPasswordStoreInterface>>(); + + ON_CALL(*client_, GetProfilePasswordStore) + .WillByDefault(Return(profile_store_.get())); + ON_CALL(*client_, GetAccountPasswordStore) + .WillByDefault(Return(account_store_.get())); + fetcher_ = PasswordCredentialFetcher::CreateForTesting( - web_contents()->GetPrimaryMainFrame(), std::move(form_fetcher)); + web_contents()->GetPrimaryMainFrame(), std::move(form_fetcher), + client_.get()); } void TearDown() override { form_fetcher_ = nullptr; fetcher_ = nullptr; + client_ = nullptr; + profile_store_.reset(); + account_store_.reset(); ChromeRenderViewHostTestHarness::TearDown(); } protected: std::unique_ptr<PasswordCredentialFetcher> fetcher_; raw_ptr<password_manager::FakeFormFetcher> form_fetcher_; + std::unique_ptr<NiceMock<MockPasswordManagerClient>> client_; + scoped_refptr<NiceMock<password_manager::MockPasswordStoreInterface>> + profile_store_; + scoped_refptr<NiceMock<password_manager::MockPasswordStoreInterface>> + account_store_; }; TEST_F(PasswordCredentialFetcherTest, NoPasswords) { @@ -114,3 +153,28 @@ })); form_fetcher_->NotifyFetchCompleted(); } + +TEST_F(PasswordCredentialFetcherTest, UpdateDateLastUsed) { + PasswordForm form = CreatePasswordForm(u"user", u"password"); + form.in_store = password_manager::PasswordForm::Store::kProfileStore | + password_manager::PasswordForm::Store::kAccountStore; + form_fetcher_->SetBestMatches({form}); + + // Expect UpdateLogin to be called on both stores. + EXPECT_CALL(*profile_store_, UpdateLogin); + EXPECT_CALL(*account_store_, UpdateLogin); + + fetcher_->UpdateDateLastUsed(u"user", u"password"); +} + +TEST_F(PasswordCredentialFetcherTest, UpdateDateLastUsed_ProfileStoreOnly) { + PasswordForm form = CreatePasswordForm(u"user", u"password"); + form.in_store = password_manager::PasswordForm::Store::kProfileStore; + form_fetcher_->SetBestMatches({form}); + + // Expect UpdateLogin to be called only on profile store. + EXPECT_CALL(*profile_store_, UpdateLogin); + EXPECT_CALL(*account_store_, UpdateLogin).Times(0); + + fetcher_->UpdateDateLastUsed(u"user", u"password"); +}
diff --git a/chrome/build/android-desktop-x64.pgo.txt b/chrome/build/android-desktop-x64.pgo.txt index dabd713..eb2c924 100644 --- a/chrome/build/android-desktop-x64.pgo.txt +++ b/chrome/build/android-desktop-x64.pgo.txt
@@ -1 +1 @@ -chrome-android-desktop-x64-main-1764028742-edd05ee3c20da02adcbb419ff9d8dfce33cac927-838bb0e7e149dcdeaf506a12ceaa24f140862bde.profdata +chrome-android-desktop-x64-main-1764050017-19b85579506b9fb3816dab94e2c9e267f04b840a-4a93ac8f3a3c4f62d3369fc1e0dd177060925a92.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 99f8779..f3c1081 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1764035907-05551ba9598ae6d13c636a2e6bcef64f831f9937-4a2fdbb1c650568a1d8c17d5f566b954b6644566.profdata +chrome-mac-arm-main-1764057458-5cd70ccd454ae86cdcbd0c7721621aa209ddeffb-aaa70ebb27a01378959b0a389dc8ba2514021488.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt index 9bf6db1..318336e8 100644 --- a/chrome/build/win-arm64.pgo.txt +++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@ -chrome-win-arm64-main-1763985417-e223ffed63b229c0c342239784d0519488eb5d0c-b1c83777389b18b3ae5c6d8f18e2c2a0318dc62e.profdata +chrome-win-arm64-main-1764050017-b9c06d52f0a08fd61daed1bb6f2fd99c2abf351f-4a93ac8f3a3c4f62d3369fc1e0dd177060925a92.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 59f1fcaa..53b3e3a 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1764017993-0bd93b6f46cfafba1b5072f2d7890712fbac9ba8-ae13a6ef850d3e21f7a4dc6668871aef11d3f68d.profdata +chrome-win32-main-1764039542-2607e270d32d3de753bd8a1f7678460a015881e8-0a9746f5973a92d93b6a1e2e5205936666fa6a83.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index b2d80bc..0e3b57e1 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1764007189-3c5cc6bcffbe0856ba70a1dec1f6003be45a153b-f576c3d803676ee4ceabc081c3aab1c4dd088903.profdata +chrome-win64-main-1764028742-a48eaac81a23a92191c68eac4f462958c13003e5-838bb0e7e149dcdeaf506a12ceaa24f140862bde.profdata
diff --git a/chrome/common/extensions/api/browsing_data.json b/chrome/common/extensions/api/browsing_data.json index 5207c76..a261e27 100644 --- a/chrome/common/extensions/api/browsing_data.json +++ b/chrome/common/extensions/api/browsing_data.json
@@ -118,6 +118,7 @@ "passwords": { "type": "boolean", "optional": true, + "deprecated": "Support for password deletion through extensions has been removed. This data type will be ignored.", "description": "Stored passwords." }, "pluginData": { @@ -381,6 +382,7 @@ { "name": "removePasswords", "description": "Clears the browser's stored passwords.", + "deprecated": "Support for password deletion through extensions has been removed. This function has no effect.", "type": "function", "parameters": [ {
diff --git a/chrome/common/extensions/chrome_extensions_client_unittest.cc b/chrome/common/extensions/chrome_extensions_client_unittest.cc index 61e9a2c..f8ccded 100644 --- a/chrome/common/extensions/chrome_extensions_client_unittest.cc +++ b/chrome/common/extensions/chrome_extensions_client_unittest.cc
@@ -97,7 +97,7 @@ .AppendASCII("browser_action") .AppendASCII("basics"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension( file_util::LoadExtension(install_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); @@ -117,7 +117,7 @@ install_dir = install_dir.AppendASCII("extensions").AppendASCII("theme_hidpi"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension( file_util::LoadExtension(install_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); @@ -139,12 +139,12 @@ .AppendASCII("Extensions") .AppendASCII("gggggggggggggggggggggggggggggggg"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension2( file_util::LoadExtension(ext_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); EXPECT_FALSE(extension2.get()); - EXPECT_EQ("Could not load icon 'icon.png' specified in 'browser_action'.", + EXPECT_EQ(u"Could not load icon 'icon.png' specified in 'browser_action'.", error); // Try to install an extension with a zero-length page action icon file. @@ -157,7 +157,7 @@ file_util::LoadExtension(ext_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); EXPECT_FALSE(extension3.get()); - EXPECT_EQ("Could not load icon 'icon.png' specified in 'page_action'.", + EXPECT_EQ(u"Could not load icon 'icon.png' specified in 'page_action'.", error); }
diff --git a/chrome/common/extensions/manifest_handlers/content_scripts_manifest_unittest.cc b/chrome/common/extensions/manifest_handlers/content_scripts_manifest_unittest.cc index b24358b..8778763 100644 --- a/chrome/common/extensions/manifest_handlers/content_scripts_manifest_unittest.cc +++ b/chrome/common/extensions/manifest_handlers/content_scripts_manifest_unittest.cc
@@ -112,15 +112,15 @@ .AppendASCII("bad") .AppendASCII("bad_encoding"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension( file_util::LoadExtension(install_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); ASSERT_EQ(extension.get(), nullptr); - ASSERT_STREQ( - "Could not load file 'bad_encoding.js' for content script. " - "It isn't UTF-8 encoded.", - error.c_str()); + ASSERT_EQ( + u"Could not load file 'bad_encoding.js' for content script. " + u"It isn't UTF-8 encoded.", + error); } TEST_F(ContentScriptsManifestTest, FailLoadingNonJsScripts) {
diff --git a/chrome/elevation_service/elevated_recovery_impl.cc b/chrome/elevation_service/elevated_recovery_impl.cc index e2f9d11d..3b51af25 100644 --- a/chrome/elevation_service/elevated_recovery_impl.cc +++ b/chrome/elevation_service/elevated_recovery_impl.cc
@@ -6,6 +6,7 @@ #include <objbase.h> +#include <optional> #include <string> #include <utility> @@ -131,23 +132,28 @@ std::vector<char> buffer(kBufferSize); for (uint64_t total_bytes_read = 0;;) { - const int bytes_read = - UNSAFE_TODO(from_file.ReadAtCurrentPos(buffer.data(), buffer.size())); - if (bytes_read < 0) + const std::optional<size_t> bytes_read = + from_file.ReadAtCurrentPos(base::as_writable_byte_span(buffer)); + if (!bytes_read) { return HRESULTFromLastError(); - if (bytes_read == 0) + } + if (bytes_read == 0) { return S_OK; + } - total_bytes_read += bytes_read; - if (total_bytes_read > kMaxFileSize) + total_bytes_read += *bytes_read; + if (total_bytes_read > kMaxFileSize) { return E_INVALIDARG; + } - const int bytes_written = - UNSAFE_TODO(to_file.WriteAtCurrentPos(&buffer[0], bytes_read)); - if (bytes_written < 0) + const std::optional<size_t> bytes_written = to_file.WriteAtCurrentPos( + base::as_byte_span(buffer).first(*bytes_read)); + if (!bytes_written) { return HRESULTFromLastError(); - if (bytes_written != bytes_read) + } + if (bytes_written != bytes_read) { return E_UNEXPECTED; + } } NOTREACHED();
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 0ea792c..58660e48 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -10591,7 +10591,6 @@ "../browser/ui/views/site_data/page_specific_site_data_dialog_unittest.cc", "../browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_unittest.cc", "../browser/ui/views/tabs/color_picker_view_unittest.cc", - "../browser/ui/views/tabs/compound_tab_container_unittest.cc", "../browser/ui/views/tabs/fake_base_tab_strip_controller.cc", "../browser/ui/views/tabs/fake_base_tab_strip_controller.h", "../browser/ui/views/tabs/fake_tab_slot_controller.cc", @@ -10605,8 +10604,6 @@ "../browser/ui/views/tabs/tab_strip_control_button_unittest.cc", "../browser/ui/views/tabs/tab_strip_layout_unittest.cc", "../browser/ui/views/tabs/tab_strip_nudge_button_unittest.cc", - "../browser/ui/views/tabs/tab_strip_scroll_container_unittest.cc", - "../browser/ui/views/tabs/tab_strip_scroll_session_unittest.cc", "../browser/ui/views/tabs/tab_strip_unittest.cc", "../browser/ui/views/tabs/tab_unittest.cc", "../browser/ui/views/task_manager_search_bar_view_unittest.cc",
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn index 63df65f0..964ee25c 100644 --- a/chrome/test/data/webui/BUILD.gn +++ b/chrome/test/data/webui/BUILD.gn
@@ -93,11 +93,14 @@ deps += [ "//chrome/browser/actor", "//chrome/browser/engagement", - "//chrome/browser/glic", "//chrome/browser/signin:signin_promo", "//chrome/browser/subscription_eligibility", ] + if (enable_glic) { + deps += [ "//chrome/browser/glic" ] + } + if (is_chrome_branded) { sources += [ "media_router/cast_feedback_ui_browsertest.cc" ] }
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index 867e55a9..dcb94b0 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -16494.0.0-1073365 \ No newline at end of file +16494.0.0-1073371 \ No newline at end of file
diff --git a/clank b/clank index 9d7ae83..211eb27 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit 9d7ae83f1c46c72d6cf73b81a033bcc274e18d91 +Subproject commit 211eb27e83c434921f9bb2a99a2b5a6ac0bcb02d
diff --git a/components/autofill/core/browser/foundations/autofill_client.cc b/components/autofill/core/browser/foundations/autofill_client.cc index 22e51bb..d91ab60 100644 --- a/components/autofill/core/browser/foundations/autofill_client.cc +++ b/components/autofill/core/browser/foundations/autofill_client.cc
@@ -209,6 +209,10 @@ NOTIMPLEMENTED(); } +bool AutofillClient::IsActorTaskActive() const { + return false; +} + std::unique_ptr<device_reauth::DeviceAuthenticator> AutofillClient::GetDeviceAuthenticator() { return nullptr;
diff --git a/components/autofill/core/browser/foundations/autofill_client.h b/components/autofill/core/browser/foundations/autofill_client.h index 5cd94ec..d2db6ba5 100644 --- a/components/autofill/core/browser/foundations/autofill_client.h +++ b/components/autofill/core/browser/foundations/autofill_client.h
@@ -589,6 +589,10 @@ EntityType entity_type, const base::flat_set<EntityTypeName>& saved_entities); + // Returns whether there is an active actor task for this client's tab (if + // one exists). + virtual bool IsActorTaskActive() const; + // Returns true if either Profile or CreditCard Autofill is enabled. virtual bool IsAutofillEnabled() const = 0;
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.cc b/components/autofill/core/browser/foundations/browser_autofill_manager.cc index 330d82db..7ad0486 100644 --- a/components/autofill/core/browser/foundations/browser_autofill_manager.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.cc
@@ -921,14 +921,24 @@ // which is definitely not a submission. return; } + + const base::TimeTicks form_submitted_timestamp = base::TimeTicks::Now(); + auto log_submission = + [&](const LogMessage& log_message) { + LOG_AF(log_manager()) + << LoggingScope::kSubmission << log_message << Br{} << "timestamp: " + << form_submitted_timestamp.since_origin().InMilliseconds() << Br{} + << "source: " << SubmissionSourceToString(source) << Br{} << form; + }; + if (base::FeatureList::IsEnabled(features::kAutofillActorSuppressImport) && + client().IsActorTaskActive()) { + log_submission(LogMessage::kFormSubmissionDetectedButIgnoredDueToActorTask); + return; + } + base::UmaHistogramEnumeration("Autofill.FormSubmission.PerProfileType", client().GetProfileType()); - const base::TimeTicks form_submitted_timestamp = base::TimeTicks::Now(); - LOG_AF(log_manager()) - << LoggingScope::kSubmission << LogMessage::kFormSubmissionDetected - << Br{} << "timestamp: " - << form_submitted_timestamp.since_origin().InMilliseconds() << Br{} - << "source: " << SubmissionSourceToString(source) << Br{} << form; + log_submission(LogMessage::kFormSubmissionDetected); // Always let the value patterns metric upload data. LogValuePatternsMetric(form);
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc index ad49501..62d2986 100644 --- a/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager_unittest.cc
@@ -838,6 +838,7 @@ ShowPlusAddressEmailOverrideNotification, (const std::string&, AutofillClient::EmailOverrideUndoCallback), (override)); + MOCK_METHOD(bool, IsActorTaskActive, (), (const override)); }; class MockTouchToFillDelegate : public TouchToFillDelegate { @@ -5011,6 +5012,40 @@ })); } +// Tests that no data is saved to Autocomplete when there is an active actor +// task. +TEST_F(BrowserAutofillManagerTest, NoSaveToAutocompleteWhenActorIsActive) { + base::test::ScopedFeatureList feature_list{ + features::kAutofillActorSuppressImport}; + + EXPECT_CALL(autofill_client(), IsActorTaskActive).WillOnce(Return(true)); + FormData form = CreateTestAddressFormData(); + EXPECT_CALL(single_field_fill_router(), OnWillSubmitForm).Times(0); + FormSubmitted(form); +} + +// Tests that form import (saving to Autofill) is suppressed when there is an +// active actor task. +TEST_F(BrowserAutofillManagerTest, FormSubmittedActorActive) { + base::test::ScopedFeatureList feature_list{ + features::kAutofillActorSuppressImport}; + FormData form = CreateTestAddressFormData(); + FormsSeen({form}); + + FormData response_data = + AutofillFormAndGetResults(form, form.fields()[0], kElvisProfileGuid); + ExpectFilledAddressFormElvis(response_data, false); + + EXPECT_CALL(autofill_client(), IsActorTaskActive).WillOnce(Return(true)); + TestAddressDataManager& adm = personal_data().test_address_data_manager(); + adm.ClearProfiles(); + // Auto-accept for import is enabled for this test, so if import were on, + // the profile would be imported. + FormSubmitted(response_data); + + EXPECT_THAT(adm.GetProfiles(), IsEmpty()); +} + // Test that when Autocomplete is enabled and Autofill is disabled, form // submissions are still received by the SingleFieldFillRouter. TEST_F(BrowserAutofillManagerTest, FormSubmittedAutocompleteEnabled) {
diff --git a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc index b36d0ef3..62490ac 100644 --- a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc +++ b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.cc
@@ -579,8 +579,7 @@ // email. // Then the profile's email address will be replaced with the plus // address in order to show the updated email on the suggestion label. - if (plus_address_email_override && !plus_address_email_override->empty() && - profile.HasInfo(EMAIL_ADDRESS) && + if (plus_address_email_override && profile.HasInfo(EMAIL_ADDRESS) && base::UTF16ToUTF8(profile.GetRawInfo(EMAIL_ADDRESS)) == gaia_email) { email_override = base::UTF8ToUTF16(*plus_address_email_override); profile.SetRawInfo(EMAIL_ADDRESS, email_override); @@ -822,9 +821,9 @@ // If `plus_address_email_override` exits it is returned. Otherwise tries to // find plus addresses in the `all_suggestion_data` and returns the first of -// them. If `all_suggestion_data` doesn't contain any plus addresses, an empty -// string is returned. -std::string GetPlusAddressEmailOverride( +// them. If `all_suggestion_data` doesn't contain any plus addresses, a +// `std::nullopt` is returned. +std::optional<std::string> GetPlusAddressEmailOverride( const std::optional<std::string>& plus_address_email_override, const base::flat_map<SuggestionGenerator::SuggestionDataSource, std::vector<SuggestionGenerator::SuggestionData>>& @@ -843,9 +842,14 @@ all_suggestion_data, SuggestionGenerator::SuggestionDataSource::kPlusAddressForAddress); } - return (plus_address_data && !plus_address_data->empty()) - ? std::get<PlusAddress>(plus_address_data->front()).value() - : std::string(); + if (!plus_address_data || plus_address_data->empty()) { + return std::nullopt; + } + + const std::string& plus_address = + std::get<PlusAddress>(plus_address_data->front()).value(); + return !plus_address.empty() ? std::make_optional(plus_address) + : std::nullopt; } } // namespace @@ -1145,7 +1149,7 @@ const AutofillField* trigger_autofill_field, const AutofillClient& client, std::vector<AutofillProfile>& profiles_to_suggest, - const std::string& plus_address_email_override) { + const std::optional<std::string>& plus_address_email_override) { if (!form_structure || !trigger_autofill_field || !client.GetIdentityManager()) { return {};
diff --git a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.h b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.h index af27da9..761400e 100644 --- a/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.h +++ b/components/autofill/core/browser/suggestions/addresses/address_suggestion_generator.h
@@ -150,7 +150,7 @@ const AutofillField* trigger_autofill_field, const AutofillClient& client, std::vector<AutofillProfile>& profiles_to_suggest, - const std::string& plus_address_email_override); + const std::optional<std::string>& plus_address_email_override); // Used to change the emails matching the GAIA email in suggestions with // the `plus_address_email_override_`.
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc index f2d9038..7cda235 100644 --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc
@@ -39,6 +39,11 @@ BASE_FEATURE(kAutofillAcrossIframesIosTriggerFormExtraction, base::FEATURE_DISABLED_BY_DEFAULT); +// Controls whether all import tasks are suppressed when an Actor task is +// active on the tab in question. This also suppresses silent updates and +// saving to Autocomplete. +BASE_FEATURE(kAutofillActorSuppressImport, base::FEATURE_DISABLED_BY_DEFAULT); + // Feature flag to control displaying of Autofill suggestions on // unclassified fields based on prefix matching. These suggestions are displayed // after the user typed a certain number of characters that match some data
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h index f29bda10..992e5df 100644 --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h
@@ -23,6 +23,8 @@ COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillAcrossIframesIosTriggerFormExtraction); COMPONENT_EXPORT(AUTOFILL) +BASE_DECLARE_FEATURE(kAutofillActorSuppressImport); +COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillAddressSuggestionsOnTyping); COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE_PARAM(int, kAutofillOnTypingMinNumberCharactersToMatch);
diff --git a/components/autofill/core/common/autofill_internals/log_message.h b/components/autofill/core/common/autofill_internals/log_message.h index c43af617..64abe49 100644 --- a/components/autofill/core/common/autofill_internals/log_message.h +++ b/components/autofill/core/common/autofill_internals/log_message.h
@@ -50,6 +50,8 @@ T(ImportAddressProfileFromFormRemoveInvalidValue, \ "Removing value because validation failed: ") \ T(FormSubmissionDetected, "Form submission detected: ") \ + T(FormSubmissionDetectedButIgnoredDueToActorTask, \ + "Form submission detected but ignored (active actor task):") \ T(SendFillingData, "Sending data to fill to renderer: ") \ T(CreditCardUploadEnabled, "Credit card upload is enabled.") \ T(CreditCardUploadDisabled, "Credit card upload is disabled. Reason: ") \
diff --git a/components/metrics/debug/BUILD.gn b/components/metrics/debug/BUILD.gn index 3ba2af83..922ffda 100644 --- a/components/metrics/debug/BUILD.gn +++ b/components/metrics/debug/BUILD.gn
@@ -53,6 +53,7 @@ deps = [ "//base", + "//base:i18n", "//build:branding_buildflags", "//components/metrics", "//components/metrics_services_manager",
diff --git a/components/metrics/debug/metrics_internals_utils.cc b/components/metrics/debug/metrics_internals_utils.cc index 62fe238..5a76019 100644 --- a/components/metrics/debug/metrics_internals_utils.cc +++ b/components/metrics/debug/metrics_internals_utils.cc
@@ -8,12 +8,14 @@ #include <string_view> #include "base/base64.h" +#include "base/i18n/time_formatting.h" #include "base/strings/string_number_conversions.h" #include "build/branding_buildflags.h" #include "build/build_config.h" #include "components/metrics/metrics_pref_names.h" #include "components/variations/client_filterable_state.h" #include "components/variations/proto/study.pb.h" +#include "components/variations/seed_reader_writer.h" #include "components/variations/service/variations_service.h" namespace metrics { @@ -118,6 +120,13 @@ return val ? "Yes" : "No"; } +// Converts a timestamp in microseconds since the Windows epoch to a date +// string. +std::string FormatDate(int64_t timestamp) { + return base::TimeFormatAsIso8601( + variations::SeedReaderWriter::ProtoTimeToTime(timestamp)); +} + base::Value::Dict CreateKeyValueDict(std::string_view key, std::string_view value) { base::Value::Dict dict; @@ -139,9 +148,14 @@ "Seed Milestone", base::NumberToString(stored_seed_info.milestone()))); list.Append(CreateKeyValueDict( "Seed Date", base::NumberToString(stored_seed_info.seed_date()))); + list.Append(CreateKeyValueDict("Seed Date (Formatted)", + FormatDate(stored_seed_info.seed_date()))); list.Append(CreateKeyValueDict( "Client Fetch Time", base::NumberToString(stored_seed_info.client_fetch_time()))); + list.Append( + CreateKeyValueDict("Client Fetch Time (Formatted)", + FormatDate(stored_seed_info.client_fetch_time()))); list.Append(CreateKeyValueDict("Session Country Code", stored_seed_info.session_country_code())); list.Append(CreateKeyValueDict("Permanent Country Code",
diff --git a/components/omnibox/resources/omnibox_pedal_synonyms.grd b/components/omnibox/resources/omnibox_pedal_synonyms.grd index f0534099..4c4600a 100644 --- a/components/omnibox/resources/omnibox_pedal_synonyms.grd +++ b/components/omnibox/resources/omnibox_pedal_synonyms.grd
@@ -326,9 +326,15 @@ <message name="IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SYNC_ONE_REQUIRED_SYNC_SETTINGS" translateable="false" is_accessibility_with_no_ui="true" desc="Synonyms for the MANAGE_SYNC Pedal's 'sync settings' group. To trigger, exactly ONE of this group is REQUIRED. Context: The user is typing into the omnibox to find a way to 'Manage what info you sync in Chrome settings' via chrome://settings/syncSetup/advanced but the user is not sure how to describe this action. The input text is scanned for any words included in this synonym group to determine whether this concept is present in the query. Note: This string is not translated; it's used for triggering in English only."> sync settings, sync </message> + <message name="IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SYNC_ONE_REQUIRED_SYNC_SETTINGS_UPDATED" translateable="false" is_accessibility_with_no_ui="true" desc="Synonyms for the MANAGE_SYNC Pedal's 'sync settings' group, updated with new phrases. To trigger, exactly ONE of this group is REQUIRED. Context: The user is typing into the omnibox to find a way to 'Manage what info you sync in Chrome settings' via chrome://settings/syncSetup/advanced but the user is not sure how to describe this action. The input text is scanned for any words included in this synonym group to determine whether this concept is present in the query. Note: This string is not translated; it's used for triggering in English only."> + sync settings, sync, my stuff, my chrome stuff, my chrome data, my chrome info, bookmarks and stuff, what i save, what's in my account + </message> <message name="IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SYNC_ANY_REQUIRED_GOOGLE_CHROME" translateable="false" is_accessibility_with_no_ui="true" desc="Synonyms for the MANAGE_SYNC Pedal's 'google chrome' group. To trigger, ANY number of this group is REQUIRED. Context: The user is typing into the omnibox to find a way to 'Manage what info you sync in Chrome settings' via chrome://settings/syncSetup/advanced but the user is not sure how to describe this action. The input text is scanned for any words included in this synonym group to determine whether this concept is present in the query. Note: This string is not translated; it's used for triggering in English only."> google chrome, customize, browser, control, disable, chrome, google, manage, adjust, change, edit, add </message> + <message name="IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SYNC_UPDATED" is_accessibility_with_no_ui="true" desc="Updated whole phrases for the MANAGE_SYNC Pedal's solitary triggering group. Context: The user is typing into the search bar to find a way to 'Manage what info you sync in Chrome settings' via chrome://settings/syncSetup/advanced but the user is not sure how to describe this action. The input text is scanned for any phrases in this comma-separated list to determine whether the action button should appear. Do not translate the list 1:1 phrase for phrase. List several (~3-15) queries that users typing in the target language might search to perform this Pedal's action. Delimit each separate query phrase with a comma, including variations for the gender, plurals, etc. For other instructions, please see doc: https://docs.google.com/document/d/1cggNrwZvEbt9Hv_zMryByvgR8Vr4yal_V8Rxg1AOugw/edit"> + manage my stuff, manage my chrome stuff, manage my chrome data, manage my chrome info, manage bookmarks and stuff, edit what i save, edit what's in my account, change chrome browser sync settings, change chrome sync, edit sync, edit sync settings, manage sync + </message> <!-- Pedal #12: MANAGE_SITE_SETTINGS --> <message name="IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_SITE_SETTINGS_ONE_REQUIRED_ADJUST_SITE_PERMISSIONS" is_accessibility_with_no_ui="true" desc="Whole phrases for the MANAGE_SITE_SETTINGS Pedal's solitary triggering group. Context: The user is typing into the search bar to find a way to 'Manage permissions and data stored across sites in Chrome settings' via chrome://settings/content but the user is not sure how to describe this action. The input text is scanned for any phrases in this comma-separated list to determine whether the action button should appear. Do not translate the list 1:1 phrase for phrase. List several (~3-15) queries that users typing in the target language might search to perform this Pedal's action. Delimit each separate query phrase with a comma, including variations for the gender, plurals, etc. For other instructions, please see doc: https://docs.google.com/document/d/1cggNrwZvEbt9Hv_zMryByvgR8Vr4yal_V8Rxg1AOugw/edit">
diff --git a/components/variations/seed_reader_writer.cc b/components/variations/seed_reader_writer.cc index fc0344f8..22f7a9ef 100644 --- a/components/variations/seed_reader_writer.cc +++ b/components/variations/seed_reader_writer.cc
@@ -231,10 +231,6 @@ return time.ToDeltaSinceWindowsEpoch().InMicroseconds(); } -base::Time ProtoTimeToTime(int64_t proto_time) { - return base::Time::FromDeltaSinceWindowsEpoch(base::Microseconds(proto_time)); -} - bool ShouldStoreWithoutProcessing(std::string_view seed_data) { return seed_data.empty() || seed_data == kIdenticalToSafeSeedSentinel; } @@ -603,6 +599,11 @@ return kMaxUncompressedSeedSize; } +// static +base::Time SeedReaderWriter::ProtoTimeToTime(int64_t proto_time) { + return base::Time::FromDeltaSinceWindowsEpoch(base::Microseconds(proto_time)); +} + base::ImportantFileWriter::BackgroundDataProducerCallback SeedReaderWriter::GetSerializedDataProducerForBackgroundSequence() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/components/variations/seed_reader_writer.h b/components/variations/seed_reader_writer.h index 54bcb4d..f981ff1 100644 --- a/components/variations/seed_reader_writer.h +++ b/components/variations/seed_reader_writer.h
@@ -254,6 +254,9 @@ static std::size_t MaxUncompressedSeedSizeForTesting(); + // Converts a time from StoredSeedInfo proto format (int64_t) to a base::Time. + static base::Time ProtoTimeToTime(int64_t proto_time); + private: // The storage format of the seed data. // - kCompressed: the seed is compressed. This is used for backward
diff --git a/components/viz/service/layers/layer_context_impl_tiling_unittest.cc b/components/viz/service/layers/layer_context_impl_tiling_unittest.cc index 1b43aeb..24f63872 100644 --- a/components/viz/service/layers/layer_context_impl_tiling_unittest.cc +++ b/components/viz/service/layers/layer_context_impl_tiling_unittest.cc
@@ -111,7 +111,7 @@ /*update_damage=*/true) .has_value()); - const cc::TileDisplayLayerImpl::Tiling* tiling_impl1 = + const cc::TileDisplayLayerTiling* tiling_impl1 = layer_impl->GetTilingForTesting(kScaleKey1); ASSERT_NE(nullptr, tiling_impl1); EXPECT_EQ(tiling_impl1->tile_size(), kTileSize); @@ -159,7 +159,7 @@ ->DoUpdateDisplayTiling(std::move(tiling2), /*update_damage=*/true) .has_value()); - const cc::TileDisplayLayerImpl::Tiling* tiling_impl2 = + const cc::TileDisplayLayerTiling* tiling_impl2 = layer_impl->GetTilingForTesting(kScaleKey2); ASSERT_NE(nullptr, tiling_impl2);
diff --git a/components/viz/service/layers/layer_context_impl_unittest.cc b/components/viz/service/layers/layer_context_impl_unittest.cc index 2cf9950..3a463509 100644 --- a/components/viz/service/layers/layer_context_impl_unittest.cc +++ b/components/viz/service/layers/layer_context_impl_unittest.cc
@@ -1923,7 +1923,7 @@ EXPECT_TRUE( layer_context_impl_->DoUpdateDisplayTree(std::move(update_create_tiling)) .has_value()); - const cc::TileDisplayLayerImpl::Tiling* tiling_impl1 = + const cc::TileDisplayLayerTiling* tiling_impl1 = tile_display_layer_impl->GetTilingForTesting(kScaleKey1); ASSERT_NE(nullptr, tiling_impl1); EXPECT_EQ(tiling_impl1->tile_size(), kTileSize1); @@ -1984,7 +1984,7 @@ EXPECT_TRUE( layer_context_impl_->DoUpdateDisplayTree(std::move(update_add_tiling2)) .has_value()); - const cc::TileDisplayLayerImpl::Tiling* tiling_impl2 = + const cc::TileDisplayLayerTiling* tiling_impl2 = tile_display_layer_impl->GetTilingForTesting(kScaleKey2); ASSERT_NE(nullptr, tiling_impl2); EXPECT_EQ(tiling_impl2->tile_size(), kTileSize1);
diff --git a/components/wallet/OWNERS b/components/wallet/OWNERS index 12f5c10d..39526ae4 100644 --- a/components/wallet/OWNERS +++ b/components/wallet/OWNERS
@@ -1,3 +1,4 @@ vizcay@google.com brunobraga@google.com hanfeng@google.com +dongguoz@google.com
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index c8b0752..c0a4466 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -1566,6 +1566,10 @@ "permissions/permission_service_context.h", "permissions/permission_service_impl.cc", "permissions/permission_service_impl.h", + "picture_in_picture/document_picture_in_picture_navigation_throttle.cc", + "picture_in_picture/document_picture_in_picture_navigation_throttle.h", + "picture_in_picture/document_picture_in_picture_window_controller_impl.cc", + "picture_in_picture/document_picture_in_picture_window_controller_impl.h", "picture_in_picture/picture_in_picture_service_impl.cc", "picture_in_picture/picture_in_picture_service_impl.h", "picture_in_picture/picture_in_picture_session.cc", @@ -3500,12 +3504,6 @@ "webauth/virtual_fido_discovery_factory.cc", "webauth/virtual_fido_discovery_factory.h", - # The Document Picture-in-Picture API is not implemented on Android. - "picture_in_picture/document_picture_in_picture_navigation_throttle.cc", - "picture_in_picture/document_picture_in_picture_navigation_throttle.h", - "picture_in_picture/document_picture_in_picture_window_controller_impl.cc", - "picture_in_picture/document_picture_in_picture_window_controller_impl.h", - # Cross-device digital credentials flows are handled by Play Services on # Android, not the browser. "digital_credentials/cross_device_request_dispatcher.cc",
diff --git a/content/browser/fenced_frame/fenced_frame.cc b/content/browser/fenced_frame/fenced_frame.cc index 79305b40..a6fdee1 100644 --- a/content/browser/fenced_frame/fenced_frame.cc +++ b/content/browser/fenced_frame/fenced_frame.cc
@@ -219,7 +219,7 @@ web_contents_->SetFocusedFrame(node, source); } -FrameTree* FencedFrame::GetOwnedPictureInPictureFrameTree() { +FrameTree* FencedFrame::GetOwnedDocumentPictureInPictureFrameTree() { return nullptr; } @@ -229,7 +229,7 @@ return false; } -FrameTree* FencedFrame::GetPictureInPictureOpenerFrameTree() { +FrameTree* FencedFrame::GetDocumentPictureInPictureOpenerFrameTree() { return nullptr; }
diff --git a/content/browser/fenced_frame/fenced_frame.h b/content/browser/fenced_frame/fenced_frame.h index cf72192..6e03975 100644 --- a/content/browser/fenced_frame/fenced_frame.h +++ b/content/browser/fenced_frame/fenced_frame.h
@@ -68,8 +68,8 @@ RenderFrameHostImpl* GetProspectiveOuterDocument() override; FrameTree* LoadingTree() override; void SetFocusedFrame(FrameTreeNode* node, SiteInstanceGroup* source) override; - FrameTree* GetOwnedPictureInPictureFrameTree() override; - FrameTree* GetPictureInPictureOpenerFrameTree() override; + FrameTree* GetOwnedDocumentPictureInPictureFrameTree() override; + FrameTree* GetDocumentPictureInPictureOpenerFrameTree() override; bool OnRenderFrameProxyVisibilityChanged( RenderFrameProxyHost* render_frame_proxy_host, blink::mojom::FrameVisibility visibility) override;
diff --git a/content/browser/guest_page_holder_impl.cc b/content/browser/guest_page_holder_impl.cc index 597049d..8df2f08 100644 --- a/content/browser/guest_page_holder_impl.cc +++ b/content/browser/guest_page_holder_impl.cc
@@ -181,11 +181,11 @@ owner_web_contents_->SetFocusedFrame(node, source); } -FrameTree* GuestPageHolderImpl::GetOwnedPictureInPictureFrameTree() { +FrameTree* GuestPageHolderImpl::GetOwnedDocumentPictureInPictureFrameTree() { return nullptr; } -FrameTree* GuestPageHolderImpl::GetPictureInPictureOpenerFrameTree() { +FrameTree* GuestPageHolderImpl::GetDocumentPictureInPictureOpenerFrameTree() { return nullptr; }
diff --git a/content/browser/guest_page_holder_impl.h b/content/browser/guest_page_holder_impl.h index 225ce1c..86fc867e 100644 --- a/content/browser/guest_page_holder_impl.h +++ b/content/browser/guest_page_holder_impl.h
@@ -56,8 +56,8 @@ RenderFrameHostImpl* GetProspectiveOuterDocument() override; FrameTree* LoadingTree() override; void SetFocusedFrame(FrameTreeNode* node, SiteInstanceGroup* source) override; - FrameTree* GetOwnedPictureInPictureFrameTree() override; - FrameTree* GetPictureInPictureOpenerFrameTree() override; + FrameTree* GetOwnedDocumentPictureInPictureFrameTree() override; + FrameTree* GetDocumentPictureInPictureOpenerFrameTree() override; bool OnRenderFrameProxyVisibilityChanged( RenderFrameProxyHost* render_frame_proxy_host, blink::mojom::FrameVisibility visibility) override;
diff --git a/content/browser/indexed_db/indexed_db_browsertest.cc b/content/browser/indexed_db/indexed_db_browsertest.cc index aaa4b3e..5b3788ec 100644 --- a/content/browser/indexed_db/indexed_db_browsertest.cc +++ b/content/browser/indexed_db/indexed_db_browsertest.cc
@@ -932,11 +932,6 @@ // 5. the blob reference is dropped and GC'd again // 6. don't crash IN_PROC_BROWSER_TEST_P(IndexedDBBrowserTestWithGCExposed, ForceCloseWithBlob) { - if (using_sqlite_) { - // TODO(crbug.com/419208485): Enable this test after handling active blob - // references during force close. - GTEST_SKIP(); - } const GURL kTestUrl = GetTestUrl("indexeddb", "write_and_read_blob.html"); SimpleTest(kTestUrl); DeleteBucketData(
diff --git a/content/browser/preloading/prerender/prerender_host.cc b/content/browser/preloading/prerender/prerender_host.cc index ef4ee547..f8b14181 100644 --- a/content/browser/preloading/prerender/prerender_host.cc +++ b/content/browser/preloading/prerender/prerender_host.cc
@@ -204,13 +204,13 @@ NOTREACHED(); } -FrameTree* -PrerenderHost::PrerenderFrameTreeDelegate::GetOwnedPictureInPictureFrameTree() { +FrameTree* PrerenderHost::PrerenderFrameTreeDelegate:: + GetOwnedDocumentPictureInPictureFrameTree() { return nullptr; } FrameTree* PrerenderHost::PrerenderFrameTreeDelegate:: - GetPictureInPictureOpenerFrameTree() { + GetDocumentPictureInPictureOpenerFrameTree() { return nullptr; }
diff --git a/content/browser/preloading/prerender/prerender_host.h b/content/browser/preloading/prerender/prerender_host.h index 3d10b2c..044577ea5 100644 --- a/content/browser/preloading/prerender/prerender_host.h +++ b/content/browser/preloading/prerender/prerender_host.h
@@ -478,8 +478,8 @@ RenderFrameHostImpl* GetProspectiveOuterDocument() override; void SetFocusedFrame(FrameTreeNode* node, SiteInstanceGroup* source) override; - FrameTree* GetOwnedPictureInPictureFrameTree() override; - FrameTree* GetPictureInPictureOpenerFrameTree() override; + FrameTree* GetOwnedDocumentPictureInPictureFrameTree() override; + FrameTree* GetDocumentPictureInPictureOpenerFrameTree() override; bool OnRenderFrameProxyVisibilityChanged( RenderFrameProxyHost* render_frame_proxy_host, blink::mojom::FrameVisibility visibility) override;
diff --git a/content/browser/renderer_host/frame_tree.h b/content/browser/renderer_host/frame_tree.h index 8f1f4848..9b8b5dc 100644 --- a/content/browser/renderer_host/frame_tree.h +++ b/content/browser/renderer_host/frame_tree.h
@@ -193,12 +193,13 @@ virtual void SetFocusedFrame(FrameTreeNode* node, SiteInstanceGroup* source) = 0; - // Returns this FrameTree's picture-in-picture FrameTree if it has one. - virtual FrameTree* GetOwnedPictureInPictureFrameTree() = 0; + // Returns this FrameTree's document picture-in-picture FrameTree if it has + // one. + virtual FrameTree* GetOwnedDocumentPictureInPictureFrameTree() = 0; // Returns this FrameTree's opener if this FrameTree represents a - // picture-in-picture window. - virtual FrameTree* GetPictureInPictureOpenerFrameTree() = 0; + // document picture-in-picture window. + virtual FrameTree* GetDocumentPictureInPictureOpenerFrameTree() = 0; // Called when the visibility of the RenderFrameProxyHost changes. // This method should only handle visibility for inner WebContents and
diff --git a/content/browser/renderer_host/frame_tree_node.cc b/content/browser/renderer_host/frame_tree_node.cc index 7f42a038..717136b9 100644 --- a/content/browser/renderer_host/frame_tree_node.cc +++ b/content/browser/renderer_host/frame_tree_node.cc
@@ -805,7 +805,7 @@ // If we're in a picture-in-picture frame tree, then also activate the opener // frame of the picture-in-picture root. FrameTree* pip_opener = - frame_tree().delegate()->GetPictureInPictureOpenerFrameTree(); + frame_tree().delegate()->GetDocumentPictureInPictureOpenerFrameTree(); if (base::FeatureList::IsEnabled( blink::features::kDocumentPictureInPictureUserActivation) && pip_opener) { @@ -836,7 +836,7 @@ // If we own a picture-in-picture window, then also activate same-origin // frames within the picture-in-picture window. FrameTree* picture_in_picture_frame_tree = - frame_tree().delegate()->GetOwnedPictureInPictureFrameTree(); + frame_tree().delegate()->GetOwnedDocumentPictureInPictureFrameTree(); if (picture_in_picture_frame_tree) { for (FrameTreeNode* node : picture_in_picture_frame_tree->Nodes()) { if (node->current_frame_host() @@ -878,7 +878,7 @@ // If we're consuming user activation in a picture-in-picture window, ensure // that its opener's frames also consume activation. FrameTree* pip_opener = - frame_tree().delegate()->GetPictureInPictureOpenerFrameTree(); + frame_tree().delegate()->GetDocumentPictureInPictureOpenerFrameTree(); if (pip_opener) { for (FrameTreeNode* node : pip_opener->Nodes()) { node->current_frame_host()->ConsumeTransientUserActivation(); @@ -888,7 +888,7 @@ // If we own a picture-in-picture window, ensure that its frames also // consume activation. FrameTree* picture_in_picture_frame_tree = - frame_tree().delegate()->GetOwnedPictureInPictureFrameTree(); + frame_tree().delegate()->GetOwnedDocumentPictureInPictureFrameTree(); if (picture_in_picture_frame_tree) { for (FrameTreeNode* node : picture_in_picture_frame_tree->Nodes()) { node->current_frame_host()->ConsumeTransientUserActivation();
diff --git a/content/browser/renderer_host/isolated_web_app_throttle.cc b/content/browser/renderer_host/isolated_web_app_throttle.cc index 38e0a30..acc5305 100644 --- a/content/browser/renderer_host/isolated_web_app_throttle.cc +++ b/content/browser/renderer_host/isolated_web_app_throttle.cc
@@ -212,16 +212,17 @@ if (navigation_handle()->IsInMainFrame()) { // If the main frame tries to leave the app's origin, cancel the // navigation and open the URL in the systems' default application. - if (dest_tuple != web_contents_isolation_tuple) { + // Navigations to URLs with custom schemes (say, meow://) initiated by the + // IWA will have `dest_origin_` set to null, yet the derived `dest_tuple` + // will point back at the IWA origin; for this reason it's necessary to + // check `dest_needs_apps_isolation` too. + if (dest_tuple != web_contents_isolation_tuple || + !dest_needs_apps_isolation) { RunNavigationInDefaultBrowser(navigation_handle()); return ThrottleAction::CANCEL; } - // It's very unlikely that `dest_needs_apps_isolation` is false at this - // stage. However, to gracefully handle this, the navigation will be aborted - // if that's the case. - // TODO(crbug.com/417403902): Investigate this. - return dest_needs_apps_isolation ? ThrottleAction::PROCEED : block_action; + return ThrottleAction::PROCEED; } else { // Handle iframe navigations. CHECK(!navigation_handle()->IsInMainFrame());
diff --git a/content/browser/renderer_host/navigation_throttle_registry_impl.cc b/content/browser/renderer_host/navigation_throttle_registry_impl.cc index 2b47de45..ba0968b 100644 --- a/content/browser/renderer_host/navigation_throttle_registry_impl.cc +++ b/content/browser/renderer_host/navigation_throttle_registry_impl.cc
@@ -12,6 +12,7 @@ #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "content/browser/devtools/devtools_instrumentation.h" +#include "content/browser/picture_in_picture/document_picture_in_picture_navigation_throttle.h" #include "content/browser/preloading/prefetch/contamination_delay_navigation_throttle.h" #include "content/browser/preloading/prerender/prerender_navigation_throttle.h" #include "content/browser/preloading/prerender/prerender_subframe_navigation_throttle.h" @@ -33,8 +34,6 @@ #if BUILDFLAG(IS_ANDROID) #include "content/browser/renderer_host/android_spare_renderer_navigation_throttle.h" -#else -#include "content/browser/picture_in_picture/document_picture_in_picture_navigation_throttle.h" #endif // BUILDFLAG(IS_ANDROID) namespace content { @@ -94,11 +93,11 @@ features::kAndroidSpareRendererAddNavigationThrottle.Get()) { AndroidSpareRendererNavigationThrottle::CreateAndAdd(*this); } -#else +#endif // BUILDFLAG(IS_ANDROID) + // Prevent cross-document navigations from document picture-in-picture // windows. DocumentPictureInPictureNavigationThrottle::MaybeCreateAndAdd(*this); -#endif // BUILDFLAG(IS_ANDROID) AncestorThrottle::CreateAndAdd(*this);
diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc index dfb8626..437ab59 100644 --- a/content/browser/web_contents/web_contents_android.cc +++ b/content/browser/web_contents/web_contents_android.cc
@@ -1045,4 +1045,15 @@ rwhva_ = new_rwhva; } +ScopedJavaLocalRef<jobject> +WebContentsAndroid::GetDocumentPictureInPictureOpener(JNIEnv* env) { + WebContents* web_contents = + web_contents_->GetDocumentPictureInPictureOpener(); + if (!web_contents) { + return nullptr; + } + + return web_contents->GetJavaWebContents(); +} + } // namespace content
diff --git a/content/browser/web_contents/web_contents_android.h b/content/browser/web_contents/web_contents_android.h index c408e19..62fb17a2 100644 --- a/content/browser/web_contents/web_contents_android.h +++ b/content/browser/web_contents/web_contents_android.h
@@ -275,6 +275,9 @@ static void ReportDanglingPtrToBrowserContext(JNIEnv* env, WebContents* web_contents); + base::android::ScopedJavaLocalRef<jobject> GetDocumentPictureInPictureOpener( + JNIEnv* env); + private: void OnFinishDownloadImage(const base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobject>& callback,
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 6c27d4b..6487679 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -149,6 +149,7 @@ #include "content/public/browser/context_menu_params.h" #include "content/public/browser/device_service.h" #include "content/public/browser/disallow_activation_reason.h" +#include "content/public/browser/document_picture_in_picture_window_controller.h" #include "content/public/browser/download_manager.h" #include "content/public/browser/file_select_listener.h" #include "content/public/browser/focused_node_details.h" @@ -160,6 +161,7 @@ #include "content/public/browser/navigation_details.h" #include "content/public/browser/navigation_throttle_registry.h" #include "content/public/browser/permission_descriptor_util.h" +#include "content/public/browser/picture_in_picture_window_controller.h" #include "content/public/browser/preload_pipeline_info.h" #include "content/public/browser/preview_cancel_reason.h" #include "content/public/browser/render_widget_host_iterator.h" @@ -272,11 +274,6 @@ #include "ui/wm/core/window_util.h" #endif -#if !BUILDFLAG(IS_ANDROID) -#include "content/public/browser/document_picture_in_picture_window_controller.h" -#include "content/public/browser/picture_in_picture_window_controller.h" -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_IOS_TVOS) #include "content/browser/ios/nfc_host.h" #endif @@ -10097,8 +10094,7 @@ CloseListenerManager::DidChangeFocusedFrame(this); } -FrameTree* WebContentsImpl::GetOwnedPictureInPictureFrameTree() { -#if !BUILDFLAG(IS_ANDROID) +FrameTree* WebContentsImpl::GetOwnedDocumentPictureInPictureFrameTree() { if (has_picture_in_picture_document_) { WebContents* picture_in_picture_web_contents = PictureInPictureWindowController:: @@ -10109,22 +10105,23 @@ ->GetPrimaryFrameTree()); } } -#endif // !BUILDFLAG(IS_ANDROID) return nullptr; } -FrameTree* WebContentsImpl::GetPictureInPictureOpenerFrameTree() { -#if !BUILDFLAG(IS_ANDROID) +FrameTree* WebContentsImpl::GetDocumentPictureInPictureOpenerFrameTree() { if (picture_in_picture_opener_) { return &(static_cast<WebContentsImpl*>(picture_in_picture_opener_.get()) ->GetPrimaryFrameTree()); } -#endif // !BUILDFLAG(IS_ANDROID) return nullptr; } +WebContents* WebContentsImpl::GetDocumentPictureInPictureOpener() { + return picture_in_picture_opener_.get(); +} + void WebContentsImpl::DidCallFocus() { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::DidCallFocus"); // Any explicit focusing of another window while this WebContents is in
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index 7387f6f..0611c1f 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h
@@ -1267,8 +1267,8 @@ RenderFrameHostImpl* GetProspectiveOuterDocument() override; FrameTree* LoadingTree() override; void SetFocusedFrame(FrameTreeNode* node, SiteInstanceGroup* source) override; - FrameTree* GetOwnedPictureInPictureFrameTree() override; - FrameTree* GetPictureInPictureOpenerFrameTree() override; + FrameTree* GetOwnedDocumentPictureInPictureFrameTree() override; + FrameTree* GetDocumentPictureInPictureOpenerFrameTree() override; // NavigationControllerDelegate ---------------------------------------------- @@ -1599,6 +1599,8 @@ bool IsPopup() const override; + WebContents* GetDocumentPictureInPictureOpener(); + private: using FrameTreeIterationCallback = base::FunctionRef<void(FrameTree&)>; using RenderViewHostIterationCallback =
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java index 2b32918..da8028b 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
@@ -1288,6 +1288,12 @@ .setSupportsDraggableRegions(mNativeWebContentsAndroid, supportsDraggableRegions); } + @Override + public @Nullable WebContents getDocumentPictureInPictureOpener() { + return WebContentsImplJni.get() + .getDocumentPictureInPictureOpener(mNativeWebContentsAndroid); + } + @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) @NativeMethods public interface Natives { @@ -1515,6 +1521,8 @@ boolean hasOpener(long nativeWebContentsAndroid); + WebContents getDocumentPictureInPictureOpener(long nativeWebContentsAndroid); + int getOriginalWindowOpenDisposition(long nativeWebContentsAndroid); void updateWindowControlsOverlay(
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java index d234aa0..d427ca10 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
@@ -652,6 +652,12 @@ boolean hasOpener(); /** + * @return The opener WebContents if this WebContents is in Document Picture-in-Picture mode, or + * {@code null} otherwise. + */ + @Nullable WebContents getDocumentPictureInPictureOpener(); + + /** * Returns the window open disposition that was originally requested when this WebContents was * created or navigated to. This method provides the disposition specified by the opener of this * WebContents, indicating how the content was initially intended to be displayed (e.g., as a
diff --git a/content/public/browser/picture_in_picture_window_controller.h b/content/public/browser/picture_in_picture_window_controller.h index 1aab03be..cb6308f 100644 --- a/content/public/browser/picture_in_picture_window_controller.h +++ b/content/public/browser/picture_in_picture_window_controller.h
@@ -14,9 +14,7 @@ namespace content { class WebContents; -#if !BUILDFLAG(IS_ANDROID) class DocumentPictureInPictureWindowController; -#endif // !BUILDFLAG(IS_ANDROID) class VideoPictureInPictureWindowController; // Interface for Picture in Picture window controllers. This is currently tied @@ -32,10 +30,8 @@ // pointer is guaranteed to be non-null. CONTENT_EXPORT static VideoPictureInPictureWindowController* GetOrCreateVideoPictureInPictureController(WebContents* web_contents); -#if !BUILDFLAG(IS_ANDROID) CONTENT_EXPORT static DocumentPictureInPictureWindowController* GetOrCreateDocumentPictureInPictureController(WebContents* web_contents); -#endif // !BUILDFLAG(IS_ANDROID) virtual ~PictureInPictureWindowController() = default;
diff --git a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockWebContents.java b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockWebContents.java index e885357..8bb5499 100644 --- a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockWebContents.java +++ b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockWebContents.java
@@ -423,4 +423,9 @@ @Override public <T extends UserData> void removeUserData(Class<T> key) {} + + @Override + public @Nullable WebContents getDocumentPictureInPictureOpener() { + return null; + } }
diff --git a/content/test/data/forms/form_controls_browsertest_button_fuchsia.png b/content/test/data/forms/form_controls_browsertest_button_fuchsia.png index 0467e7a..c0fd5d63 100644 --- a/content/test/data/forms/form_controls_browsertest_button_fuchsia.png +++ b/content/test/data/forms/form_controls_browsertest_button_fuchsia.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png index 09026261..d0727c1 100644 --- a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png +++ b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_multi_select_fuchsia.png b/content/test/data/forms/form_controls_browsertest_multi_select_fuchsia.png index 2347dce8..5c097731 100644 --- a/content/test/data/forms/form_controls_browsertest_multi_select_fuchsia.png +++ b/content/test/data/forms/form_controls_browsertest_multi_select_fuchsia.png Binary files differ
diff --git a/extensions/browser/content_hash_fetcher_unittest.cc b/extensions/browser/content_hash_fetcher_unittest.cc index 1cbdac0..151150a 100644 --- a/extensions/browser/content_hash_fetcher_unittest.cc +++ b/extensions/browser/content_hash_fetcher_unittest.cc
@@ -147,7 +147,7 @@ base::FilePath destination = temp_dir_.GetPath(); EXPECT_TRUE(zip::Unzip(extension_zip, destination)); - std::string error; + std::u16string error; static constexpr char kTestExtensionId[] = "jmllhlobpjcnnomjlipadejplhmheiif"; scoped_refptr<Extension> extension = file_util::LoadExtension(
diff --git a/extensions/browser/content_verifier/content_hash_unittest.cc b/extensions/browser/content_verifier/content_hash_unittest.cc index d5ea0f1f..501aaeb 100644 --- a/extensions/browser/content_verifier/content_hash_unittest.cc +++ b/extensions/browser/content_verifier/content_hash_unittest.cc
@@ -41,7 +41,7 @@ scoped_refptr<Extension> LoadExtension( const content_verifier_test_utils::TestExtensionBuilder& builder) { - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( builder.extension_path(), builder.extension_id(), mojom::ManifestLocation::kInternal, 0 /* flags */, &error); @@ -62,7 +62,7 @@ ASSERT_TRUE(base::CopyDirectory(builder.extension_path(), temp_dir.GetPath(), /*recursive=*/true)); - std::string error; + std::u16string error; auto extension = file_util::LoadExtension( temp_dir.GetPath().Append(builder.extension_path().BaseName()), override_extension_id, mojom::ManifestLocation::kInternal,
diff --git a/extensions/browser/content_verifier/content_verify_job_unittest.cc b/extensions/browser/content_verifier/content_verify_job_unittest.cc index f3c87346..4194b42 100644 --- a/extensions/browser/content_verifier/content_verify_job_unittest.cc +++ b/extensions/browser/content_verifier/content_verify_job_unittest.cc
@@ -240,7 +240,7 @@ resources_for_hashes.value()); } - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( temp_dir->UnpackedPath(), mojom::ManifestLocation::kInternal, Extension::InitFromValueFlags::NO_FLAGS, &error);
diff --git a/extensions/browser/content_verifier/test_utils.cc b/extensions/browser/content_verifier/test_utils.cc index b87a1fb..95d3644 100644 --- a/extensions/browser/content_verifier/test_utils.cc +++ b/extensions/browser/content_verifier/test_utils.cc
@@ -495,7 +495,7 @@ ADD_FAILURE() << "Failed to unzip path."; return nullptr; } - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( unzip_dir, mojom::ManifestLocation::kInternal, 0 /* flags */, &error); EXPECT_NE(nullptr, extension.get()) << " error:'" << error << "'";
diff --git a/extensions/browser/extension_creator.cc b/extensions/browser/extension_creator.cc index db0302e..d299ee0 100644 --- a/extensions/browser/extension_creator.cc +++ b/extensions/browser/extension_creator.cc
@@ -59,7 +59,7 @@ // Validate input |extension_dir|. if (extension_dir.value().empty() || !base::DirectoryExists(extension_dir)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_DIRECTORY_NO_EXISTS); + l10n_util::GetStringUTF16(IDS_EXTENSION_DIRECTORY_NO_EXISTS); return false; } @@ -67,7 +67,7 @@ base::MakeAbsoluteFilePath(extension_dir); if (absolute_extension_dir.empty()) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_CANT_GET_ABSOLUTE_PATH); + l10n_util::GetStringUTF16(IDS_EXTENSION_CANT_GET_ABSOLUTE_PATH); return false; } @@ -75,7 +75,7 @@ if (!private_key_path.value().empty() && !base::PathExists(private_key_path)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_INVALID_PATH); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_INVALID_PATH); return false; } @@ -85,14 +85,15 @@ if (private_key_path.value().empty() && !private_key_output_path.value().empty() && FileConflicts(private_key_output_path)) { - error_message_ = l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_EXISTS); + error_message_ = + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_EXISTS); return false; } // Check whether crx file already exists. Should be last check, as this is // a warning only. if (!(run_flags & kOverwriteCRX) && FileConflicts(crx_path)) { - error_message_ = l10n_util::GetStringUTF8(IDS_EXTENSION_CRX_EXISTS); + error_message_ = l10n_util::GetStringUTF16(IDS_EXTENSION_CRX_EXISTS); error_type_ = kCRXExists; return false; } @@ -110,32 +111,34 @@ // Loading the extension does a lot of useful validation of the structure. scoped_refptr<Extension> extension(file_util::LoadExtension( - extension_dir, mojom::ManifestLocation::kInternal, - create_flags, &error_message_)); + extension_dir, mojom::ManifestLocation::kInternal, create_flags, + &error_message_)); - return !!extension.get() && extension_l10n_util::ValidateExtensionLocales( - extension_dir, *extension.get()->manifest()->value(), &error_message_); + return !!extension.get() && + extension_l10n_util::ValidateExtensionLocales( + extension_dir, *extension.get()->manifest()->value(), + &error_message_); } std::optional<crypto::keypair::PrivateKey> ExtensionCreator::ReadInputKey( const base::FilePath& private_key_path) { if (!base::PathExists(private_key_path)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_NO_EXISTS); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_NO_EXISTS); return std::nullopt; } std::string private_key_contents; if (!base::ReadFileToString(private_key_path, &private_key_contents)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_READ); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_READ); return std::nullopt; } std::string private_key_bytes; if (!Extension::ParsePEMKeyBytes(private_key_contents, &private_key_bytes)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_INVALID); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_INVALID); return std::nullopt; } @@ -143,7 +146,7 @@ base::as_byte_span(private_key_bytes)); if (!private_key || !private_key->IsRsa()) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_INVALID_FORMAT); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_INVALID_FORMAT); return std::nullopt; } @@ -162,20 +165,20 @@ std::string private_key; if (!Extension::ProducePEM(private_key_bytes, &private_key)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_OUTPUT); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_OUTPUT); return std::nullopt; } std::string pem_output; if (!Extension::FormatPEMForFileOutput(private_key, &pem_output, false)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_OUTPUT); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_OUTPUT); return std::nullopt; } if (!output_private_key_path.empty()) { if (!base::WriteFile(output_private_key_path, pem_output)) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_OUTPUT); + l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_OUTPUT); return std::nullopt; } } @@ -198,7 +201,7 @@ if (!zip::ZipWithFilterCallback(extension_dir, *zip_path, std::move(filter_cb))) { error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_FAILED_DURING_PACKAGING); + l10n_util::GetStringUTF16(IDS_EXTENSION_FAILED_DURING_PACKAGING); return false; } @@ -222,11 +225,11 @@ return true; case crx_file::CreatorResult::ERROR_SIGNING_FAILURE: error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_ERROR_WHILE_SIGNING); + l10n_util::GetStringUTF16(IDS_EXTENSION_ERROR_WHILE_SIGNING); return false; case crx_file::CreatorResult::ERROR_FILE_NOT_WRITABLE: error_message_ = - l10n_util::GetStringUTF8(IDS_EXTENSION_SHARING_VIOLATION); + l10n_util::GetStringUTF16(IDS_EXTENSION_SHARING_VIOLATION); return false; case crx_file::CreatorResult::ERROR_FILE_NOT_READABLE: case crx_file::CreatorResult::ERROR_FILE_WRITE_FAILURE:
diff --git a/extensions/browser/extension_creator.h b/extensions/browser/extension_creator.h index 1bca4c6..0ef0513 100644 --- a/extensions/browser/extension_creator.h +++ b/extensions/browser/extension_creator.h
@@ -51,7 +51,7 @@ int run_flags); // Returns the error message that will be present if Run(...) returned false. - std::string error_message() { return error_message_; } + const std::u16string& error_message() { return error_message_; } ErrorType error_type() { return error_type_; } @@ -108,7 +108,7 @@ const std::optional<std::string>& compressed_verified_contents); // Holds a message for any error that is raised during Run(...). - std::string error_message_; + std::u16string error_message_; // Type of error that was raised, if any. ErrorType error_type_;
diff --git a/extensions/browser/extension_creator_unittest.cc b/extensions/browser/extension_creator_unittest.cc index 7042aad2..e8e83f60 100644 --- a/extensions/browser/extension_creator_unittest.cc +++ b/extensions/browser/extension_creator_unittest.cc
@@ -10,6 +10,8 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/path_service.h" +#include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "base/test/android/content_uri_test_utils.h" #include "base/values.h" #include "extensions/common/constants.h" @@ -79,7 +81,7 @@ const base::FilePath file_path = CreateTestPath().Append(FILE_PATH_LITERAL("non_existent.pem")); EXPECT_EQ(std::nullopt, ReadInputKey(file_path)); - EXPECT_EQ(l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_NO_EXISTS), + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_NO_EXISTS), extension_creator()->error_message()); } @@ -97,7 +99,7 @@ // If a path includes parent reference `..`, reading the path must fail. EXPECT_EQ(std::nullopt, ReadInputKey(file_path_dangerous)); - EXPECT_EQ(l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_READ), + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_READ), extension_creator()->error_message()); } @@ -111,13 +113,13 @@ ASSERT_TRUE(base::WriteFile(file_path, kTestData)); EXPECT_EQ(std::nullopt, ReadInputKey(file_path)); - EXPECT_EQ(l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_INVALID), + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_INVALID), extension_creator()->error_message()); } TEST_F(ExtensionCreatorTest, ReadInputKeyNotPKCSFormat) { EXPECT_EQ(std::nullopt, ReadInputKey(GetTestFile("not_pkcs.pem"))); - EXPECT_EQ(l10n_util::GetStringUTF8(IDS_EXTENSION_PRIVATE_KEY_INVALID_FORMAT), + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PRIVATE_KEY_INVALID_FORMAT), extension_creator()->error_message()); } @@ -131,7 +133,7 @@ ASSERT_TRUE(base::CreateDirectory(src_path)); EXPECT_FALSE(ValidateExtension(src_path, 0)); - EXPECT_EQ("Manifest file is missing or unreadable", + EXPECT_EQ(u"Manifest file is missing or unreadable", extension_creator()->error_message()); // Add partial manifest file. @@ -140,7 +142,7 @@ EXPECT_FALSE(ValidateExtension(src_path, 0)); EXPECT_TRUE(extension_creator()->error_message().starts_with( - "Manifest is not valid JSON.")); + u"Manifest is not valid JSON.")); // Replace partial manifest with correct minimum file. ASSERT_TRUE(base::WriteFile(manifest_file, @@ -155,7 +157,7 @@ "name": "test", "version": "1", "default_locale": "en" })")); EXPECT_FALSE(ValidateExtension(src_path, 0)); - EXPECT_EQ("Default locale was specified, but _locales subtree is missing.", + EXPECT_EQ(u"Default locale was specified, but _locales subtree is missing.", extension_creator()->error_message()); // Add localization folder. @@ -164,7 +166,7 @@ ASSERT_TRUE(base::CreateDirectory(en_locale)); EXPECT_FALSE(ValidateExtension(src_path, 0)); - EXPECT_EQ("Catalog file is missing for locale en.", + EXPECT_EQ(u"Catalog file is missing for locale en.", extension_creator()->error_message()); // Add valid default localization file. @@ -183,7 +185,7 @@ ASSERT_TRUE(base::WriteFile(de_messages_file, de_data)); EXPECT_FALSE(ValidateExtension(src_path, 0)); - EXPECT_THAT(extension_creator()->error_message(), + EXPECT_THAT(base::UTF16ToUTF8(extension_creator()->error_message()), testing::HasSubstr("Variable $VAR$ used but not defined.")); }
diff --git a/extensions/common/api/declarative_net_request/dnr_manifest_unittest.cc b/extensions/common/api/declarative_net_request/dnr_manifest_unittest.cc index 200c645a..c1b1be9 100644 --- a/extensions/common/api/declarative_net_request/dnr_manifest_unittest.cc +++ b/extensions/common/api/declarative_net_request/dnr_manifest_unittest.cc
@@ -48,8 +48,8 @@ protected: // Loads the extension and verifies the |expected_error|. - void LoadAndExpectError(const std::string& expected_error) { - std::string error; + void LoadAndExpectError(const std::u16string& expected_error) { + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( temp_dir_.GetPath(), mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error); @@ -68,7 +68,7 @@ void LoadAndExpectWarning( const std::vector<TestRulesetInfo>& info, const std::optional<InstallWarning>& expected_warning) { - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( temp_dir_.GetPath(), mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error); @@ -146,8 +146,8 @@ WriteManifestAndRuleset(manifest, rulesets); LoadAndExpectError( - "Error at key 'declarative_net_request'. Type is invalid. Expected " - "dictionary, found integer."); + u"Error at key 'declarative_net_request'. Type is invalid. Expected " + u"dictionary, found integer."); } TEST_F(DNRManifestTest, InvalidRulesFileKey) { @@ -157,8 +157,9 @@ WriteManifestAndRuleset(manifest, rulesets); LoadAndExpectError( - "Error at key 'declarative_net_request.rule_resources'. Type is invalid. " - "Expected list, found integer."); + u"Error at key 'declarative_net_request.rule_resources'. Type is " + u"invalid. " + u"Expected list, found integer."); } TEST_F(DNRManifestTest, InvalidRulesFileFormat) { @@ -171,26 +172,28 @@ WriteManifestAndRuleset(manifest, {}); LoadAndExpectError( - "Error at key 'declarative_net_request.rule_resources'. Parsing array " - "failed at index 0: expected dictionary, got string"); + u"Error at key 'declarative_net_request.rule_resources'. Parsing array " + u"failed at index 0: expected dictionary, got string"); } TEST_F(DNRManifestTest, InvalidRulesetPath) { TestRulesetInfo ruleset("rules", "sub/../rules.json", base::Value::List()); WriteManifestAndRuleset(CreateManifest({ruleset}), {}); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + // TODO(crbug.com/41317803): Continue removing std::string errors and + // replacing with std::u16string. + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kRulesFileIsInvalid, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path)); + dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path))); } TEST_F(DNRManifestTest, InvalidRulesetPath2) { TestRulesetInfo ruleset("rules", "rules.json?param=1", base::Value::List()); WriteManifestAndRuleset(CreateManifest({ruleset}), {}); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kRulesFileIsInvalid, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path)); + dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path))); } TEST_F(DNRManifestTest, ZeroRulesets) { @@ -219,10 +222,10 @@ // Only persist |ruleset_1| on disk but include both in the manifest. WriteManifestAndRuleset(CreateManifest({ruleset_1, ruleset_2}), {ruleset_1}); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kRulesFileIsInvalid, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, ruleset_2.relative_file_path)); + dnr_api::DNRInfo::kRuleResources, ruleset_2.relative_file_path))); } TEST_F(DNRManifestTest, RulesetCountExceeded) { @@ -234,11 +237,11 @@ WriteManifestAndRuleset(CreateManifest(rulesets), rulesets); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kRulesetCountExceeded, dnr_api::ManifestKeys::kDeclarativeNetRequest, dnr_api::DNRInfo::kRuleResources, - base::NumberToString(dnr_api::MAX_NUMBER_OF_STATIC_RULESETS))); + base::NumberToString(dnr_api::MAX_NUMBER_OF_STATIC_RULESETS)))); } TEST_F(DNRManifestTest, EnabledRulesetCountExceeded) { @@ -250,11 +253,11 @@ WriteManifestAndRuleset(CreateManifest(rulesets), rulesets); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kEnabledRulesetCountExceeded, dnr_api::ManifestKeys::kDeclarativeNetRequest, dnr_api::DNRInfo::kRuleResources, - base::NumberToString(dnr_api::MAX_NUMBER_OF_ENABLED_STATIC_RULESETS))); + base::NumberToString(dnr_api::MAX_NUMBER_OF_ENABLED_STATIC_RULESETS)))); } TEST_F(DNRManifestTest, NonExistentRulesFile) { @@ -264,10 +267,10 @@ WriteManifestAndRuleset(manifest, {}); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kRulesFileIsInvalid, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path)); + dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path))); } TEST_F(DNRManifestTest, NeedsDeclarativeNetRequestPermission) { @@ -278,9 +281,9 @@ WriteManifestAndRuleset(manifest, rulesets); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kDeclarativeNetRequestPermissionNeeded, - dnr_api::ManifestKeys::kDeclarativeNetRequest)); + dnr_api::ManifestKeys::kDeclarativeNetRequest))); } TEST_F(DNRManifestTest, RulesFileInNestedDirectory) { @@ -300,9 +303,9 @@ std::vector<TestRulesetInfo> rulesets({ruleset_1, ruleset_2, ruleset_3}); WriteManifestAndRuleset(CreateManifest(rulesets), rulesets); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kInvalidRulesetID, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, "1")); + dnr_api::DNRInfo::kRuleResources, "1"))); } TEST_F(DNRManifestTest, DuplicateRulesetID) { @@ -314,9 +317,9 @@ {ruleset_1, ruleset_2, ruleset_3, ruleset_4}); WriteManifestAndRuleset(CreateManifest(rulesets), rulesets); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kInvalidRulesetID, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, "3")); + dnr_api::DNRInfo::kRuleResources, "3"))); } TEST_F(DNRManifestTest, ReservedRulesetID) { @@ -326,9 +329,9 @@ std::vector<TestRulesetInfo> rulesets({ruleset_1, ruleset_2, ruleset_3}); WriteManifestAndRuleset(CreateManifest(rulesets), rulesets); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kInvalidRulesetID, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, "1")); + dnr_api::DNRInfo::kRuleResources, "1"))); } // The webstore installation flow involves creation of a dummy extension with an @@ -349,19 +352,19 @@ TEST_F(DNRManifestTest, EmptyRulesetPath1) { TestRulesetInfo ruleset("foo", "", base::Value::List()); WriteManifestAndRuleset(CreateManifest({ruleset}), {}); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kRulesFileIsInvalid, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path)); + dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path))); } TEST_F(DNRManifestTest, EmptyRulesetPath2) { TestRulesetInfo ruleset("foo", ".", base::Value::List()); WriteManifestAndRuleset(CreateManifest({ruleset}), {}); - LoadAndExpectError(ErrorUtils::FormatErrorMessage( + LoadAndExpectError(base::UTF8ToUTF16(ErrorUtils::FormatErrorMessage( errors::kRulesFileIsInvalid, dnr_api::ManifestKeys::kDeclarativeNetRequest, - dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path)); + dnr_api::DNRInfo::kRuleResources, ruleset.relative_file_path))); } TEST_F(DNRManifestTest, DuplicateRulesetPath) {
diff --git a/extensions/common/extension_l10n_util.cc b/extensions/common/extension_l10n_util.cc index b4def369..34e7da25 100644 --- a/extensions/common/extension_l10n_util.cc +++ b/extensions/common/extension_l10n_util.cc
@@ -507,17 +507,27 @@ bool ValidateExtensionLocales(const base::FilePath& extension_path, const base::Value::Dict& manifest, - std::string* error) { - std::string default_locale = GetDefaultLocaleFromManifest(manifest, error); + std::u16string* error) { + // TODO(crbug.com/41317803): Continue removing std::string errors and + // replacing with std::u16string. + std::string utf8_error; + std::string default_locale = + GetDefaultLocaleFromManifest(manifest, &utf8_error); - if (default_locale.empty()) + if (default_locale.empty()) { + *error = base::UTF8ToUTF16(utf8_error); return true; + } base::FilePath locale_path = extension_path.Append(extensions::kLocaleFolder); std::set<std::string> valid_locales; - if (!GetValidLocales(locale_path, &valid_locales, error)) + // TODO(crbug.com/41317803): Continue removing std::string errors and + // replacing with std::u16string. + if (!GetValidLocales(locale_path, &valid_locales, &utf8_error)) { + *error = base::UTF8ToUTF16(utf8_error); return false; + } // Load each available localization file and check for errors within. This // entire method only gets used when reloading unpacked or packing extensions. @@ -531,17 +541,22 @@ if (locale_error.empty()) { continue; } - if (!error->empty()) { - *error += '\n'; + if (!utf8_error.empty()) { + utf8_error += '\n'; } base::FilePath file_path = locale_path.AppendASCII(locale).Append(extensions::kMessagesFilename); - error->append(extensions::ErrorUtils::FormatErrorMessage( + utf8_error.append(extensions::ErrorUtils::FormatErrorMessage( errors::kLocalesInvalidLocale, base::UTF16ToUTF8(file_path.LossyDisplayName()), locale_error)); } - return error->empty(); + if (!utf8_error.empty()) { + *error = base::UTF8ToUTF16(utf8_error); + return false; + } + + return true; } bool ShouldSkipValidation(const base::FilePath& locales_path,
diff --git a/extensions/common/extension_l10n_util.h b/extensions/common/extension_l10n_util.h index 8635645..e4f0566 100644 --- a/extensions/common/extension_l10n_util.h +++ b/extensions/common/extension_l10n_util.h
@@ -133,7 +133,7 @@ // validating unpacked extensions. bool ValidateExtensionLocales(const base::FilePath& extension_path, const base::Value::Dict& manifest, - std::string* error); + std::u16string* error); // Returns true if directory has "." in the name (for .svn) or if it doesn't // belong to Chrome locales.
diff --git a/extensions/common/extension_l10n_util_unittest.cc b/extensions/common/extension_l10n_util_unittest.cc index 28c8d257..be22d3f3 100644 --- a/extensions/common/extension_l10n_util_unittest.cc +++ b/extensions/common/extension_l10n_util_unittest.cc
@@ -48,11 +48,11 @@ ASSERT_TRUE(base::WriteFile(messages_file, data)); auto manifest = base::Value::Dict().Set(keys::kDefaultLocale, "en"); - std::string error; + std::u16string error; EXPECT_FALSE(extension_l10n_util::ValidateExtensionLocales(temp.GetPath(), manifest, &error)); EXPECT_THAT( - error, + base::UTF16ToUTF8(error), testing::HasSubstr(base::UTF16ToUTF8(messages_file.LossyDisplayName()))); } @@ -99,23 +99,25 @@ ASSERT_TRUE(base::WriteFile(fr_messages_file, fr_data)); const auto manifest = base::Value::Dict().Set(keys::kDefaultLocale, "en"); - std::string error; + std::u16string error; EXPECT_FALSE(extension_l10n_util::ValidateExtensionLocales(temp.GetPath(), manifest, &error)); - EXPECT_FALSE(base::Contains( - error, base::UTF16ToUTF8(sr_messages_file.LossyDisplayName()))); - EXPECT_THAT(error, testing::HasSubstr(ErrorUtils::FormatErrorMessage( - errors::kLocalesInvalidLocale, - base::UTF16ToUTF8(de_messages_file.LossyDisplayName()), - "Variable $VAR$ used but not defined."))); - EXPECT_THAT(error, testing::HasSubstr(ErrorUtils::FormatErrorMessage( - errors::kLocalesInvalidLocale, - base::UTF16ToUTF8(es_messages_file.LossyDisplayName()), - "expected value at line 1 column 24"))); - EXPECT_THAT(error, testing::HasSubstr(ErrorUtils::FormatErrorMessage( - errors::kLocalesInvalidLocale, - base::UTF16ToUTF8(fr_messages_file.LossyDisplayName()), - "There is no \"message\" element for key name."))); + EXPECT_FALSE(base::Contains(error, sr_messages_file.LossyDisplayName())); + EXPECT_THAT(base::UTF16ToUTF8(error), + testing::HasSubstr(ErrorUtils::FormatErrorMessage( + errors::kLocalesInvalidLocale, + base::UTF16ToUTF8(de_messages_file.LossyDisplayName()), + "Variable $VAR$ used but not defined."))); + EXPECT_THAT(base::UTF16ToUTF8(error), + testing::HasSubstr(ErrorUtils::FormatErrorMessage( + errors::kLocalesInvalidLocale, + base::UTF16ToUTF8(es_messages_file.LossyDisplayName()), + "expected value at line 1 column 24"))); + EXPECT_THAT(base::UTF16ToUTF8(error), + testing::HasSubstr(ErrorUtils::FormatErrorMessage( + errors::kLocalesInvalidLocale, + base::UTF16ToUTF8(fr_messages_file.LossyDisplayName()), + "There is no \"message\" element for key name."))); } TEST(ExtensionL10nUtil, GetValidLocalesEmptyLocaleFolder) {
diff --git a/extensions/common/file_util.cc b/extensions/common/file_util.cc index 793ce17..37619f1e 100644 --- a/extensions/common/file_util.cc +++ b/extensions/common/file_util.cc
@@ -229,7 +229,7 @@ scoped_refptr<Extension> LoadExtension(const base::FilePath& extension_path, ManifestLocation location, int flags, - std::string* error) { + std::u16string* error) { return LoadExtension(extension_path, nullptr, std::string(), location, flags, error); } @@ -238,48 +238,51 @@ const ExtensionId& extension_id, ManifestLocation location, int flags, - std::string* error) { + std::u16string* error) { return LoadExtension(extension_path, nullptr, extension_id, location, flags, error); } -// TODO(crbug.com/41317803): Continue removing std::string errors and replacing -// with std::u16string. scoped_refptr<Extension> LoadExtension( const base::FilePath& extension_path, const base::FilePath::CharType* manifest_file, const ExtensionId& extension_id, ManifestLocation location, int flags, - std::string* error) { + std::u16string* error) { + error->clear(); + std::string utf8_error; std::optional<base::Value::Dict> manifest; if (!manifest_file) { - manifest = LoadManifest(extension_path, error); + manifest = LoadManifest(extension_path, &utf8_error); } else { - manifest = LoadManifest(extension_path, manifest_file, error); + manifest = LoadManifest(extension_path, manifest_file, &utf8_error); } if (!manifest) { + *error = base::UTF8ToUTF16(utf8_error); return nullptr; } + // TODO(crbug.com/41317803): Continue removing std::string errors and + // replacing with std::u16string. if (!extension_l10n_util::LocalizeExtension( extension_path, &manifest.value(), extension_l10n_util::GetGzippedMessagesPermissionForLocation( location), - error)) { + &utf8_error)) { + *error = base::UTF8ToUTF16(utf8_error); return nullptr; } - std::u16string utf16_error; scoped_refptr<Extension> extension(Extension::Create( - extension_path, location, *manifest, flags, extension_id, &utf16_error)); + extension_path, location, *manifest, flags, extension_id, error)); if (!extension.get()) { - *error = base::UTF16ToUTF8(utf16_error); return nullptr; } std::vector<InstallWarning> warnings; - if (!ValidateExtension(extension.get(), error, &warnings)) { + if (!ValidateExtension(extension.get(), &utf8_error, &warnings)) { + *error = base::UTF8ToUTF16(utf8_error); return nullptr; } extension->AddInstallWarnings(std::move(warnings)); @@ -287,6 +290,8 @@ return extension; } +// TODO(crbug.com/41317803): Continue removing std::string errors and replacing +// with std::u16string. std::optional<base::Value::Dict> LoadManifest( const base::FilePath& extension_path, std::string* error) { @@ -327,6 +332,8 @@ return std::move(*root).TakeDict(); } +// TODO(crbug.com/41317803): Continue removing std::string errors and replacing +// with std::u16string. bool ValidateExtension(const Extension* extension, std::string* error, std::vector<InstallWarning>* warnings) { @@ -338,16 +345,16 @@ // Check children of extension root to see if any of them start with _ and is // not on the reserved list. We only warn, and do not block the loading of the // extension. - std::string warning; + std::u16string warning; if (!CheckForIllegalFilenames(extension->path(), &warning)) { - warnings->emplace_back(warning); + warnings->emplace_back(base::UTF16ToUTF8(warning)); } // Check that the extension does not include any Windows reserved filenames. - std::string windows_reserved_warning; + std::u16string windows_reserved_warning; if (!CheckForWindowsReservedFilenames(extension->path(), &windows_reserved_warning)) { - warnings->emplace_back(windows_reserved_warning); + warnings->emplace_back(base::UTF16ToUTF8(windows_reserved_warning)); } // Check that extensions don't include private key files. @@ -401,7 +408,7 @@ } bool CheckForIllegalFilenames(const base::FilePath& extension_path, - std::string* error) { + std::u16string* error) { // Enumerate all files and directories in the extension root. // There is a problem when using pattern "_*" with FileEnumerator, so we have // to cheat with find_first_of and match all. @@ -424,10 +431,11 @@ continue; } - *error = base::StringPrintf( - "Cannot load extension with file or directory name %s. " - "Filenames starting with \"_\" are reserved for use by the system.", - file.BaseName().AsUTF8Unsafe().c_str()); + *error = + base::StrCat({u"Cannot load extension with file or directory name ", + file.BaseName().LossyDisplayName(), + u". Filenames starting with \"_\" are reserved for use " + u"by the system."}); return false; } @@ -435,7 +443,7 @@ } bool CheckForWindowsReservedFilenames(const base::FilePath& extension_dir, - std::string* error) { + std::u16string* error) { const int kFilesAndDirectories = base::FileEnumerator::DIRECTORIES | base::FileEnumerator::FILES; base::FileEnumerator traversal(extension_dir, true, kFilesAndDirectories); @@ -445,10 +453,10 @@ base::FilePath::StringType filename = current.BaseName().value(); bool is_reserved_filename = net::IsReservedNameOnWindows(filename); if (is_reserved_filename) { - *error = base::StringPrintf( - "Cannot load extension with file or directory name %s. " - "The filename is illegal.", - current.BaseName().AsUTF8Unsafe().c_str()); + *error = + base::StrCat({u"Cannot load extension with file or directory name ", + current.BaseName().LossyDisplayName(), + u". The filename is illegal."}); return false; } }
diff --git a/extensions/common/file_util.h b/extensions/common/file_util.h index 70f88204..bfb10fb 100644 --- a/extensions/common/file_util.h +++ b/extensions/common/file_util.h
@@ -65,14 +65,14 @@ scoped_refptr<Extension> LoadExtension(const base::FilePath& extension_root, mojom::ManifestLocation location, int flags, - std::string* error); + std::u16string* error); // The same as LoadExtension except use the provided `extension_id`. scoped_refptr<Extension> LoadExtension(const base::FilePath& extension_root, const ExtensionId& extension_id, mojom::ManifestLocation location, int flags, - std::string* error); + std::u16string* error); // The same as LoadExtension except use the provided `manifest_file` and // `extension_id`. If manifest_file is not specified, uses the default @@ -83,7 +83,7 @@ const ExtensionId& extension_id, mojom::ManifestLocation location, int flags, - std::string* error); + std::u16string* error); // Loads an extension manifest from the specified directory. Returns // `std::nullopt` on failure, with a description of the error in `error`. @@ -116,14 +116,14 @@ // If any files or directories are found using "_" prefix and are not on // reserved list we return false, and set error message. bool CheckForIllegalFilenames(const base::FilePath& extension_path, - std::string* error); + std::u16string* error); // We need to reserve the names of special Windows filenames, such as // "com2.zip." // If any files or directories are found to be using a reserved Windows // filename, we return false, and set error message. bool CheckForWindowsReservedFilenames(const base::FilePath& extension_dir, - std::string* error); + std::u16string* error); // Returns a path to a temporary directory for unpacking an extension that will // be installed into `extensions_dir`. Creates the directory if necessary.
diff --git a/extensions/common/file_util_unittest.cc b/extensions/common/file_util_unittest.cc index ef4a4c23..36daeaa8 100644 --- a/extensions/common/file_util_unittest.cc +++ b/extensions/common/file_util_unittest.cc
@@ -95,7 +95,7 @@ ASSERT_TRUE( base::WriteFile(ext_path.AppendASCII("manifest.json"), kManifestContent)); - std::string error; + std::u16string error; scoped_refptr<Extension> extension = file_util::LoadExtension( ext_path, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error); ASSERT_TRUE(extension) << error; @@ -299,7 +299,7 @@ ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &install_dir)); install_dir = install_dir.AppendASCII("extension_with_locales"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( install_dir, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); ASSERT_TRUE(extension.get() != nullptr); @@ -311,7 +311,7 @@ ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &install_dir)); install_dir = install_dir.AppendASCII("extension_with_gzipped_locales"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( install_dir, ManifestLocation::kComponent, Extension::NO_FLAGS, &error)); ASSERT_TRUE(extension.get() != nullptr); @@ -324,11 +324,11 @@ ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &install_dir)); install_dir = install_dir.AppendASCII("extension_with_gzipped_locales"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( install_dir, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); ASSERT_TRUE(extension.get() == nullptr); - EXPECT_EQ("Catalog file is missing for locale en.", error); + EXPECT_EQ(u"Catalog file is missing for locale en.", error); } TEST_F(FileUtilTest, LoadExtensionWithoutLocalesFolder) { @@ -336,7 +336,7 @@ ASSERT_TRUE(base::PathService::Get(DIR_TEST_DATA, &install_dir)); install_dir = install_dir.AppendASCII("extension_without_locales"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( install_dir, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); ASSERT_FALSE(extension.get() == nullptr); @@ -352,7 +352,7 @@ std::string data = "{ \"name\": { \"message\": \"foobar\" } }"; ASSERT_TRUE(base::WriteFile(src_path.AppendASCII("some_file.txt"), data)); - std::string error; + std::u16string error; EXPECT_TRUE(file_util::CheckForIllegalFilenames(temp.GetPath(), &error)); } @@ -368,7 +368,7 @@ ASSERT_TRUE(base::CreateDirectory(src_path)); } - std::string error; + std::u16string error; EXPECT_TRUE(file_util::CheckForIllegalFilenames(temp.GetPath(), &error)); } @@ -382,7 +382,7 @@ src_path = temp.GetPath().AppendASCII("_some_dir"); ASSERT_TRUE(base::CreateDirectory(src_path)); - std::string error; + std::u16string error; EXPECT_FALSE(file_util::CheckForIllegalFilenames(temp.GetPath(), &error)); } @@ -397,7 +397,7 @@ base::FilePath src_path = temp.GetPath().AppendASCII("aux"); ASSERT_TRUE(base::CreateDirectory(src_path)); - std::string error; + std::u16string error; EXPECT_FALSE( file_util::CheckForWindowsReservedFilenames(temp.GetPath(), &error)); } @@ -413,7 +413,7 @@ std::string data = "{ \"name\": { \"message\": \"foobar\" } }"; ASSERT_TRUE(base::WriteFile(src_path.AppendASCII("lpt1.txt"), data)); - std::string error; + std::u16string error; EXPECT_FALSE( file_util::CheckForWindowsReservedFilenames(temp.GetPath(), &error)); } @@ -425,12 +425,12 @@ install_dir = install_dir.AppendASCII("file_util").AppendASCII("missing_manifest"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( install_dir, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); ASSERT_TRUE(extension.get() == nullptr); ASSERT_FALSE(error.empty()); - ASSERT_EQ(manifest_errors::kManifestUnreadable, error); + ASSERT_EQ(manifest_errors::kManifestUnreadable, base::UTF16ToUTF8(error)); } TEST_F(FileUtilTest, LoadExtensionGivesHelpfullErrorOnBadManifest) { @@ -439,15 +439,15 @@ install_dir = install_dir.AppendASCII("file_util").AppendASCII("bad_manifest"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( install_dir, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); ASSERT_TRUE(extension.get() == nullptr); ASSERT_FALSE(error.empty()); - ASSERT_NE( - std::string::npos, - error.find(manifest_errors::kManifestParseError + - std::string(" expected `,` or `}` at line 2 column 16"))); + ASSERT_NE(std::string::npos, + base::UTF16ToUTF8(error).find( + manifest_errors::kManifestParseError + + std::string(" expected `,` or `}` at line 2 column 16"))); } TEST_F(FileUtilTest, ValidateThemeUTF8) { @@ -581,7 +581,7 @@ ASSERT_TRUE(base::WriteFile(ext_path.AppendASCII("manifest.json"), manifest)); ASSERT_TRUE(base::WriteFile(ext_path.AppendASCII("a_key.pem"), private_key)); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( ext_path, "the_id", ManifestLocation::kExternalPref, Extension::NO_FLAGS, &error)); @@ -598,7 +598,7 @@ ManifestLocation::kExternalPref, Extension::ERROR_ON_PRIVATE_KEY, &error); EXPECT_FALSE(extension.get()); - EXPECT_THAT(error, + EXPECT_THAT(base::UTF16ToUTF8(error), testing::ContainsRegex( "extension includes the key file.*ext_root.a_key.pem")); } @@ -620,7 +620,7 @@ "}\n"; ASSERT_TRUE(base::WriteFile(ext_path.AppendASCII(kCustomManifest), manifest)); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( ext_path, kCustomManifestFilename, "the_id", ManifestLocation::kExternalPref, Extension::NO_FLAGS, &error)); @@ -636,7 +636,7 @@ base::FilePath ext_dir = install_dir.AppendASCII("file_util").AppendASCII("bad_icon"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( ext_dir, ManifestLocation::kInternal, Extension::NO_FLAGS, &error)); ASSERT_FALSE(extension); @@ -650,11 +650,11 @@ base::FilePath ext_dir = install_dir.AppendASCII("file_util").AppendASCII("bad_icon"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( ext_dir, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); EXPECT_FALSE(extension); - EXPECT_EQ("Could not load icon 'missing-icon.png' specified in 'icons'.", + EXPECT_EQ(u"Could not load icon 'missing-icon.png' specified in 'icons'.", error); } @@ -669,14 +669,14 @@ // Set the flag that enables the error. file_util::SetReportErrorForInvisibleIconForTesting(true); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( ext_dir, ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); file_util::SetReportErrorForInvisibleIconForTesting(false); EXPECT_FALSE(extension); EXPECT_EQ( - "Icon 'invisible_icon.png' specified in 'icons' is not " - "sufficiently visible.", + u"Icon 'invisible_icon.png' specified in 'icons' is not " + u"sufficiently visible.", error); } @@ -691,7 +691,7 @@ // Set the flag that enables the error. file_util::SetReportErrorForInvisibleIconForTesting(true); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( ext_dir, ManifestLocation::kInternal, Extension::NO_FLAGS, &error)); file_util::SetReportErrorForInvisibleIconForTesting(false);
diff --git a/extensions/common/manifest_handlers/extension_action_handler_unittest.cc b/extensions/common/manifest_handlers/extension_action_handler_unittest.cc index 52462b5..dc9c0a9 100644 --- a/extensions/common/manifest_handlers/extension_action_handler_unittest.cc +++ b/extensions/common/manifest_handlers/extension_action_handler_unittest.cc
@@ -49,15 +49,15 @@ GetTestDataDir().AppendASCII("browser_action_invisible_icon"); // Set the flag that enables the error. file_util::SetReportErrorForInvisibleIconForTesting(true); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); file_util::SetReportErrorForInvisibleIconForTesting(false); EXPECT_FALSE(extension); EXPECT_EQ( - "Icon 'invisible_icon.png' specified in 'browser_action' is not " - "sufficiently visible.", + u"Icon 'invisible_icon.png' specified in 'browser_action' is not " + u"sufficiently visible.", error); } @@ -68,15 +68,15 @@ GetTestDataDir().AppendASCII("page_action_invisible_icon"); // Set the flag that enables the error. file_util::SetReportErrorForInvisibleIconForTesting(true); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); file_util::SetReportErrorForInvisibleIconForTesting(false); EXPECT_FALSE(extension); EXPECT_EQ( - "Icon 'invisible_icon.png' specified in 'page_action' is not " - "sufficiently visible.", + u"Icon 'invisible_icon.png' specified in 'page_action' is not " + u"sufficiently visible.", error); } @@ -84,13 +84,14 @@ TEST(ExtensionActionHandlerTest, InvalidActionIcon_ManifestV3) { base::FilePath extension_dir = GetTestDataDir().AppendASCII("action_invalid_icon"); - std::string error; + std::u16string error; scoped_refptr<Extension> extension(file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kUnpacked, Extension::NO_FLAGS, &error)); EXPECT_FALSE(extension); - EXPECT_EQ("Could not load icon 'nonexistent_icon.png' specified in 'action'.", - error); + EXPECT_EQ( + u"Could not load icon 'nonexistent_icon.png' specified in 'action'.", + error); } using ExtensionActionHandlerManifestTest = ManifestTest; @@ -198,7 +199,7 @@ const char* popup_file_name, int manifest_version, TestExtensionDir* test_extension_dir, - std::string* error) { + std::u16string* error) { const char* action_key = ActionInfo::GetManifestKeyForActionType(GetParam()); @@ -333,7 +334,7 @@ constexpr char valid_popup_file_name[] = "popup.html"; TestExtensionDir test_extension_dir = TestExtensionDir(); int manifest_version = GetManifestVersionForActionType(GetParam()); - std::string error; + std::u16string error; scoped_refptr<Extension> test_extension = LoadExtensionWithDefaultPopup( valid_popup_file_name, manifest_version, &test_extension_dir, &error); ASSERT_TRUE(test_extension) << error; @@ -359,7 +360,7 @@ constexpr char empty_popup_file_name[] = ""; TestExtensionDir test_extension_dir = TestExtensionDir(); int manifest_version = GetManifestVersionForActionType(GetParam()); - std::string error; + std::u16string error; scoped_refptr<Extension> test_extension = LoadExtensionWithDefaultPopup( empty_popup_file_name, manifest_version, &test_extension_dir, &error); ASSERT_TRUE(test_extension) << error; @@ -385,13 +386,12 @@ "chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/popup.html"; TestExtensionDir test_extension_dir = TestExtensionDir(); int manifest_version = GetManifestVersionForActionType(GetParam()); - std::string error; + std::u16string error; scoped_refptr<Extension> test_extension = LoadExtensionWithDefaultPopup( other_extension_specified_popup_file_name, manifest_version, &test_extension_dir, &error); ASSERT_FALSE(test_extension); - ASSERT_EQ(base::UTF16ToUTF8(manifest_errors::kInvalidActionDefaultPopup), - error); + ASSERT_EQ(manifest_errors::kInvalidActionDefaultPopup, error); } // Tests warning when the default_popup doesn't exist on file system. @@ -399,7 +399,7 @@ constexpr char nonexistent_popup_file_name[] = "nonexistent_popup.html"; TestExtensionDir test_extension_dir = TestExtensionDir(); int manifest_version = GetManifestVersionForActionType(GetParam()); - std::string error; + std::u16string error; scoped_refptr<Extension> test_extension = LoadExtensionWithDefaultPopup( nonexistent_popup_file_name, manifest_version, &test_extension_dir, &error);
diff --git a/extensions/shell/browser/shell_extension_loader.cc b/extensions/shell/browser/shell_extension_loader.cc index df96a74..1da84bc 100644 --- a/extensions/shell/browser/shell_extension_loader.cc +++ b/extensions/shell/browser/shell_extension_loader.cc
@@ -38,7 +38,7 @@ } int load_flags = Extension::FOLLOW_SYMLINKS_ANYWHERE; - std::string load_error; + std::u16string load_error; scoped_refptr<Extension> extension = file_util::LoadExtension( extension_dir, mojom::ManifestLocation::kCommandLine, load_flags, &load_error);
diff --git a/extensions/test/test_extension_dir.cc b/extensions/test/test_extension_dir.cc index 98c986a..c5697adf 100644 --- a/extensions/test/test_extension_dir.cc +++ b/extensions/test/test_extension_dir.cc
@@ -11,6 +11,7 @@ #include "base/json/json_writer.h" #include "base/numerics/checked_math.h" #include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "base/threading/thread_restrictions.h" #include "extensions/browser/extension_creator.h" #include "testing/gtest/include/gtest/gtest.h" @@ -74,7 +75,7 @@ if (!creator.Run(dir_.GetPath(), crx_path, pem_in_path, pem_out_path, ExtensionCreator::kOverwriteCRX)) { ADD_FAILURE() << "ExtensionCreator::Run() failed: " - << creator.error_message(); + << base::UTF16ToUTF8(creator.error_message()); return base::FilePath(); } if (!base::PathExists(crx_path)) {
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 index 8405948d..8d60857 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -41a833ee9153b3967a4c2c49e14e92402530d52b \ No newline at end of file +c489c6ef1b1dfa2539895a7917ae39c2b1676adb \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 index cbe100f..4ab3741 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -2010c5de9131f1f744c905072f93e06b071070db \ No newline at end of file +ad968f152f4d37c7ebdcffe6dbc2effc46e58fec \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 index 9af128f..e914b09 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -fce285f2733f292cae8fdb7f19e26d153038bf22 \ No newline at end of file +12c61711a3e459f70eba659479bce2eba8dbf1d5 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 index 2342705..74941ab 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -2e772f8391fe6755d8ee10a9db481dba30fa2463 \ No newline at end of file +022149505cd82cda1e7e0f3d22f5588a44b96171 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 index a52e808..a96876a 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -a851bca4df97a51c86e6c8e9e813e94e9fec24a3 \ No newline at end of file +a4891288952331b1b26e55df830a1c0be2dd8a26 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 index 23e7935..94841e87 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -533a056c2449d5cf892498788ecc1c5ff9aeea0b \ No newline at end of file +fc0cfe5a2aa3a582703a58b252165ddf869bc9ae \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 index d6dbe7a..0fb39bd 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -781988907ddc4bca3f22e9b744f72fa1c77c96b7 \ No newline at end of file +bf54ce67f821eff0ceca896f4c31ba96c4aaae31 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 index 576b5dd..21e78ffb 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -cc203e58f3d5c3eee29d29bfc9d5b5203b109dc1 \ No newline at end of file +9c7427ff41c6abc35b469bb13eaee832a9a34807 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 index 9b5e89d..7f14e1b 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -1230735a279938e634946122cc7593e6c98fb84b \ No newline at end of file +738fab8f431ab10ed04304388d922a111c628329 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 4bedf7e1..b049a242 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -2c4e18c954f65e9714adc5bb3e17f79a78d56d74 \ No newline at end of file +62df44a67010f26c03665768c274d5f48071497c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index e8eb0f9..af652370 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -7886698759b709a8afe3de3664741c48377cf33d \ No newline at end of file +88dd126a038e1538a019f4b969645fe8717b0b2f \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 index 56e0ff5e..cbc96a6 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -659fdea16047821bcb3f52299bb0789fd841d703 \ No newline at end of file +a2304404c4e0462f7192e86221c0dd8839be8fe3 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index c18c6b9a8..546a508 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -353d52b3d662f7451b98bcf15d6b5a154b009e16 \ No newline at end of file +2b21ad789f0250da8bfc14ff0cfc282ed4c6ebad \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 904358e0..0f522f9 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -bf4569971a7b7ea8c6b8a8eb08038fbfd44aaab9 \ No newline at end of file +0caab44dc09c409ddd44c0cf7429e1d90cfc270c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index 40f4478..c540b08 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -25faeb92f6414a4e9effa15a56ab0ccd9b9617dc \ No newline at end of file +83a49475c2ad36faba2cb1d56bd542fccd831426 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 index 6a88cc5d..a92b01ab 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -e5d92b738953eaf3b9bfb55bf18ad20a8dcdc3b6 \ No newline at end of file +c7a33efe53ba6d67113cc941a6cb6f796cb2db9b \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index 45fa841a..1991859 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -5ec042aa52785a6aa9554d5536124b281ea2bcd8 \ No newline at end of file +d32fcf92c88e545da16a62d64bcef5c8c3c8e6be \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 7c44f08..2c98c1c 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -57ed563400f78c6b42a06a8e7237937879b2df23 \ No newline at end of file +701a483877489dfc13822c8b540ce51e04cefc80 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 index 5b92488..44de62d 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -09b7ccf49b91ac2aeece39ac25db657c8576fb08 \ No newline at end of file +5e116fc4eafd9530dcc8197e90295b0018930ae8 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 index 2678696..bdd20916 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -b675e5af34d31116946b24d22ed412ebdb7b9250 \ No newline at end of file +4caa7cb460475172b401674b7f2c5ef52960a7c4 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index 808b9971..e1b25f46 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -6f8d0b1ca5180a2e691147c51da92afb5b82e084 \ No newline at end of file +b43bb80360b0bcc98ad5e57d2b23f50ea3d12810 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 index 7a683c5b..27df52f7 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -b132105a6d0981533ad524a4b5f3319af1e435c0 \ No newline at end of file +7bf5553dbda13944716c38a36cc7ba99699e8d5e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index 8ca4c43..fbf6eec 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -3983a40978d247cb6d7a30d654761491467b7601 \ No newline at end of file +3fe4033e39f3a0a5fa6360994fc44c78ebcb1dd4 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 index d39f26f0..ab0a572 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -9ac691526b7c31690f9fa292c7030bf991f44361 \ No newline at end of file +361fbd3448071c5a201affd7b4c4fa67f9d39a80 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index 2e47ab80..f1d0a42 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -52a7d77d7c3023448bf79a8d1ad9c8874d18f64b \ No newline at end of file +19f72dd9efaca440876b557cd23cd5c332eced2a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 index 0d23b4ea..8b6137d 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -11d464f31f84f03c8e4f18ce17d4e4b243d24c7f \ No newline at end of file +fcfa98c3c6f7d990ce776e5355ab617346eb235a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index deb3e1ee9..3a6f5474 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -8c234d16e798fb19b092e60596b417e0ad1e9f39 \ No newline at end of file +64900848b31f207c6826b3a276fa02b056696a32 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 324893f1..b01d125 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -54b218e472edd0d5a0377cd1c210382fd54b2465 \ No newline at end of file +3b5c2af2f7d01c4612c7f7b187b3380390d278d7 \ No newline at end of file
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index 8871a94..e70f68a2 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -607,12 +607,10 @@ #endif ); -#if !BUILDFLAG(IS_ANDROID) // Allow document picture-in-picture to navigate. This should be disabled // except for testing. BASE_FEATURE(kDocumentPictureInPictureNavigation, base::FEATURE_DISABLED_BY_DEFAULT); -#endif // !BUILDFLAG(IS_ANDROID) // Adds an animation to document picture-in-picture resizes. BASE_FEATURE(kDocumentPictureInPictureAnimateResize,
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index 5e7cfdd..fc6bc4ce 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -200,9 +200,7 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kD3D11VideoDecoderUseSharedHandle); MEDIA_EXPORT BASE_DECLARE_FEATURE(kDedicatedMediaServiceThread); MEDIA_EXPORT BASE_DECLARE_FEATURE(kDeferAudioFocusUntilAudible); -#if !BUILDFLAG(IS_ANDROID) MEDIA_EXPORT BASE_DECLARE_FEATURE(kDocumentPictureInPictureNavigation); -#endif // !BUILDFLAG(IS_ANDROID) MEDIA_EXPORT BASE_DECLARE_FEATURE(kDocumentPictureInPictureAnimateResize); MEDIA_EXPORT BASE_DECLARE_FEATURE(kDocumentPictureInPictureCapture); MEDIA_EXPORT BASE_DECLARE_FEATURE(kEnableTabMuting);
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn index 44642618..e37cbe0 100644 --- a/media/capture/BUILD.gn +++ b/media/capture/BUILD.gn
@@ -418,6 +418,7 @@ deps = [ ":capture_lib", "//base/test:test_support", + "//gpu:test_support", "//gpu/command_buffer/client", "//gpu/command_buffer/common", "//media:test_support",
diff --git a/media/capture/video/file_video_capture_device_unittest.cc b/media/capture/video/file_video_capture_device_unittest.cc index 7cea3251..6748b36ae 100644 --- a/media/capture/video/file_video_capture_device_unittest.cc +++ b/media/capture/video/file_video_capture_device_unittest.cc
@@ -84,7 +84,6 @@ GetTestDataFilePath("bear.mjpeg")); device_->AllocateAndStart(VideoCaptureParams(), std::move(client_)); test_sii_ = base::MakeRefCounted<gpu::TestSharedImageInterface>(); - test_sii_->AlwaysBackMappableSharedImagesWithShMem(); VideoCaptureGpuChannelHost::GetInstance().SetSharedImageInterface( test_sii_); }
diff --git a/media/capture/video/linux/v4l2_capture_delegate_unittest.cc b/media/capture/video/linux/v4l2_capture_delegate_unittest.cc index 7504932..d2094318 100644 --- a/media/capture/video/linux/v4l2_capture_delegate_unittest.cc +++ b/media/capture/video/linux/v4l2_capture_delegate_unittest.cc
@@ -317,8 +317,7 @@ public: MockCaptureHandleProvider(const gfx::Size& size, viz::SharedImageFormat format) { - gmb_handle_ = - gpu::TestSharedImageInterface::CreatePixmapHandle(size, format); + gmb_handle_ = gpu::TestSharedImageInterface::CreateGMBHandle(format, size); } // Duplicate as an writable (unsafe) shared memory region. base::UnsafeSharedMemoryRegion DuplicateAsUnsafeRegion() override { @@ -357,7 +356,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( ::switches::kVideoCaptureUseGpuMemoryBuffer); test_sii_ = base::MakeRefCounted<gpu::TestSharedImageInterface>(); - test_sii_->AlwaysBackMappableSharedImagesWithShMem(); VideoCaptureGpuChannelHost::GetInstance().SetSharedImageInterface( test_sii_); }
diff --git a/media/capture/video/mock_video_capture_device_client.cc b/media/capture/video/mock_video_capture_device_client.cc index 688bb38d..0d4832c 100644 --- a/media/capture/video/mock_video_capture_device_client.cc +++ b/media/capture/video/mock_video_capture_device_client.cc
@@ -10,6 +10,8 @@ #include "base/containers/span.h" #include "base/memory/raw_span.h" #include "base/time/time.h" +#include "gpu/command_buffer/client/test_shared_image_interface.h" +#include "media/base/format_utils.h" #include "media/base/video_frame.h" using testing::_; @@ -34,8 +36,9 @@ class StubBufferHandleProvider : public VideoCaptureDevice::Client::Buffer::HandleProvider { public: - explicit StubBufferHandleProvider(base::HeapArray<uint8_t> data) - : data_(std::move(data)) {} + StubBufferHandleProvider(base::HeapArray<uint8_t> data, + gfx::GpuMemoryBufferHandle handle) + : data_(std::move(data)), gmb_handle_(std::move(handle)) {} ~StubBufferHandleProvider() override = default; @@ -49,11 +52,12 @@ } gfx::GpuMemoryBufferHandle GetGpuMemoryBufferHandle() override { - return gfx::GpuMemoryBufferHandle(); + return gmb_handle_.Clone(); } private: base::HeapArray<uint8_t> data_; + gfx::GpuMemoryBufferHandle gmb_handle_; }; class StubReadWritePermission @@ -66,14 +70,17 @@ const base::raw_span<uint8_t> data_; }; -VideoCaptureDevice::Client::Buffer CreateStubBuffer(int buffer_id, - size_t mapped_size) { +VideoCaptureDevice::Client::Buffer CreateStubBuffer( + int buffer_id, + size_t mapped_size, + gfx::GpuMemoryBufferHandle handle) { const int arbitrary_frame_feedback_id = 0; auto buffer = base::HeapArray<uint8_t>::WithSize(mapped_size); auto unowned_buffer = buffer.as_span(); return VideoCaptureDevice::Client::Buffer( buffer_id, arbitrary_frame_feedback_id, - std::make_unique<StubBufferHandleProvider>(std::move(buffer)), + std::make_unique<StubBufferHandleProvider>(std::move(buffer), + std::move(handle)), std::make_unique<StubReadWritePermission>(unowned_buffer)); } @@ -118,10 +125,21 @@ VideoCaptureDevice::Client::Buffer* buffer, int* require_new_buffer_id, int* retire_old_buffer_id) { EXPECT_GT(dimensions.GetArea(), 0); + gfx::GpuMemoryBufferHandle gmb_handle; + auto si_format = VideoPixelFormatToSharedImageFormat(format); + + // Note: Not all VideoPixelFormats have a corresponding + // SharedImageFormat. + if (si_format) { + gmb_handle = gpu::TestSharedImageInterface::CreateGMBHandle( + si_format.value(), dimensions); + } const VideoCaptureFormat frame_format(dimensions, 0.0, format); *buffer = CreateStubBuffer( - 0, VideoFrame::AllocationSize(frame_format.pixel_format, - frame_format.frame_size)); + 0, + VideoFrame::AllocationSize(frame_format.pixel_format, + frame_format.frame_size), + std::move(gmb_handle)); return VideoCaptureDevice::Client::ReserveResult::kSucceeded; }); ON_CALL(*result, OnIncomingCapturedData)
diff --git a/services/webnn/public/mojom/features.mojom b/services/webnn/public/mojom/features.mojom index 6cb4116..d00643fa 100644 --- a/services/webnn/public/mojom/features.mojom +++ b/services/webnn/public/mojom/features.mojom
@@ -46,12 +46,12 @@ [EnableIf=is_win] feature kWebNNDirectML { const string name = "WebNNDirectML"; - const bool default_state = true; + const bool default_state = false; }; // Enables the ONNX Runtime backend for WebNN. [EnableIf=is_win] feature kWebNNOnnxRuntime { const string name = "WebNNOnnxRuntime"; - const bool default_state = false; + const bool default_state = true; };
diff --git a/services/webnn/webnn_context_provider_impl_unittest.cc b/services/webnn/webnn_context_provider_impl_unittest.cc index 2803198..531eb49 100644 --- a/services/webnn/webnn_context_provider_impl_unittest.cc +++ b/services/webnn/webnn_context_provider_impl_unittest.cc
@@ -30,6 +30,17 @@ WebNNContextProviderImplTest& operator=(const WebNNContextProviderImplTest&) = delete; +#if BUILDFLAG(IS_WIN) + void EnableDirectMLBackend() { + scoped_feature_list_.Reset(); + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/{webnn::mojom::features:: + kWebMachineLearningNeuralNetwork, + webnn::mojom::features::kWebNNDirectML}, + /*disabled_features=*/{webnn::mojom::features::kWebNNOnnxRuntime}); + } +#endif + protected: WebNNContextProviderImplTest() : scoped_feature_list_( @@ -83,6 +94,8 @@ #if BUILDFLAG(IS_WIN) TEST_F(WebNNContextProviderImplTest, CPUIsSupported) { + EnableDirectMLBackend(); + mojo::Remote<mojom::WebNNContextProvider> provider_remote; test::WebNNTestEnvironment webnn_test_environment; webnn_test_environment.BindWebNNContextProvider( @@ -103,8 +116,9 @@ // DirectML implementation unconditionally depends on a GPU/NPU. TEST_F(WebNNContextProviderImplTest, GPUNotSupported) { - mojo::Remote<mojom::WebNNContextProvider> provider_remote; + EnableDirectMLBackend(); + mojo::Remote<mojom::WebNNContextProvider> provider_remote; test::WebNNTestEnvironment webnn_test_environment( WebNNContextProviderImpl::WebNNStatus::kWebNNGpuDisabled); webnn_test_environment.BindWebNNContextProvider( @@ -125,8 +139,9 @@ } TEST_F(WebNNContextProviderImplTest, NPUNotSupported) { - mojo::Remote<mojom::WebNNContextProvider> provider_remote; + EnableDirectMLBackend(); + mojo::Remote<mojom::WebNNContextProvider> provider_remote; test::WebNNTestEnvironment webnn_test_environment( WebNNContextProviderImpl::WebNNStatus::kWebNNNpuDisabled); webnn_test_environment.BindWebNNContextProvider( @@ -147,8 +162,9 @@ } TEST_F(WebNNContextProviderImplTest, GpuFeatureStatusDisabled) { - mojo::Remote<mojom::WebNNContextProvider> provider_remote; + EnableDirectMLBackend(); + mojo::Remote<mojom::WebNNContextProvider> provider_remote; test::WebNNTestEnvironment webnn_test_environment( WebNNContextProviderImpl::WebNNStatus::kWebNNGpuFeatureStatusDisabled); webnn_test_environment.BindWebNNContextProvider(
diff --git a/services/webnn/webnn_graph_impl_backend_test.cc b/services/webnn/webnn_graph_impl_backend_test.cc index 07bc5586..7c7e2b6 100644 --- a/services/webnn/webnn_graph_impl_backend_test.cc +++ b/services/webnn/webnn_graph_impl_backend_test.cc
@@ -291,9 +291,13 @@ #if BUILDFLAG(IS_WIN) class WebNNGraphImplBackendTest : public dml::TestBase { public: - WebNNGraphImplBackendTest() - : scoped_feature_list_( - webnn::mojom::features::kWebMachineLearningNeuralNetwork) {} + WebNNGraphImplBackendTest() { + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/{webnn::mojom::features:: + kWebMachineLearningNeuralNetwork, + webnn::mojom::features::kWebNNDirectML}, + /*disabled_features=*/{webnn::mojom::features::kWebNNOnnxRuntime}); + } void SetUp() override; void SetUpBase();
diff --git a/services/webnn/webnn_tensor_impl_backend_test.cc b/services/webnn/webnn_tensor_impl_backend_test.cc index 08c9254..15d040f0 100644 --- a/services/webnn/webnn_tensor_impl_backend_test.cc +++ b/services/webnn/webnn_tensor_impl_backend_test.cc
@@ -84,9 +84,13 @@ #if BUILDFLAG(IS_WIN) class WebNNTensorImplBackendTest : public dml::TestBase { public: - WebNNTensorImplBackendTest() - : scoped_feature_list_( - webnn::mojom::features::kWebMachineLearningNeuralNetwork) {} + WebNNTensorImplBackendTest() { + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/{webnn::mojom::features:: + kWebMachineLearningNeuralNetwork, + webnn::mojom::features::kWebNNDirectML}, + /*disabled_features=*/{webnn::mojom::features::kWebNNOnnxRuntime}); + } void SetUp() override; void TearDown() override;
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index fffdf86..11efbea 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -23350,21 +23350,6 @@ ] } ], - "SettingsMultiColumn": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "SettingsMultiColumn" - ] - } - ] - } - ], "SettingsSingleActivity": [ { "platforms": [
diff --git a/third_party/androidx/build.gradle b/third_party/androidx/build.gradle index 4999750a..78b81e5 100644 --- a/third_party/androidx/build.gradle +++ b/third_party/androidx/build.gradle
@@ -314,7 +314,7 @@ google() maven { // This URL is generated by the fetch_all_androidx.py script. - url 'https://androidx.dev/snapshots/builds/14488735/artifacts/repository' + url 'https://androidx.dev/snapshots/builds/14491334/artifacts/repository' } mavenCentral() }
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium index 2855cad..47508f2 100644 --- a/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium +++ b/third_party/androidx/committed/libs/androidx_activity_activity/README.chromium
@@ -1,6 +1,6 @@ Name: Activity Short Name: activity -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/activity/activity/1.13.0-SNAPSHOT/activity-1.13.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/activity/activity/1.13.0-SNAPSHOT/activity-1.13.0-20251125.054742-1.aar Version: 1.13.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium index b334d238..8dc3762 100644 --- a/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium +++ b/third_party/androidx/committed/libs/androidx_activity_activity_compose/README.chromium
@@ -1,6 +1,6 @@ Name: Activity Compose Short Name: activity-compose -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/activity/activity-compose/1.13.0-SNAPSHOT/activity-compose-1.13.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/activity/activity-compose/1.13.0-SNAPSHOT/activity-compose-1.13.0-20251125.054742-1.aar Version: 1.13.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium index 5011084..b02b0da 100644 --- a/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_activity_activity_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Activity Kotlin Extensions Short Name: activity-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/activity/activity-ktx/1.13.0-SNAPSHOT/activity-ktx-1.13.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/activity/activity-ktx/1.13.0-SNAPSHOT/activity-ktx-1.13.0-20251125.054742-1.aar Version: 1.13.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium b/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium index 0232881..453168e 100644 --- a/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium +++ b/third_party/androidx/committed/libs/androidx_annotation_annotation_experimental/README.chromium
@@ -1,6 +1,6 @@ Name: Experimental annotation Short Name: annotation-experimental -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/annotation/annotation-experimental/1.6.0-SNAPSHOT/annotation-experimental-1.6.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/annotation/annotation-experimental/1.6.0-SNAPSHOT/annotation-experimental-1.6.0-20251125.054742-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium index d7b85d9..534f892 100644 --- a/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_annotation_annotation_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: Annotation Short Name: annotation-jvm -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/annotation/annotation-jvm/1.10.0-SNAPSHOT/annotation-jvm-1.10.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/annotation/annotation-jvm/1.10.0-SNAPSHOT/annotation-jvm-1.10.0-20251125.054742-1.jar Version: 1.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium b/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium index 82e3d9a..c7fcbe8 100644 --- a/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appcompat_appcompat/README.chromium
@@ -1,6 +1,6 @@ Name: AppCompat Short Name: appcompat -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/appcompat/appcompat/1.8.0-SNAPSHOT/appcompat-1.8.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/appcompat/appcompat/1.8.0-SNAPSHOT/appcompat-1.8.0-20251125.054742-1.aar Version: 1.8.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium b/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium index 56f2d72..f4bdd6f 100644 --- a/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appcompat_appcompat_resources/README.chromium
@@ -1,6 +1,6 @@ Name: AppCompat Resources Short Name: appcompat-resources -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/appcompat/appcompat-resources/1.8.0-SNAPSHOT/appcompat-resources-1.8.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/appcompat/appcompat-resources/1.8.0-SNAPSHOT/appcompat-resources-1.8.0-20251125.054742-1.aar Version: 1.8.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium index c128beed..06ef977 100644 --- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch/README.chromium
@@ -1,6 +1,6 @@ Name: AppSearch Short Name: appsearch -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/appsearch/appsearch/1.2.0-SNAPSHOT/appsearch-1.2.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/appsearch/appsearch/1.2.0-SNAPSHOT/appsearch-1.2.0-20251125.054742-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium index e13d7fe..8529af4 100644 --- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_builtin_types/README.chromium
@@ -1,6 +1,6 @@ Name: AppSearch Builtin Types Short Name: appsearch-builtin-types -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/appsearch/appsearch-builtin-types/1.2.0-SNAPSHOT/appsearch-builtin-types-1.2.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/appsearch/appsearch-builtin-types/1.2.0-SNAPSHOT/appsearch-builtin-types-1.2.0-20251125.054742-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium index dc42c4f..9ad81ab 100644 --- a/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium +++ b/third_party/androidx/committed/libs/androidx_appsearch_appsearch_platform_storage/README.chromium
@@ -1,6 +1,6 @@ Name: AppSearch Platform Storage Short Name: appsearch-platform-storage -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/appsearch/appsearch-platform-storage/1.2.0-SNAPSHOT/appsearch-platform-storage-1.2.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/appsearch/appsearch-platform-storage/1.2.0-SNAPSHOT/appsearch-platform-storage-1.2.0-20251125.054742-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium b/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium index a25d3ec..b3beedc 100644 --- a/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium +++ b/third_party/androidx/committed/libs/androidx_arch_core_core_common/README.chromium
@@ -1,6 +1,6 @@ Name: Arch-Common Short Name: core-common -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/arch/core/core-common/2.3.0-SNAPSHOT/core-common-2.3.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/arch/core/core-common/2.3.0-SNAPSHOT/core-common-2.3.0-20251125.054742-1.jar Version: 2.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium index eff6e94..b0f064f 100644 --- a/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium +++ b/third_party/androidx/committed/libs/androidx_arch_core_core_runtime/README.chromium
@@ -1,6 +1,6 @@ Name: Arch-Runtime Short Name: core-runtime -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/arch/core/core-runtime/2.3.0-SNAPSHOT/core-runtime-2.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/arch/core/core-runtime/2.3.0-SNAPSHOT/core-runtime-2.3.0-20251125.054742-1.aar Version: 2.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium b/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium index 91a977c..df61e23 100644 --- a/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium +++ b/third_party/androidx/committed/libs/androidx_autofill_autofill/README.chromium
@@ -1,6 +1,6 @@ Name: Autofill Short Name: autofill -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/autofill/autofill/1.4.0-SNAPSHOT/autofill-1.4.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/autofill/autofill/1.4.0-SNAPSHOT/autofill-1.4.0-20251125.054742-1.aar Version: 1.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium index 4c38c6e3..6000dce 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_common/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - Common Short Name: benchmark-common -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/benchmark/benchmark-common/1.5.0-SNAPSHOT/benchmark-common-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/benchmark/benchmark-common/1.5.0-SNAPSHOT/benchmark-common-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium index 299ef7a..b12bcde1 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_junit4/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - JUnit4 Short Name: benchmark-junit4 -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/benchmark/benchmark-junit4/1.5.0-SNAPSHOT/benchmark-junit4-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/benchmark/benchmark-junit4/1.5.0-SNAPSHOT/benchmark-junit4-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium index 6f142fea..e04e1ea 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - Macrobenchmark Short Name: benchmark-macro -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/benchmark/benchmark-macro/1.5.0-SNAPSHOT/benchmark-macro-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/benchmark/benchmark-macro/1.5.0-SNAPSHOT/benchmark-macro-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium index 4d25e95..dfb9b8fd 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_macro_junit4/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark - Macrobenchmark JUnit4 Short Name: benchmark-macro-junit4 -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/benchmark/benchmark-macro-junit4/1.5.0-SNAPSHOT/benchmark-macro-junit4-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/benchmark/benchmark-macro-junit4/1.5.0-SNAPSHOT/benchmark-macro-junit4-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium index 17dc734..95f2bd8c 100644 --- a/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_benchmark_benchmark_traceprocessor_android/README.chromium
@@ -1,6 +1,6 @@ Name: Benchmark TraceProcessor Short Name: benchmark-traceprocessor-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/benchmark/benchmark-traceprocessor-android/1.5.0-SNAPSHOT/benchmark-traceprocessor-android-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/benchmark/benchmark-traceprocessor-android/1.5.0-SNAPSHOT/benchmark-traceprocessor-android-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium b/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium index 5256ff4..46099edd 100644 --- a/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium +++ b/third_party/androidx/committed/libs/androidx_biometric_biometric/README.chromium
@@ -1,6 +1,6 @@ Name: Biometric Short Name: biometric -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/biometric/biometric/1.4.0-SNAPSHOT/biometric-1.4.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/biometric/biometric/1.4.0-SNAPSHOT/biometric-1.4.0-20251125.054742-1.aar Version: 1.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium b/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium index 95a17b7..51141380 100644 --- a/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium +++ b/third_party/androidx/committed/libs/androidx_browser_browser/README.chromium
@@ -1,6 +1,6 @@ Name: Browser Short Name: browser -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/browser/browser/1.10.0-SNAPSHOT/browser-1.10.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/browser/browser/1.10.0-SNAPSHOT/browser-1.10.0-20251125.054742-1.aar Version: 1.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium b/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium index 6cdb4f28..68fd869 100644 --- a/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium +++ b/third_party/androidx/committed/libs/androidx_cardview_cardview/README.chromium
@@ -1,6 +1,6 @@ Name: CardView Short Name: cardview -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/cardview/cardview/1.1.0-SNAPSHOT/cardview-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/cardview/cardview/1.1.0-SNAPSHOT/cardview-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium index a9c9e25..1ceb755 100644 --- a/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_collection_collection_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: collections Short Name: collection-jvm -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/collection/collection-jvm/1.6.0-SNAPSHOT/collection-jvm-1.6.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/collection/collection-jvm/1.6.0-SNAPSHOT/collection-jvm-1.6.0-20251125.054742-1.jar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium index 5349778..69ecbc2 100644 --- a/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_collection_collection_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Collections Kotlin Extensions Short Name: collection-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/collection/collection-ktx/1.6.0-SNAPSHOT/collection-ktx-1.6.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/collection/collection-ktx/1.6.0-SNAPSHOT/collection-ktx-1.6.0-20251125.054742-1.jar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium index 1fe18a8..b98ac7d 100644 --- a/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_animation_animation_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Animation Short Name: animation-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/animation/animation-android/1.11.0-SNAPSHOT/animation-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/animation/animation-android/1.11.0-SNAPSHOT/animation-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium index 217692d..4b9368a4 100644 --- a/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_animation_animation_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Animation Core Short Name: animation-core-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/animation/animation-core-android/1.11.0-SNAPSHOT/animation-core-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/animation/animation-core-android/1.11.0-SNAPSHOT/animation-core-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium index be5cc6bf..99761b3 100644 --- a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Foundation Short Name: foundation-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/foundation/foundation-android/1.11.0-SNAPSHOT/foundation-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/foundation/foundation-android/1.11.0-SNAPSHOT/foundation-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium index ff2986a..4cfb5d4 100644 --- a/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_foundation_foundation_layout_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Layouts Short Name: foundation-layout-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/foundation/foundation-layout-android/1.11.0-SNAPSHOT/foundation-layout-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/foundation/foundation-layout-android/1.11.0-SNAPSHOT/foundation-layout-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium index b056a1c7..72a718f 100644 --- a/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_material3_material3_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Material3 Components Short Name: material3-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/material3/material3-android/1.5.0-SNAPSHOT/material3-android-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/material3/material3-android/1.5.0-SNAPSHOT/material3-android-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium index 3d114bb8..a3cd17c 100644 --- a/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_material_material_ripple_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Material Ripple Short Name: material-ripple-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/material/material-ripple-android/1.11.0-SNAPSHOT/material-ripple-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/material/material-ripple-android/1.11.0-SNAPSHOT/material-ripple-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium index c0d24b5..c769490 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Runtime Short Name: runtime-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/runtime/runtime-android/1.11.0-SNAPSHOT/runtime-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/runtime/runtime-android/1.11.0-SNAPSHOT/runtime-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium index 14b580f1..d2f8892 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_annotation_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Runtime Annotation Short Name: runtime-annotation-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/runtime/runtime-annotation-android/1.11.0-SNAPSHOT/runtime-annotation-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/runtime/runtime-annotation-android/1.11.0-SNAPSHOT/runtime-annotation-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium index 5632b8511..9e96b1ae 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_retain_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Runtime Retain Short Name: runtime-retain-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/runtime/runtime-retain-android/1.11.0-SNAPSHOT/runtime-retain-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/runtime/runtime-retain-android/1.11.0-SNAPSHOT/runtime-retain-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium index 83615b0..9e9af58 100644 --- a/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_runtime_runtime_saveable_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Saveable Short Name: runtime-saveable-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/runtime/runtime-saveable-android/1.11.0-SNAPSHOT/runtime-saveable-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/runtime/runtime-saveable-android/1.11.0-SNAPSHOT/runtime-saveable-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium index d20c10e..394ad55b 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose UI Short Name: ui-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-android/1.11.0-SNAPSHOT/ui-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-android/1.11.0-SNAPSHOT/ui-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium index 7cd9bb25..9dac52d 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_geometry_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Geometry Short Name: ui-geometry-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-geometry-android/1.11.0-SNAPSHOT/ui-geometry-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-geometry-android/1.11.0-SNAPSHOT/ui-geometry-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium index 825e74df..b3964de6 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_graphics_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Graphics Short Name: ui-graphics-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-graphics-android/1.11.0-SNAPSHOT/ui-graphics-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-graphics-android/1.11.0-SNAPSHOT/ui-graphics-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium index d642e1a..a053c8b 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Testing Short Name: ui-test-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-test-android/1.11.0-SNAPSHOT/ui-test-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-test-android/1.11.0-SNAPSHOT/ui-test-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium index 1fdea09..31c92b1 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_junit4_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Testing for JUnit4 Short Name: ui-test-junit4-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-test-junit4-android/1.11.0-SNAPSHOT/ui-test-junit4-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-test-junit4-android/1.11.0-SNAPSHOT/ui-test-junit4-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium index c605695..1df257a 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_test_manifest/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Testing manifest dependency Short Name: ui-test-manifest -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-test-manifest/1.11.0-SNAPSHOT/ui-test-manifest-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-test-manifest/1.11.0-SNAPSHOT/ui-test-manifest-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium index 757e5d8..467058fa 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose UI Text Short Name: ui-text-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-text-android/1.11.0-SNAPSHOT/ui-text-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-text-android/1.11.0-SNAPSHOT/ui-text-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium index 2653485..21b25e3 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_text_google_fonts/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Google Fonts integration Short Name: ui-text-google-fonts -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-text-google-fonts/1.11.0-SNAPSHOT/ui-text-google-fonts-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-text-google-fonts/1.11.0-SNAPSHOT/ui-text-google-fonts-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium index ca1f6df..ba212ab 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_unit_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Unit Short Name: ui-unit-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-unit-android/1.11.0-SNAPSHOT/ui-unit-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-unit-android/1.11.0-SNAPSHOT/ui-unit-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium b/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium index 3087bf0..8fdce91 100644 --- a/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_compose_ui_ui_util_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Util Short Name: ui-util-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/compose/ui/ui-util-android/1.11.0-SNAPSHOT/ui-util-android-1.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/compose/ui/ui-util-android/1.11.0-SNAPSHOT/ui-util-android-1.11.0-20251125.054742-1.aar Version: 1.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium index 2c02fd0..8e92845f 100644 --- a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout/README.chromium
@@ -1,6 +1,6 @@ Name: ConstraintLayout Short Name: constraintlayout -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/constraintlayout/constraintlayout/2.3.0-SNAPSHOT/constraintlayout-2.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/constraintlayout/constraintlayout/2.3.0-SNAPSHOT/constraintlayout-2.3.0-20251125.054742-1.aar Version: 2.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium index 341761c..1c36700 100644 --- a/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium +++ b/third_party/androidx/committed/libs/androidx_constraintlayout_constraintlayout_core/README.chromium
@@ -1,6 +1,6 @@ Name: ConstraintLayout Core Short Name: constraintlayout-core -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/constraintlayout/constraintlayout-core/1.2.0-SNAPSHOT/constraintlayout-core-1.2.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/constraintlayout/constraintlayout-core/1.2.0-SNAPSHOT/constraintlayout-core-1.2.0-20251125.054742-1.jar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core/README.chromium b/third_party/androidx/committed/libs/androidx_core_core/README.chromium index 60382c7..82bcb5a 100644 --- a/third_party/androidx/committed/libs/androidx_core_core/README.chromium +++ b/third_party/androidx/committed/libs/androidx_core_core/README.chromium
@@ -1,6 +1,6 @@ Name: Core Short Name: core -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/core/core/1.18.0-SNAPSHOT/core-1.18.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/core/core/1.18.0-SNAPSHOT/core-1.18.0-20251125.054742-1.aar Version: 1.18.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium index fb1eb957..3274309 100644 --- a/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_core_core_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Core Kotlin Extensions Short Name: core-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/core/core-ktx/1.18.0-SNAPSHOT/core-ktx-1.18.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/core/core-ktx/1.18.0-SNAPSHOT/core-ktx-1.18.0-20251125.054742-1.aar Version: 1.18.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium b/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium index dc401bc..b23b926 100644 --- a/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium +++ b/third_party/androidx/committed/libs/androidx_core_core_viewtree/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.core:core-viewtree Short Name: core-viewtree -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/core/core-viewtree/1.1.0-SNAPSHOT/core-viewtree-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/core/core-viewtree/1.1.0-SNAPSHOT/core-viewtree-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium index 03eaa1e..3524d952 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_credentials/README.chromium
@@ -1,6 +1,6 @@ Name: Credentials Short Name: credentials -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/credentials/credentials/1.6.0-SNAPSHOT/credentials-1.6.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/credentials/credentials/1.6.0-SNAPSHOT/credentials-1.6.0-20251125.054742-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium index 37618586..bf5a3b8 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_credentials_play_services_auth/README.chromium
@@ -1,6 +1,6 @@ Name: Credentials Play Services Auth Short Name: credentials-play-services-auth -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/credentials/credentials-play-services-auth/1.6.0-SNAPSHOT/credentials-play-services-auth-1.6.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/credentials/credentials-play-services-auth/1.6.0-SNAPSHOT/credentials-play-services-auth-1.6.0-20251125.054742-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium index c48371b9..ea4b7e7 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.credentials.registry:registry-provider Short Name: registry-provider -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/credentials/registry/registry-provider/1.0.0-SNAPSHOT/registry-provider-1.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/credentials/registry/registry-provider/1.0.0-SNAPSHOT/registry-provider-1.0.0-20251125.054742-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium index 13953b17..985b4ad 100644 --- a/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium +++ b/third_party/androidx/committed/libs/androidx_credentials_registry_registry_provider_play_services/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.credentials.registry:registry-provider-play-services Short Name: registry-provider-play-services -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/credentials/registry/registry-provider-play-services/1.0.0-SNAPSHOT/registry-provider-play-services-1.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/credentials/registry/registry-provider-play-services/1.0.0-SNAPSHOT/registry-provider-play-services-1.0.0-20251125.054742-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium b/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium index aff86a7..034c5570 100644 --- a/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium +++ b/third_party/androidx/committed/libs/androidx_cursoradapter_cursoradapter/README.chromium
@@ -1,6 +1,6 @@ Name: Cursor Adapter Short Name: cursoradapter -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/cursoradapter/cursoradapter/1.1.0-SNAPSHOT/cursoradapter-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/cursoradapter/cursoradapter/1.1.0-SNAPSHOT/cursoradapter-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium index d16787c..a470804 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_android/README.chromium
@@ -1,6 +1,6 @@ Name: DataStore Short Name: datastore-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/datastore/datastore-android/1.3.0-SNAPSHOT/datastore-android-1.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/datastore/datastore-android/1.3.0-SNAPSHOT/datastore-android-1.3.0-20251125.054742-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium index 631e0710..b9a384a 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: DataStore Core Short Name: datastore-core-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/datastore/datastore-core-android/1.3.0-SNAPSHOT/datastore-core-android-1.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/datastore/datastore-core-android/1.3.0-SNAPSHOT/datastore-core-android-1.3.0-20251125.054742-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium index 1e0b085..227eb18 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_core_okio_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: DataStore Core Okio Short Name: datastore-core-okio-jvm -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/datastore/datastore-core-okio-jvm/1.3.0-SNAPSHOT/datastore-core-okio-jvm-1.3.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/datastore/datastore-core-okio-jvm/1.3.0-SNAPSHOT/datastore-core-okio-jvm-1.3.0-20251125.054742-1.jar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium index e78b024..2b43bcc 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_android/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences DataStore Short Name: datastore-preferences-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/datastore/datastore-preferences-android/1.3.0-SNAPSHOT/datastore-preferences-android-1.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/datastore/datastore-preferences-android/1.3.0-SNAPSHOT/datastore-preferences-android-1.3.0-20251125.054742-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium index adfaa721..cc07e6c 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences DataStore Core Short Name: datastore-preferences-core-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/datastore/datastore-preferences-core-android/1.3.0-SNAPSHOT/datastore-preferences-core-android-1.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/datastore/datastore-preferences-core-android/1.3.0-SNAPSHOT/datastore-preferences-core-android-1.3.0-20251125.054742-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium index 22fdb0f..150c5170 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_external_protobuf/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences External Protobuf Short Name: datastore-preferences-external-protobuf -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/datastore/datastore-preferences-external-protobuf/1.3.0-SNAPSHOT/datastore-preferences-external-protobuf-1.3.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/datastore/datastore-preferences-external-protobuf/1.3.0-SNAPSHOT/datastore-preferences-external-protobuf-1.3.0-20251125.054742-1.jar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: BSD-3-Clause
diff --git a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium index 33337e4..040c1128 100644 --- a/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium +++ b/third_party/androidx/committed/libs/androidx_datastore_datastore_preferences_proto/README.chromium
@@ -1,6 +1,6 @@ Name: Preferences DataStore Proto Short Name: datastore-preferences-proto -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/datastore/datastore-preferences-proto/1.3.0-SNAPSHOT/datastore-preferences-proto-1.3.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/datastore/datastore-preferences-proto/1.3.0-SNAPSHOT/datastore-preferences-proto-1.3.0-20251125.054742-1.jar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium b/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium index 9a565bc..6a3cb77 100644 --- a/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_drawerlayout_drawerlayout/README.chromium
@@ -1,6 +1,6 @@ Name: Drawer Layout Short Name: drawerlayout -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/drawerlayout/drawerlayout/1.3.0-SNAPSHOT/drawerlayout-1.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/drawerlayout/drawerlayout/1.3.0-SNAPSHOT/drawerlayout-1.3.0-20251125.054742-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium b/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium index dd31ef8..ab9f562 100644 --- a/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium +++ b/third_party/androidx/committed/libs/androidx_emoji_emoji/README.chromium
@@ -1,6 +1,6 @@ Name: Emoji Short Name: emoji -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/emoji/emoji/1.2.0-SNAPSHOT/emoji-1.2.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/emoji/emoji/1.2.0-SNAPSHOT/emoji-1.2.0-20251125.054742-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0, SIL Open Font License, Version 1.1, Unicode, Inc. License
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium index bb39657..535c7f8 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment/README.chromium
@@ -1,6 +1,6 @@ Name: fragment Short Name: fragment -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/fragment/fragment/1.9.0-SNAPSHOT/fragment-1.9.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/fragment/fragment/1.9.0-SNAPSHOT/fragment-1.9.0-20251125.054742-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium index 21ad0582..58cb2cf 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_compose/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Compose Short Name: fragment-compose -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/fragment/fragment-compose/1.9.0-SNAPSHOT/fragment-compose-1.9.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/fragment/fragment-compose/1.9.0-SNAPSHOT/fragment-compose-1.9.0-20251125.054742-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium index a406d9b4..8bc04b5 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Kotlin Extensions Short Name: fragment-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/fragment/fragment-ktx/1.9.0-SNAPSHOT/fragment-ktx-1.9.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/fragment/fragment-ktx/1.9.0-SNAPSHOT/fragment-ktx-1.9.0-20251125.054742-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium index 38e76514..73ad5b1 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Testing Extensions Short Name: fragment-testing -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/fragment/fragment-testing/1.9.0-SNAPSHOT/fragment-testing-1.9.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/fragment/fragment-testing/1.9.0-SNAPSHOT/fragment-testing-1.9.0-20251125.054742-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium index 20fd01a1..9c0c883e 100644 --- a/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium +++ b/third_party/androidx/committed/libs/androidx_fragment_fragment_testing_manifest/README.chromium
@@ -1,6 +1,6 @@ Name: Fragment Testing Manifest dependency Short Name: fragment-testing-manifest -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/fragment/fragment-testing-manifest/1.9.0-SNAPSHOT/fragment-testing-manifest-1.9.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/fragment/fragment-testing-manifest/1.9.0-SNAPSHOT/fragment-testing-manifest-1.9.0-20251125.054742-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium b/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium index 07d1ff8..8d94d91 100644 --- a/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium +++ b/third_party/androidx/committed/libs/androidx_graphics_graphics_path/README.chromium
@@ -1,6 +1,6 @@ Name: Android Graphics Path Short Name: graphics-path -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/graphics/graphics-path/1.1.0-SNAPSHOT/graphics-path-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/graphics/graphics-path/1.1.0-SNAPSHOT/graphics-path-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium b/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium index a7736ab..00ecaa5 100644 --- a/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium +++ b/third_party/androidx/committed/libs/androidx_interpolator_interpolator/README.chromium
@@ -1,6 +1,6 @@ Name: Interpolators Short Name: interpolator -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/interpolator/interpolator/1.1.0-SNAPSHOT/interpolator-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/interpolator/interpolator/1.1.0-SNAPSHOT/interpolator-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium index 0b8dfcf..e48005c3 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_java8/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle-Common for Java 8 Short Name: lifecycle-common-java8 -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-common-java8/2.11.0-SNAPSHOT/lifecycle-common-java8-2.11.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-common-java8/2.11.0-SNAPSHOT/lifecycle-common-java8-2.11.0-20251125.054742-1.jar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium index 5402a0e..f6f7929 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_common_jvm/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle-Common Short Name: lifecycle-common-jvm -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-common-jvm/2.11.0-SNAPSHOT/lifecycle-common-jvm-2.11.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-common-jvm/2.11.0-SNAPSHOT/lifecycle-common-jvm-2.11.0-20251125.054742-1.jar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium index 03088f1..3422e92 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle LiveData Short Name: lifecycle-livedata -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-livedata/2.11.0-SNAPSHOT/lifecycle-livedata-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-livedata/2.11.0-SNAPSHOT/lifecycle-livedata-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium index dbd4a255..653d3cc 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle LiveData Core Short Name: lifecycle-livedata-core -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core/2.11.0-SNAPSHOT/lifecycle-livedata-core-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core/2.11.0-SNAPSHOT/lifecycle-livedata-core-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium index c6219dd4..4509dc0 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_core_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: LiveData Core Kotlin Extensions Short Name: lifecycle-livedata-core-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-core-ktx-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-livedata-core-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-core-ktx-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium index 633da4e6..a2aa898 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_livedata_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: LiveData Kotlin Extensions Short Name: lifecycle-livedata-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-livedata-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-ktx-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-livedata-ktx/2.11.0-SNAPSHOT/lifecycle-livedata-ktx-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium index 9542460..649277e 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_process/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Process Short Name: lifecycle-process -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-process/2.11.0-SNAPSHOT/lifecycle-process-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-process/2.11.0-SNAPSHOT/lifecycle-process-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium index 9369d85..c2aa705 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Runtime Short Name: lifecycle-runtime-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-runtime-android/2.11.0-SNAPSHOT/lifecycle-runtime-android-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-runtime-android/2.11.0-SNAPSHOT/lifecycle-runtime-android-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium index 667b316..b0b1cb07 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Runtime Compose Short Name: lifecycle-runtime-compose-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-runtime-compose-android/2.11.0-SNAPSHOT/lifecycle-runtime-compose-android-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-runtime-compose-android/2.11.0-SNAPSHOT/lifecycle-runtime-compose-android-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium index 7e5ac66a..b3b3616e9 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_runtime_ktx_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Kotlin Extensions Short Name: lifecycle-runtime-ktx-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-runtime-ktx-android/2.11.0-SNAPSHOT/lifecycle-runtime-ktx-android-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-runtime-ktx-android/2.11.0-SNAPSHOT/lifecycle-runtime-ktx-android-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium index ed6a11a9..1fc1cb0 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_service/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle Service Short Name: lifecycle-service -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-service/2.11.0-SNAPSHOT/lifecycle-service-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-service/2.11.0-SNAPSHOT/lifecycle-service-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium index cb3b753..b6e9529 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel Short Name: lifecycle-viewmodel-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-android-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-android-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium index cd024be..ac19cf8 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel Compose Short Name: lifecycle-viewmodel-compose-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-compose-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-compose-android-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-compose-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-compose-android-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium index 6b271686..1de06b14 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel Kotlin Extensions Short Name: lifecycle-viewmodel-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-ktx/2.11.0-SNAPSHOT/lifecycle-viewmodel-ktx-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-ktx/2.11.0-SNAPSHOT/lifecycle-viewmodel-ktx-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium index d1599b0..b7fc3ef 100644 --- a/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_lifecycle_lifecycle_viewmodel_savedstate_android/README.chromium
@@ -1,6 +1,6 @@ Name: Lifecycle ViewModel with SavedState Short Name: lifecycle-viewmodel-savedstate-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-savedstate-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-savedstate-android-2.11.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/lifecycle/lifecycle-viewmodel-savedstate-android/2.11.0-SNAPSHOT/lifecycle-viewmodel-savedstate-android-2.11.0-20251125.054742-1.aar Version: 2.11.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium b/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium index da0fec45..d181a69 100644 --- a/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium +++ b/third_party/androidx/committed/libs/androidx_loader_loader/README.chromium
@@ -1,6 +1,6 @@ Name: loader Short Name: loader -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/loader/loader/1.2.0-SNAPSHOT/loader-1.2.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/loader/loader/1.2.0-SNAPSHOT/loader-1.2.0-20251125.054742-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_media_media/README.chromium b/third_party/androidx/committed/libs/androidx_media_media/README.chromium index e30ea60..f79e42d 100644 --- a/third_party/androidx/committed/libs/androidx_media_media/README.chromium +++ b/third_party/androidx/committed/libs/androidx_media_media/README.chromium
@@ -1,6 +1,6 @@ Name: Media Short Name: media -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/media/media/1.8.0-SNAPSHOT/media-1.8.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/media/media/1.8.0-SNAPSHOT/media-1.8.0-20251125.054742-1.aar Version: 1.8.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium b/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium index 1ef47f3..5981d3a 100644 --- a/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium +++ b/third_party/androidx/committed/libs/androidx_mediarouter_mediarouter/README.chromium
@@ -1,6 +1,6 @@ Name: MediaRouter Short Name: mediarouter -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/mediarouter/mediarouter/1.9.0-SNAPSHOT/mediarouter-1.9.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/mediarouter/mediarouter/1.9.0-SNAPSHOT/mediarouter-1.9.0-20251125.054742-1.aar Version: 1.9.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium index 2bd87c4..ee08afa1 100644 --- a/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_common_android/README.chromium
@@ -1,6 +1,6 @@ Name: Navigation Common Short Name: navigation-common-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/navigation/navigation-common-android/2.10.0-SNAPSHOT/navigation-common-android-2.10.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/navigation/navigation-common-android/2.10.0-SNAPSHOT/navigation-common-android-2.10.0-20251125.054742-1.aar Version: 2.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium index b5cc7ef0..557c17f 100644 --- a/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Compose Navigation Short Name: navigation-compose-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/navigation/navigation-compose-android/2.10.0-SNAPSHOT/navigation-compose-android-2.10.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/navigation/navigation-compose-android/2.10.0-SNAPSHOT/navigation-compose-android-2.10.0-20251125.054742-1.aar Version: 2.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium index d6ebca6..e15105e 100644 --- a/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigation_navigation_runtime_android/README.chromium
@@ -1,6 +1,6 @@ Name: Navigation Runtime Short Name: navigation-runtime-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/navigation/navigation-runtime-android/2.10.0-SNAPSHOT/navigation-runtime-android-2.10.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/navigation/navigation-runtime-android/2.10.0-SNAPSHOT/navigation-runtime-android-2.10.0-20251125.054742-1.aar Version: 2.10.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium index 51ca913..47a18ea 100644 --- a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_android/README.chromium
@@ -1,6 +1,6 @@ Name: Navigation Event Short Name: navigationevent-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/navigationevent/navigationevent-android/1.1.0-SNAPSHOT/navigationevent-android-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/navigationevent/navigationevent-android/1.1.0-SNAPSHOT/navigationevent-android-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium index 67cfe5b1..9710ae2 100644 --- a/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_navigationevent_navigationevent_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: NavigationEvent Compose Short Name: navigationevent-compose-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/navigationevent/navigationevent-compose-android/1.1.0-SNAPSHOT/navigationevent-compose-android-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/navigationevent/navigationevent-compose-android/1.1.0-SNAPSHOT/navigationevent-compose-android-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium index 1b410b2..2e1d251 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_common_android/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Common Short Name: paging-common-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/paging/paging-common-android/3.4.0-SNAPSHOT/paging-common-android-3.4.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/paging/paging-common-android/3.4.0-SNAPSHOT/paging-common-android-3.4.0-20251125.054742-1.aar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium index b4ca456b..3167b06 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_common_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Common Kotlin Extensions Short Name: paging-common-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/paging/paging-common-ktx/3.4.0-SNAPSHOT/paging-common-ktx-3.4.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/paging/paging-common-ktx/3.4.0-SNAPSHOT/paging-common-ktx-3.4.0-20251125.054742-1.jar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium index 4c29bdcb..20dd59f 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Compose Short Name: paging-compose-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/paging/paging-compose-android/3.4.0-SNAPSHOT/paging-compose-android-3.4.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/paging/paging-compose-android/3.4.0-SNAPSHOT/paging-compose-android-3.4.0-20251125.054742-1.aar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium index a8595f64..9c09aeb 100644 --- a/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium +++ b/third_party/androidx/committed/libs/androidx_paging_paging_runtime/README.chromium
@@ -1,6 +1,6 @@ Name: Paging-Runtime Short Name: paging-runtime -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/paging/paging-runtime/3.4.0-SNAPSHOT/paging-runtime-3.4.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/paging/paging-runtime/3.4.0-SNAPSHOT/paging-runtime-3.4.0-20251125.054742-1.aar Version: 3.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium b/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium index 64cba48..5bcba46 100644 --- a/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium +++ b/third_party/androidx/committed/libs/androidx_palette_palette/README.chromium
@@ -1,6 +1,6 @@ Name: Palette Short Name: palette -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/palette/palette/1.1.0-SNAPSHOT/palette-1.1.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/palette/palette/1.1.0-SNAPSHOT/palette-1.1.0-20251125.054742-1.aar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium index 874f5a7..320171dd 100644 --- a/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium +++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_document_service/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.pdf:pdf-document-service Short Name: pdf-document-service -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/pdf/pdf-document-service/1.0.0-SNAPSHOT/pdf-document-service-1.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/pdf/pdf-document-service/1.0.0-SNAPSHOT/pdf-document-service-1.0.0-20251125.054742-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium index 71c57df..3cd0f77 100644 --- a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium +++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.pdf:pdf-viewer Short Name: pdf-viewer -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/pdf/pdf-viewer/1.0.0-SNAPSHOT/pdf-viewer-1.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/pdf/pdf-viewer/1.0.0-SNAPSHOT/pdf-viewer-1.0.0-20251125.054742-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium index 0e97f54..8d93ee1 100644 --- a/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium +++ b/third_party/androidx/committed/libs/androidx_pdf_pdf_viewer_fragment/README.chromium
@@ -1,6 +1,6 @@ Name: androidx.pdf:pdf-viewer-fragment Short Name: pdf-viewer-fragment -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/pdf/pdf-viewer-fragment/1.0.0-SNAPSHOT/pdf-viewer-fragment-1.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/pdf/pdf-viewer-fragment/1.0.0-SNAPSHOT/pdf-viewer-fragment-1.0.0-20251125.054742-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium b/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium index bec1de8..5d69551f 100644 --- a/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium +++ b/third_party/androidx/committed/libs/androidx_preference_preference/README.chromium
@@ -1,6 +1,6 @@ Name: Preference Short Name: preference -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/preference/preference/1.3.0-SNAPSHOT/preference-1.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/preference/preference/1.3.0-SNAPSHOT/preference-1.3.0-20251125.054742-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium b/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium index d085e7e5..665b6848 100644 --- a/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium +++ b/third_party/androidx/committed/libs/androidx_profileinstaller_profileinstaller/README.chromium
@@ -1,6 +1,6 @@ Name: Profile Installer Short Name: profileinstaller -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/profileinstaller/profileinstaller/1.5.0-SNAPSHOT/profileinstaller-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/profileinstaller/profileinstaller/1.5.0-SNAPSHOT/profileinstaller-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium b/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium index 875bdf1..ee0f47b 100644 --- a/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium +++ b/third_party/androidx/committed/libs/androidx_recyclerview_recyclerview/README.chromium
@@ -1,6 +1,6 @@ Name: RecyclerView Short Name: recyclerview -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/recyclerview/recyclerview/1.5.0-SNAPSHOT/recyclerview-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/recyclerview/recyclerview/1.5.0-SNAPSHOT/recyclerview-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium b/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium index 93f8d4da..d92e391 100644 --- a/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium +++ b/third_party/androidx/committed/libs/androidx_resourceinspection_resourceinspection_annotation/README.chromium
@@ -1,6 +1,6 @@ Name: Resource Inspection - Annotations Short Name: resourceinspection-annotation -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/resourceinspection/resourceinspection-annotation/1.1.0-SNAPSHOT/resourceinspection-annotation-1.1.0-20251124.203132-1.jar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/resourceinspection/resourceinspection-annotation/1.1.0-SNAPSHOT/resourceinspection-annotation-1.1.0-20251125.054742-1.jar Version: 1.1.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium index c04b1ae..383e7699 100644 --- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_android/README.chromium
@@ -1,6 +1,6 @@ Name: Saved State Short Name: savedstate-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/savedstate/savedstate-android/1.5.0-SNAPSHOT/savedstate-android-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/savedstate/savedstate-android/1.5.0-SNAPSHOT/savedstate-android-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium index ac19c1d..2cc7e2b 100644 --- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_compose_android/README.chromium
@@ -1,6 +1,6 @@ Name: Saved State Compose Short Name: savedstate-compose-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/savedstate/savedstate-compose-android/1.5.0-SNAPSHOT/savedstate-compose-android-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/savedstate/savedstate-compose-android/1.5.0-SNAPSHOT/savedstate-compose-android-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium index 445be175..026fd683 100644 --- a/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_savedstate_savedstate_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: SavedState Kotlin Extensions Short Name: savedstate-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/savedstate/savedstate-ktx/1.5.0-SNAPSHOT/savedstate-ktx-1.5.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/savedstate/savedstate-ktx/1.5.0-SNAPSHOT/savedstate-ktx-1.5.0-20251125.054742-1.aar Version: 1.5.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium b/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium index 206f62f..828c363 100644 --- a/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_slidingpanelayout_slidingpanelayout/README.chromium
@@ -1,6 +1,6 @@ Name: Sliding Pane Layout Short Name: slidingpanelayout -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/slidingpanelayout/slidingpanelayout/1.3.0-SNAPSHOT/slidingpanelayout-1.3.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/slidingpanelayout/slidingpanelayout/1.3.0-SNAPSHOT/slidingpanelayout-1.3.0-20251125.054742-1.aar Version: 1.3.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium b/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium index f1a4ca2..5837f25 100644 --- a/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium +++ b/third_party/androidx/committed/libs/androidx_swiperefreshlayout_swiperefreshlayout/README.chromium
@@ -1,6 +1,6 @@ Name: Swipe Refresh Layout Short Name: swiperefreshlayout -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/swiperefreshlayout/swiperefreshlayout/1.2.0-SNAPSHOT/swiperefreshlayout-1.2.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/swiperefreshlayout/swiperefreshlayout/1.2.0-SNAPSHOT/swiperefreshlayout-1.2.0-20251125.054742-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium b/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium index 27bae0f7..7988056 100644 --- a/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium +++ b/third_party/androidx/committed/libs/androidx_test_uiautomator_uiautomator/README.chromium
@@ -1,6 +1,6 @@ Name: UIAutomator Short Name: uiautomator -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/test/uiautomator/uiautomator/2.4.0-SNAPSHOT/uiautomator-2.4.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/test/uiautomator/uiautomator/2.4.0-SNAPSHOT/uiautomator-2.4.0-20251125.054742-1.aar Version: 2.4.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium index 5e2e5d1..fdd1196 100644 --- a/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_android/README.chromium
@@ -1,6 +1,6 @@ Name: Tracing Short Name: tracing-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/tracing/tracing-android/2.0.0-SNAPSHOT/tracing-android-2.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/tracing/tracing-android/2.0.0-SNAPSHOT/tracing-android-2.0.0-20251125.054742-1.aar Version: 2.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium b/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium index 4e576324..700623f 100644 --- a/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium +++ b/third_party/androidx/committed/libs/androidx_tracing_tracing_ktx/README.chromium
@@ -1,6 +1,6 @@ Name: Tracing Kotlin Extensions Short Name: tracing-ktx -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/tracing/tracing-ktx/2.0.0-SNAPSHOT/tracing-ktx-2.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/tracing/tracing-ktx/2.0.0-SNAPSHOT/tracing-ktx-2.0.0-20251125.054742-1.aar Version: 2.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium b/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium index 177318e..315fb9a 100644 --- a/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium +++ b/third_party/androidx/committed/libs/androidx_transition_transition/README.chromium
@@ -1,6 +1,6 @@ Name: Transition Short Name: transition -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/transition/transition/1.7.0-SNAPSHOT/transition-1.7.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/transition/transition/1.7.0-SNAPSHOT/transition-1.7.0-20251125.054742-1.aar Version: 1.7.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium b/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium index 2efbdf3..09951f0 100644 --- a/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium +++ b/third_party/androidx/committed/libs/androidx_viewpager2_viewpager2/README.chromium
@@ -1,6 +1,6 @@ Name: ViewPager2 Short Name: viewpager2 -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/viewpager2/viewpager2/1.2.0-SNAPSHOT/viewpager2-1.2.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/viewpager2/viewpager2/1.2.0-SNAPSHOT/viewpager2-1.2.0-20251125.054742-1.aar Version: 1.2.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium b/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium index c5a1916..ff8afe6 100644 --- a/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium +++ b/third_party/androidx/committed/libs/androidx_webkit_webkit/README.chromium
@@ -1,6 +1,6 @@ Name: Webkit Short Name: webkit -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/webkit/webkit/1.16.0-SNAPSHOT/webkit-1.16.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/webkit/webkit/1.16.0-SNAPSHOT/webkit-1.16.0-20251125.054742-1.aar Version: 1.16.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium b/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium index 269e78d..82a36d7 100644 --- a/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium +++ b/third_party/androidx/committed/libs/androidx_window_sidecar_sidecar/README.chromium
@@ -1,6 +1,6 @@ Name: WindowManager Sidecar Short Name: sidecar -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/window/sidecar/sidecar/1.0.0-SNAPSHOT/sidecar-1.0.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/window/sidecar/sidecar/1.0.0-SNAPSHOT/sidecar-1.0.0-20251125.054742-1.aar Version: 1.0.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_window/README.chromium b/third_party/androidx/committed/libs/androidx_window_window/README.chromium index 22fbf3f6..19ac1055 100644 --- a/third_party/androidx/committed/libs/androidx_window_window/README.chromium +++ b/third_party/androidx/committed/libs/androidx_window_window/README.chromium
@@ -1,6 +1,6 @@ Name: WindowManager Short Name: window -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/window/window/1.6.0-SNAPSHOT/window-1.6.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/window/window/1.6.0-SNAPSHOT/window-1.6.0-20251125.054742-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium b/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium index 99ee3dbb..9a0453c 100644 --- a/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium +++ b/third_party/androidx/committed/libs/androidx_window_window_core_android/README.chromium
@@ -1,6 +1,6 @@ Name: WindowManager Core Short Name: window-core-android -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/window/window-core-android/1.6.0-SNAPSHOT/window-core-android-1.6.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/window/window-core-android/1.6.0-SNAPSHOT/window-core-android-1.6.0-20251125.054742-1.aar Version: 1.6.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium b/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium index 1e2c290..611c9e0 100644 --- a/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium +++ b/third_party/androidx/committed/libs/androidx_work_work_multiprocess/README.chromium
@@ -1,6 +1,6 @@ Name: WorkManager Multiprocess Short Name: work-multiprocess -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/work/work-multiprocess/2.12.0-SNAPSHOT/work-multiprocess-2.12.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/work/work-multiprocess/2.12.0-SNAPSHOT/work-multiprocess-2.12.0-20251125.054742-1.aar Version: 2.12.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium b/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium index 104ec23b..9d262ec 100644 --- a/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium +++ b/third_party/androidx/committed/libs/androidx_work_work_runtime/README.chromium
@@ -1,6 +1,6 @@ Name: WorkManager Runtime Short Name: work-runtime -URL: https://androidx.dev/snapshots/builds/14488735/artifacts/repository/androidx/work/work-runtime/2.12.0-SNAPSHOT/work-runtime-2.12.0-20251124.203132-1.aar +URL: https://androidx.dev/snapshots/builds/14491334/artifacts/repository/androidx/work/work-runtime/2.12.0-SNAPSHOT/work-runtime-2.12.0-20251125.054742-1.aar Version: 2.12.0-SNAPSHOT Update Mechanism: Autoroll License: Apache-2.0
diff --git a/third_party/angle b/third_party/angle index 2abaa52..feb258f 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 2abaa52fd032f42f22e7571649a1b81f658ee33c +Subproject commit feb258f3e2a9c9a2308e40a9cbcfaf48bdd5713a
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom index 2a85a4e..917306a 100644 --- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom +++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -5043,7 +5043,7 @@ kV8Origin_FromURL_Method = 5727, kV8Origin_Parse_Method = 5728, kExtendedTextMetrics = 5729, - + kUseCssSizingProperties = 5730, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots. Also don't add extra // spaces or comments in this file. Comments belong next to the usage of
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn index d7df5b0d..613943b 100644 --- a/third_party/blink/renderer/core/BUILD.gn +++ b/third_party/blink/renderer/core/BUILD.gn
@@ -507,6 +507,7 @@ deps = [ ":buildflags", + ":xml_ffi", "//services/metrics/public/cpp:ukm_builders", "//third_party/blink/public:image_resources_grit", "//third_party/blink/public/strings",
diff --git a/third_party/blink/renderer/core/css/container_query_evaluator.cc b/third_party/blink/renderer/core/css/container_query_evaluator.cc index 4f630c0..6d14779e 100644 --- a/third_party/blink/renderer/core/css/container_query_evaluator.cc +++ b/third_party/blink/renderer/core/css/container_query_evaluator.cc
@@ -974,7 +974,7 @@ // the container values and invalidate style for any changed queries. bool invalidate_for_font = (unit_flags_ & MediaQueryExpValue::kFontRelative) && - old_style.GetFont() != new_style.GetFont(); + !base::ValuesEquivalent(old_style.GetFont(), new_style.GetFont()); // Writing direction changes may affect how logical queries match for size and // scroll-state() queries even when the physical size or scroll-state do not
diff --git a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc index d1188a51..b624320 100644 --- a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc +++ b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc
@@ -4813,12 +4813,18 @@ return CSSIdentifierValue::Create(CSSValueID::kNone); } + const std::optional<Length>& length = intrinsic_length.GetLength(); if (intrinsic_length.MatchesElement()) { DCHECK(RuntimeEnabledFeatures::ResponsiveIframesEnabled()); - return CSSIdentifierValue::Create(CSSValueID::kFromElement); + if (!length) { + return CSSIdentifierValue::Create(CSSValueID::kFromElement); + } + CSSValueList* list = CSSValueList::CreateSpaceSeparated(); + list->Append(*CSSIdentifierValue::Create(CSSValueID::kFromElement)); + list->Append(*ZoomAdjustedPixelValueForLength(*length, style)); + return list; } - const std::optional<Length>& length = intrinsic_length.GetLength(); CSSValue* length_value = length ? ZoomAdjustedPixelValueForLength(*length, style) : CSSIdentifierValue::Create(CSSValueID::kNone);
diff --git a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc index c7066acc..7deee045 100644 --- a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc +++ b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
@@ -3236,10 +3236,20 @@ CSSValue* ConsumeIntrinsicSizeLonghand(CSSParserTokenStream& stream, const CSSParserContext& context) { - if (RuntimeEnabledFeatures::ResponsiveIframesEnabled() && - css_parsing_utils::IdentMatches<CSSValueID::kFromElement>( - stream.Peek().Id())) { - return css_parsing_utils::ConsumeIdent(stream); + if (RuntimeEnabledFeatures::ResponsiveIframesEnabled()) { + if (CSSValue* from_element = + css_parsing_utils::ConsumeIdent<CSSValueID::kFromElement>(stream)) { + // `from-element <length [0,∞]>?` + CSSValue* length = css_parsing_utils::ConsumeLength( + stream, context, CSSPrimitiveValue::ValueRange::kNonNegative); + if (!length) { + return from_element; + } + CSSValueList* list = CSSValueList::CreateSpaceSeparated(); + list->Append(*from_element); + list->Append(*length); + return list; + } } // `auto? [ none | <length [0,∞]> ]`
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc index 071ceb3..39bcc7a5 100644 --- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc +++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
@@ -3670,7 +3670,7 @@ const StyleResolverState& state, const CSSValue& value) { // The valid grammar for this value is the following: - // `auto? [ none | <length [0,∞]> ] | from-element`. + // `auto? [ none | <length [0,∞]> ] | from-element <length [0,∞]>?`. if (const auto* identifier_value = DynamicTo<CSSIdentifierValue>(value)) { if (identifier_value->GetValueID() == CSSValueID::kNone) { @@ -3694,17 +3694,27 @@ DCHECK(list); DCHECK_EQ(list->length(), 2u); DCHECK(IsA<CSSIdentifierValue>(list->Item(0))); - DCHECK(To<CSSIdentifierValue>(list->Item(0)).GetValueID() == - CSSValueID::kAuto); - // Handle "auto <length>" + // Handle `auto <length> | from-element <length>` if (auto* primitive_value = DynamicTo<CSSPrimitiveValue>(list->Item(1))) { + if (RuntimeEnabledFeatures::ResponsiveIframesEnabled()) { + const auto& identifier = To<CSSIdentifierValue>(list->Item(0)); + if (identifier.GetValueID() == CSSValueID::kFromElement) { + return StyleIntrinsicLength( + /*has_auto=*/false, /*matches_element=*/true, + ConvertLength(state, *primitive_value)); + } + } + DCHECK(To<CSSIdentifierValue>(list->Item(0)).GetValueID() == + CSSValueID::kAuto); return StyleIntrinsicLength( /*has_auto=*/true, /*matches_element=*/false, ConvertLength(state, *primitive_value)); } // The only grammar left is "auto none". + DCHECK(To<CSSIdentifierValue>(list->Item(0)).GetValueID() == + CSSValueID::kAuto); DCHECK(IsA<CSSIdentifierValue>(list->Item(1))); DCHECK(To<CSSIdentifierValue>(list->Item(1)).GetValueID() == CSSValueID::kNone);
diff --git a/third_party/blink/renderer/core/layout/inline/inline_box_state.cc b/third_party/blink/renderer/core/layout/inline/inline_box_state.cc index 122b8d4..e49850e 100644 --- a/third_party/blink/renderer/core/layout/inline/inline_box_state.cc +++ b/third_party/blink/renderer/core/layout/inline/inline_box_state.cc
@@ -273,7 +273,8 @@ if (text_style.VerticalAlign() != EVerticalAlign::kBaseline) return false; DCHECK(style); - if (style == &text_style || style->GetFont() == text_style.GetFont() || + if (style == &text_style || + base::ValuesEquivalent(style->GetFont(), text_style.GetFont()) || style->GetFont()->PrimaryFont() == text_style.GetFont()->PrimaryFont()) { return true; }
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc index ecd5e52..aee7f0a 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc
@@ -262,14 +262,16 @@ // If the writing mode changed from a horizontal mode to a vertical // mode, or vice versa, then our intrinsic dimensions will have // changed. - if (old_style.IsHorizontalWritingMode() != style.IsHorizontalWritingMode()) + if (old_style.IsHorizontalWritingMode() != style.IsHorizontalWritingMode()) { return true; + } // If our intrinsic dimensions depend on font metrics (by using 'em', 'ex' or // any other font-relative unit), any changes to the font may change said // dimensions. if (IntrinsicSizeIsFontMetricsDependent() && - old_style.GetFont() != style.GetFont()) + !base::ValuesEquivalent(old_style.GetFont(), style.GetFont())) { return true; + } return false; }
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container.cc index 76beae3..c57d56c 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container.cc
@@ -72,10 +72,17 @@ const SVGViewportResolver viewport_resolver(*this); const ComputedStyle& style = StyleRef(); + const ComputedStyle& parent_style = Parent()->StyleRef(); float resolved_width_from_style = ResolveViewportDimension( style.Width(), viewport_resolver, style, SVGLengthMode::kWidth); float resolved_height_from_style = ResolveViewportDimension( style.Height(), viewport_resolver, style, SVGLengthMode::kHeight); + float resolved_width_from_parent_style = + ValueForLength(parent_style.Width(), viewport_resolver, parent_style, + SVGLengthMode::kWidth); + float resolved_height_from_parent_style = + ValueForLength(parent_style.Height(), viewport_resolver, parent_style, + SVGLengthMode::kHeight); if (RuntimeEnabledFeatures:: WidthAndHeightAsPresentationAttributesOnNestedSvgEnabled()) { @@ -85,18 +92,13 @@ if (RuntimeEnabledFeatures:: WidthAndHeightStylePropertiesOnUseAndSymbolEnabled() && svg->InUseShadowTree() && IsAtShadowBoundary(svg)) { - const ComputedStyle& parent_style = Parent()->StyleRef(); if (!parent_style.Width().IsAuto()) { - resolved_width = - ValueForLength(parent_style.Width(), viewport_resolver, - parent_style, SVGLengthMode::kWidth); + resolved_width = resolved_width_from_parent_style; } if (!parent_style.Height().IsAuto()) { - resolved_height = - ValueForLength(parent_style.Height(), viewport_resolver, - parent_style, SVGLengthMode::kHeight); + resolved_height = resolved_height_from_parent_style; } } @@ -111,6 +113,15 @@ WebFeature::kNestedSvgCssSizingProperties); } + if (svg->InUseShadowTree() && IsAtShadowBoundary(svg)) { + if ((resolved_height_from_parent_style != resolved_height && + !parent_style.Height().IsAuto()) || + (resolved_width_from_parent_style != resolved_width && + !parent_style.Width().IsAuto())) { + UseCounter::Count(GetDocument(), WebFeature::kUseCssSizingProperties); + } + } + viewport_.SetRect(resolved_x, resolved_y, resolved_width, resolved_height); if (old_viewport != viewport_) {
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container_test.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container_test.cc index cf44a50..ae3346b 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container_test.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_viewport_container_test.cc
@@ -155,4 +155,73 @@ WebFeature::kGetBBoxForNestedSVGElementWithZeroWidthOrHeight)); } +TEST_F(LayoutSVGViewportContainerTest, + UseCssSizingPropertiesUseCounterTriggered) { + // Test when the feature is DISABLED and the use counter triggers when use + // properties overrides + ScopedWidthAndHeightStylePropertiesOnUseAndSymbolForTest scoped_feature( + false); + + EXPECT_FALSE(GetDocument().IsUseCounted(WebFeature::kUseCssSizingProperties)); + + SetBodyInnerHTML(R"HTML( + <svg> + <defs> + <symbol id="s" width="500px" height="500px"> + <rect width="200px" height="200px"/> + </symbol> + </defs> + <use href="#s" style="width:100px;height:100px;"></use> + </svg> + )HTML"); + + EXPECT_TRUE(GetDocument().IsUseCounted(WebFeature::kUseCssSizingProperties)); +} + +TEST_F(LayoutSVGViewportContainerTest, + UseCssSizingPropertiesSameValuesAsSymbolUseCounterNotTriggered) { + // Test when the feature is DISABLED and the use counter does not trigger when + // width/height is same + ScopedWidthAndHeightStylePropertiesOnUseAndSymbolForTest scoped_feature( + false); + + EXPECT_FALSE(GetDocument().IsUseCounted(WebFeature::kUseCssSizingProperties)); + + SetBodyInnerHTML(R"HTML( + <svg> + <defs> + <symbol id="s" width="100px" height="100px"> + <rect width="200px" height="200px"/> + </symbol> + </defs> + <use href="#s" style="width:100px;height:100px;"></use> + </svg> + )HTML"); + + EXPECT_FALSE(GetDocument().IsUseCounted(WebFeature::kUseCssSizingProperties)); +} + +TEST_F(LayoutSVGViewportContainerTest, + UseCssSizingPropertiesUseCounterNotTriggered) { + // Test when the feature is DISABLED but the use counter does not trigger when + // no width/height specified on use + ScopedWidthAndHeightStylePropertiesOnUseAndSymbolForTest scoped_feature( + false); + + EXPECT_FALSE(GetDocument().IsUseCounted(WebFeature::kUseCssSizingProperties)); + + SetBodyInnerHTML(R"HTML( + <svg> + <defs> + <symbol id="s" width="500px" height="500px"> + <rect width="200px" height="200px"/> + </symbol> + </defs> + <use href="#s"></use> + </svg> + )HTML"); + + EXPECT_FALSE(GetDocument().IsUseCounted(WebFeature::kUseCssSizingProperties)); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/script/import_map.cc b/third_party/blink/renderer/core/script/import_map.cc index 50c52aa..a443ae4 100644 --- a/third_party/blink/renderer/core/script/import_map.cc +++ b/third_party/blink/renderer/core/script/import_map.cc
@@ -714,13 +714,17 @@ // the algorithm's mutations directly on them. That's fine because the move // guarantees that no one will use this map for anything else. ImportMap::ScopesMap& new_import_map_scopes = new_import_map->scopes_map_; + ImportMap::ScopesVector& new_import_map_scopes_vector = + new_import_map->scopes_vector_; ImportMap::SpecifierMap& new_import_map_imports = new_import_map->imports_; ImportMap::IntegrityMap& new_import_map_integrity = new_import_map->integrity_; // 3. For each scopePrefix → scopeImports of newImportMapScopes: - for (auto& scope : new_import_map_scopes) { - ImportMap::SpecifierMap& scope_imports = scope.value; + for (auto& scope : new_import_map_scopes_vector) { + ImportMap::ScopesMap::iterator it = new_import_map_scopes.find(scope); + CHECK(it != new_import_map_scopes.end()); + ImportMap::SpecifierMap& scope_imports = it->value; // 3.1. For each pair of global's resolved module set: // // 3.1.1. If pair's referring script does not start with scopePrefix, @@ -737,7 +741,7 @@ // already exist in that scope. We grab the set of specifier prefixes using // the current scope and then iterate over the scope's imports, removing any // specifiers whose prefix is in the set. - const auto& current_set_it = scoped_resolved_module_map.find(scope.key); + const auto& current_set_it = scoped_resolved_module_map.find(scope); if (current_set_it != scoped_resolved_module_map.end()) { const auto& current_resolved_set = current_set_it->value; Vector<AtomicString> specifiers_to_remove; @@ -766,7 +770,7 @@ // oldImportMap's scopes[scopePrefix] to the result of merging module // specifier maps, given scopeImports and oldImportMap's // scopes[scopePrefix]. - const auto old_scope_specifier_map_it = scopes_map_.find(scope.key); + const auto old_scope_specifier_map_it = scopes_map_.find(scope); if (old_scope_specifier_map_it != scopes_map_.end()) { ImportMap::SpecifierMap& old_scope_specifier_map = old_scope_specifier_map_it->value; @@ -774,8 +778,8 @@ } else { // 3.3 Otherwise, set oldImportMap's scopes[scopePrefix] to // scopeImports. - scopes_map_.insert(scope.key, std::move(scope_imports)); - scopes_vector_.push_back(scope.key); + scopes_map_.insert(scope, std::move(scope_imports)); + scopes_vector_.push_back(scope); } }
diff --git a/third_party/blink/renderer/core/svg/svg_use_element.cc b/third_party/blink/renderer/core/svg/svg_use_element.cc index 8063461..72346bd 100644 --- a/third_party/blink/renderer/core/svg/svg_use_element.cc +++ b/third_party/blink/renderer/core/svg/svg_use_element.cc
@@ -260,7 +260,7 @@ attr_name == svg_names::kHeightAttr) { if (attr_name == svg_names::kXAttr || attr_name == svg_names::kYAttr || RuntimeEnabledFeatures:: - WidthAndHeightStylePropertiesOnUseAndSymbolEnabled()) { + CollectWidthAndHeightAsPresentationAttributesForUseEnabled()) { UpdatePresentationAttributeStyle(params.property); }
diff --git a/third_party/blink/renderer/modules/DEPS b/third_party/blink/renderer/modules/DEPS index 7e59990..fb1f7e8c 100644 --- a/third_party/blink/renderer/modules/DEPS +++ b/third_party/blink/renderer/modules/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+base/atomic_sequence_num.h", "+base/memory/scoped_refptr.h", + "+base/memory/values_equivalent.h", "+base/containers/heap_array.h", "+base/containers/span.h", "+mojo/public/cpp/base",
diff --git a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc index d6b9a85..19c64a7 100644 --- a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc +++ b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc
@@ -89,7 +89,6 @@ #include "third_party/blink/renderer/platform/weborigin/security_origin.h" #include "third_party/blink/renderer/platform/wtf/text/base64.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" -#include "third_party/blink/renderer/platform/wtf/text/string_operators.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/boringssl/src/include/openssl/curve25519.h"
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc index 0be29cc..697c2c1 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.cc
@@ -35,7 +35,6 @@ #include "third_party/blink/renderer/platform/graphics/color.h" #include "third_party/blink/renderer/platform/graphics/gradient.h" #include "third_party/blink/renderer/platform/heap/visitor.h" -#include "third_party/blink/renderer/platform/wtf/text/string_operators.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "ui/gfx/geometry/point_f.h" @@ -139,18 +138,19 @@ const String& color_string, ExceptionState& exception_state) { if (!(value >= 0 && value <= 1.0)) { - exception_state.ThrowDOMException(DOMExceptionCode::kIndexSizeError, - "The provided value (" + - String::Number(value) + - ") is outside the range (0.0, 1.0)."); + exception_state.ThrowDOMException( + DOMExceptionCode::kIndexSizeError, + StrCat({"The provided value (", String::Number(value), + ") is outside the range (0.0, 1.0)."})); return; } Color color = Color::kTransparent; if (!ParseCanvasColorString(color_string, color)) { - exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError, - "The value provided ('" + color_string + - "') could not be parsed as a color."); + exception_state.ThrowDOMException( + DOMExceptionCode::kSyntaxError, + StrCat({"The value provided ('", color_string, + "') could not be parsed as a color."})); return; }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc index 724f2a7..73e25df 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
@@ -60,7 +60,6 @@ #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/transforms/affine_transform.h" #include "third_party/blink/renderer/platform/wtf/math_extras.h" -#include "third_party/blink/renderer/platform/wtf/text/string_operators.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/vector.h" #include "ui/gfx/geometry/rect_f.h" @@ -68,6 +67,14 @@ namespace blink { +namespace { + +String StrFloatCat(StringView leading, float value, StringView trailing) { + return StrCat({leading, String::Number(value), trailing}); +} + +} // namespace + void CanvasPath::closePath() { if (IsEmpty()) [[unlikely]] { return; @@ -227,7 +234,7 @@ if (r < 0) [[unlikely]] { exception_state.ThrowDOMException( DOMExceptionCode::kIndexSizeError, - "The radius provided (" + String::Number(r) + ") is negative."); + StrFloatCat("The radius provided (", r, ") is negative.")); return; } UpdatePathFromLineOrArcIfNecessaryForMutation(); @@ -438,7 +445,7 @@ if (radius < 0) [[unlikely]] { exception_state.ThrowDOMException( DOMExceptionCode::kIndexSizeError, - "The radius provided (" + String::Number(radius) + ") is negative."); + StrFloatCat("The radius provided (", radius, ") is negative.")); return; } @@ -495,17 +502,17 @@ } if (radius_x < 0) [[unlikely]] { - exception_state.ThrowDOMException(DOMExceptionCode::kIndexSizeError, - "The major-axis radius provided (" + - String::Number(radius_x) + - ") is negative."); + exception_state.ThrowDOMException( + DOMExceptionCode::kIndexSizeError, + StrFloatCat("The major-axis radius provided (", radius_x, + ") is negative.")); return; } if (radius_y < 0) [[unlikely]] { - exception_state.ThrowDOMException(DOMExceptionCode::kIndexSizeError, - "The minor-axis radius provided (" + - String::Number(radius_y) + - ") is negative."); + exception_state.ThrowDOMException( + DOMExceptionCode::kIndexSizeError, + StrFloatCat("The minor-axis radius provided (", radius_y, + ") is negative.")); return; } @@ -571,8 +578,8 @@ const int num_radii = radii.size(); if (num_radii < 1 || num_radii > kMaxRadii) [[unlikely]] { exception_state.ThrowRangeError( - String::Number(num_radii) + - " radii provided. Between one and four radii are necessary."); + StrCat({String::Number(num_radii), + " radii provided. Between one and four radii are necessary."})); return; } @@ -603,12 +610,12 @@ } if (r_x < 0.0f) [[unlikely]] { exception_state.ThrowRangeError( - "X-radius value " + String::Number(r_x) + " is negative."); + StrFloatCat("X-radius value ", r_x, " is negative.")); return; } if (r_y < 0.0f) [[unlikely]] { exception_state.ThrowRangeError( - "Y-radius value " + String::Number(r_y) + " is negative."); + StrFloatCat("Y-radius value ", r_y, " is negative.")); return; } r[i] = gfx::SizeF(base::saturated_cast<float>(p->x()), @@ -623,8 +630,8 @@ return; } if (a < 0.0f) [[unlikely]] { - exception_state.ThrowRangeError("Radius value " + String::Number(a) + - " is negative."); + exception_state.ThrowRangeError( + StrFloatCat("Radius value ", a, " is negative.")); return; } r[i] = gfx::SizeF(a, a);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc index 65ca982a..049829c 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.cc
@@ -35,7 +35,6 @@ #include "third_party/blink/renderer/platform/graphics/image.h" #include "third_party/blink/renderer/platform/graphics/pattern.h" #include "third_party/blink/renderer/platform/heap/visitor.h" -#include "third_party/blink/renderer/platform/wtf/text/string_operators.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" namespace blink { @@ -59,8 +58,9 @@ exception_state.ThrowDOMException( DOMExceptionCode::kSyntaxError, - "The provided type ('" + type + - "') is not one of 'repeat', 'no-repeat', 'repeat-x', or 'repeat-y'."); + StrCat({"The provided type ('", type, + "') is not one of 'repeat', 'no-repeat', 'repeat-x', or " + "'repeat-y'."})); return Pattern::kRepeatModeNone; }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc index 913b644..d496f09 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
@@ -45,6 +45,7 @@ #include "base/feature_list.h" #include "base/location.h" #include "base/memory/scoped_refptr.h" +#include "base/memory/values_equivalent.h" #include "base/memory/weak_ptr.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" @@ -646,7 +647,8 @@ void CanvasRenderingContext2D::StyleDidChange(const ComputedStyle* old_style, const ComputedStyle& new_style) { - if (old_style && old_style->GetFont() == new_style.GetFont()) { + if (old_style && + base::ValuesEquivalent(old_style->GetFont(), new_style.GetFont())) { return; } PruneLocalFontCache(0);
diff --git a/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc b/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc index 8c7354d9..077fa07f 100644 --- a/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc +++ b/third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.cc
@@ -15,7 +15,6 @@ #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/text/strcat.h" -#include "third_party/blink/renderer/platform/wtf/text/string_operators.h" #include "url/url_constants.h" namespace blink {
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc index 306c6662..079b9b28 100644 --- a/third_party/blink/renderer/modules/xr/xr_session.cc +++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -67,7 +67,6 @@ #include "third_party/blink/renderer/platform/bindings/enumeration_base.h" #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/wtf/text/string_operators.h" #include "ui/gfx/geometry/point3_f.h" #include "ui/gfx/geometry/transform.h" @@ -385,7 +384,7 @@ trace_id_(trace_id) { FrozenArray<IDLString>::VectorType enabled_features; for (const auto& feature : enabled_feature_set_) { - enabled_features.push_back(XRSessionFeatureToString(feature)); + enabled_features.push_back(XRSessionFeatureToString(feature).ToString()); } enabled_features_ = MakeGarbageCollected<FrozenArray<IDLString>>(std::move(enabled_features)); @@ -879,8 +878,9 @@ if (!xr_->xrEnvironmentProviderRemote()) { exception_state.ThrowDOMException( DOMExceptionCode::kInvalidStateError, - kFeatureNotSupportedByDevicePrefix + - XRSessionFeatureToString(device::mojom::XRSessionFeature::ANCHORS)); + StrCat({kFeatureNotSupportedByDevicePrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::ANCHORS)})); return EmptyPromise(); } @@ -1002,9 +1002,9 @@ if (!IsFeatureEnabled(device::mojom::XRSessionFeature::HIT_TEST)) { exception_state.ThrowDOMException( DOMExceptionCode::kNotSupportedError, - kFeatureNotSupportedBySessionPrefix + - XRSessionFeatureToString( - device::mojom::XRSessionFeature::HIT_TEST)); + StrCat({kFeatureNotSupportedBySessionPrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::HIT_TEST)})); return {}; } @@ -1017,9 +1017,9 @@ if (!xr_->xrEnvironmentProviderRemote()) { exception_state.ThrowDOMException( DOMExceptionCode::kInvalidStateError, - kFeatureNotSupportedByDevicePrefix + - XRSessionFeatureToString( - device::mojom::XRSessionFeature::HIT_TEST)); + StrCat({kFeatureNotSupportedByDevicePrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::HIT_TEST)})); return {}; } @@ -1102,9 +1102,9 @@ if (!IsFeatureEnabled(device::mojom::XRSessionFeature::HIT_TEST)) { exception_state.ThrowDOMException( DOMExceptionCode::kNotSupportedError, - kFeatureNotSupportedBySessionPrefix + - XRSessionFeatureToString( - device::mojom::XRSessionFeature::HIT_TEST)); + StrCat({kFeatureNotSupportedBySessionPrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::HIT_TEST)})); return {}; } @@ -1117,9 +1117,9 @@ if (!xr_->xrEnvironmentProviderRemote()) { exception_state.ThrowDOMException( DOMExceptionCode::kInvalidStateError, - kFeatureNotSupportedByDevicePrefix + - XRSessionFeatureToString( - device::mojom::XRSessionFeature::HIT_TEST)); + StrCat({kFeatureNotSupportedByDevicePrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::HIT_TEST)})); return {}; } @@ -1470,9 +1470,9 @@ if (!IsFeatureEnabled(device::mojom::XRSessionFeature::LIGHT_ESTIMATION)) { exception_state.ThrowDOMException( DOMExceptionCode::kNotSupportedError, - kFeatureNotSupportedBySessionPrefix + - XRSessionFeatureToString( - device::mojom::XRSessionFeature::LIGHT_ESTIMATION)); + StrCat({kFeatureNotSupportedBySessionPrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::LIGHT_ESTIMATION)})); return EmptyPromise(); } @@ -1482,9 +1482,9 @@ V8XRReflectionFormat::Enum::kRgba16F) { exception_state.ThrowDOMException( DOMExceptionCode::kNotSupportedError, - "Reflection format \"" + - light_probe_init->reflectionFormat().AsStringView() + - "\" not supported."); + StrCat({"Reflection format \"", + light_probe_init->reflectionFormat().AsStringView(), + "\" not supported."})); return EmptyPromise(); } @@ -2001,9 +2001,9 @@ if (!IsFeatureEnabled(device::mojom::XRSessionFeature::IMAGE_TRACKING)) { exception_state.ThrowDOMException( DOMExceptionCode::kNotSupportedError, - kFeatureNotSupportedBySessionPrefix + - XRSessionFeatureToString( - device::mojom::XRSessionFeature::IMAGE_TRACKING)); + StrCat({kFeatureNotSupportedBySessionPrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::IMAGE_TRACKING)})); return ScriptPromise<IDLArray<V8XRImageTrackingScore>>(); } @@ -2069,9 +2069,9 @@ if (!IsFeatureEnabled(device::mojom::XRSessionFeature::IMAGE_TRACKING)) { exception_state.ThrowDOMException( DOMExceptionCode::kNotSupportedError, - kFeatureNotSupportedBySessionPrefix + - XRSessionFeatureToString( - device::mojom::XRSessionFeature::IMAGE_TRACKING)); + StrCat({kFeatureNotSupportedBySessionPrefix, + XRSessionFeatureToString( + device::mojom::XRSessionFeature::IMAGE_TRACKING)})); return *MakeGarbageCollected<FrozenArray<XRImageTrackingResult>>(); }
diff --git a/third_party/blink/renderer/modules/xr/xr_utils.cc b/third_party/blink/renderer/modules/xr/xr_utils.cc index 222ce5f..70d6fdf 100644 --- a/third_party/blink/renderer/modules/xr/xr_utils.cc +++ b/third_party/blink/renderer/modules/xr/xr_utils.cc
@@ -217,7 +217,7 @@ return std::nullopt; } -String XRSessionFeatureToString(device::mojom::XRSessionFeature feature) { +StringView XRSessionFeatureToString(device::mojom::XRSessionFeature feature) { switch (feature) { case device::mojom::XRSessionFeature::REF_SPACE_VIEWER: return "viewer";
diff --git a/third_party/blink/renderer/modules/xr/xr_utils.h b/third_party/blink/renderer/modules/xr/xr_utils.h index 9d24641..3e4107e 100644 --- a/third_party/blink/renderer/modules/xr/xr_utils.h +++ b/third_party/blink/renderer/modules/xr/xr_utils.h
@@ -65,7 +65,7 @@ // Inverse of |StringToXRSessionFeature()|, used for logging to console and for // |XRSession::enabledFeatures|. -String XRSessionFeatureToString(device::mojom::XRSessionFeature feature); +StringView XRSessionFeatureToString(device::mojom::XRSessionFeature feature); bool IsFeatureEnabledForContext(device::mojom::XRSessionFeature feature, const ExecutionContext* context);
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc index 691c10d..e631f55 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -163,19 +163,15 @@ if (!surface_) { const auto info = info_.makeAlphaType(kPremul_SkAlphaType); - const auto props = GetSkSurfaceProps(); + const bool can_use_lcd_text = alpha_type_ == kOpaque_SkAlphaType; + const auto props = + skia::LegacyDisplayGlobals::ComputeSurfaceProps(can_use_lcd_text); surface_ = SkSurfaces::Raster(info, &props); if (!surface_) { return nullptr; } } - // Getting the high entropy canvas operations should be done before - // flushing the canvas as flushing discards the recording (including the - // associated HighEntropyCanvasOpTypes). - HighEntropyCanvasOpType high_entropy_canvas_op_types = - GetRecorderHighEntropyCanvasOpTypes(); - if (recorder_->HasReleasableDrawOps()) { // If a previous flush rasterized some paint ops, we lost part of the // recording and must fallback to raster printing instead of vectorial @@ -183,8 +179,24 @@ clear_frame_ = false; if (!skia_canvas_) { + if (!canvas_image_provider_) { + // Create an ImageDecodeCache for half float images only if the canvas + // is using half float back storage. + cc::ImageDecodeCache* cache_f16 = nullptr; + if (GetSharedImageFormat() == viz::SinglePlaneFormat::kRGBA_F16) { + cache_f16 = &Image::SharedCCDecodeCache(kRGBA_F16_SkColorType); + } + + cc::ImageDecodeCache* cache_rgba8 = + &Image::SharedCCDecodeCache(kN32_SkColorType); + + canvas_image_provider_ = std::make_unique<CanvasImageProvider>( + cache_rgba8, cache_f16, GetColorSpace(), GetSharedImageFormat(), + cc::PlaybackImageProvider::RasterMode::kSoftware); + } + skia_canvas_ = std::make_unique<cc::SkiaPaintCanvas>( - surface_->getCanvas(), GetOrCreateCanvasImageProvider()); + surface_->getCanvas(), canvas_image_provider_.get()); } skia_canvas_->drawPicture(recorder_->ReleaseMainRecording()); @@ -222,10 +234,6 @@ scoped_refptr<UnacceleratedStaticBitmapImage> snapshot = UnacceleratedStaticBitmapImage::Create(std::move(paint_image), orientation); - if (ShouldPropagateHighEntropyCanvasOpTypes(high_entropy_canvas_op_types, - IsAccelerated())) { - snapshot->SetHighEntropyCanvasOpTypes(high_entropy_canvas_op_types); - } return snapshot; } @@ -1556,42 +1564,61 @@ return; skia_canvas_ = std::make_unique<cc::SkiaPaintCanvas>( - GetSkSurface()->getCanvas(), GetOrCreateCanvasImageProvider()); + GetSkSurface()->getCanvas(), GetOrCreateSWCanvasImageProvider()); } CanvasResourceProvider::CanvasImageProvider* -CanvasResourceProvider::GetOrCreateCanvasImageProvider() { +CanvasResourceProvider::GetOrCreateSWCanvasImageProvider() { if (canvas_image_provider_) { return canvas_image_provider_.get(); } - if (IsAccelerated()) { - // Callsites are responsible for checking this before invoking this - // method. - CHECK(context_provider_wrapper_); - } - // Create an ImageDecodeCache for half float images only if the canvas is // using half float back storage. cc::ImageDecodeCache* cache_f16 = nullptr; if (GetSharedImageFormat() == viz::SinglePlaneFormat::kRGBA_F16) { - cache_f16 = - IsAccelerated() - ? context_provider_wrapper_->ContextProvider().ImageDecodeCache( - kRGBA_F16_SkColorType) - : &Image::SharedCCDecodeCache(kRGBA_F16_SkColorType); + cache_f16 = &Image::SharedCCDecodeCache(kRGBA_F16_SkColorType); } cc::ImageDecodeCache* cache_rgba8 = - IsAccelerated() - ? context_provider_wrapper_->ContextProvider().ImageDecodeCache( - kN32_SkColorType) - : &Image::SharedCCDecodeCache(kN32_SkColorType); + &Image::SharedCCDecodeCache(kN32_SkColorType); canvas_image_provider_ = std::make_unique<CanvasImageProvider>( cache_rgba8, cache_f16, GetColorSpace(), GetSharedImageFormat(), - IsAccelerated() ? cc::PlaybackImageProvider::RasterMode::kGpu - : cc::PlaybackImageProvider::RasterMode::kSoftware); + cc::PlaybackImageProvider::RasterMode::kSoftware); + + return canvas_image_provider_.get(); +} + +CanvasResourceProvider::CanvasImageProvider* +CanvasResourceProviderSharedImage::GetOrCreateCanvasImageProvider() { + if (!IsAccelerated()) { + return GetOrCreateSWCanvasImageProvider(); + } + + if (canvas_image_provider_) { + return canvas_image_provider_.get(); + } + + // Callsites are responsible for checking this before invoking this + // method. + CHECK(ContextProviderWrapper()); + + // Create an ImageDecodeCache for half float images only if the canvas is + // using half float back storage. + cc::ImageDecodeCache* cache_f16 = nullptr; + if (GetSharedImageFormat() == viz::SinglePlaneFormat::kRGBA_F16) { + cache_f16 = ContextProviderWrapper()->ContextProvider().ImageDecodeCache( + kRGBA_F16_SkColorType); + } + + cc::ImageDecodeCache* cache_rgba8 = + ContextProviderWrapper()->ContextProvider().ImageDecodeCache( + kN32_SkColorType); + + canvas_image_provider_ = std::make_unique<CanvasImageProvider>( + cache_rgba8, cache_f16, GetColorSpace(), GetSharedImageFormat(), + cc::PlaybackImageProvider::RasterMode::kGpu); return canvas_image_provider_.get(); }
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h index 532c401..c1b68841 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
@@ -312,7 +312,7 @@ virtual void RasterRecord(cc::PaintRecord) = 0; void UnacceleratedRasterRecord(cc::PaintRecord); - CanvasImageProvider* GetOrCreateCanvasImageProvider(); + CanvasImageProvider* GetOrCreateSWCanvasImageProvider(); ResourceProviderType type_; mutable sk_sp<SkSurface> surface_; // mutable for lazy init @@ -550,6 +550,7 @@ void OnContextDestroyed() override; private: + CanvasImageProvider* GetOrCreateCanvasImageProvider(); scoped_refptr<CanvasResourceSharedImage> CreateResource(); // The maximum number of in-flight resources waiting to be used for
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 116167f..3d520450 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1061,6 +1061,10 @@ status: "stable", }, { + name: "CollectWidthAndHeightAsPresentationAttributesForUse", + status: "stable", + }, + { name: "CollectWidthAndHeightAsStylesForNestedSvg", status: "stable", },
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 223cc3b6..9fa1448 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -7880,7 +7880,6 @@ [ Debug Mac13 ] virtual/threaded/printing/css2.1/page-break-after-000.html [ Skip Timeout ] [ Debug Mac13 ] virtual/threaded/transitions/transition-shape-outside-crash.html [ Skip Timeout ] [ Debug Mac13 ] http/tests/devtools/overrides/can-edit-iframe-html.js [ Skip Timeout ] -[ Debug Mac13 ] http/tests/devtools/filtered-item-selection-dialog-rendering.js [ Skip Timeout ] [ Debug Mac13 ] external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-Blob.html [ Skip Timeout ] [ Debug Mac13 ] virtual/threaded-prefer-compositing/fast/scroll-behavior/no-erroneous-auto-scroll-pinch-zoom.html [ Skip Timeout ] [ Debug Mac13 ] fast/scroll-behavior/overscroll-behavior.html [ Failure ] @@ -9906,6 +9905,8 @@ # Gardener 2025-11-14 crbug.com/460545299 [ Mac ] webaudio/codec-tests/webm/webm-decode.html [ Failure Pass ] +crbug.com/414792736 http/tests/devtools/filtered-item-selection-dialog-rendering.js [ Failure Pass ] + # Gardener 2025-11-20 crbug.com/462129672 [ Linux ] external/wpt/css/css-anchor-position/anchored-transition-display-none-001.html [ Timeout ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 0bc3c6b..9477ab9c 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -5291,7 +5291,8 @@ ], "exclusive_tests": "ALL", "args": [ - "--enable-features=WebMachineLearningNeuralNetwork" + "--enable-features=WebMachineLearningNeuralNetwork,WebNNDirectML", + "--disable-features=WebNNOnnxRuntime" ], "expires": "Jun 1, 2026", "owners": [ @@ -5559,7 +5560,8 @@ ], "exclusive_tests": "ALL", "args": [ - "--enable-features=WebMachineLearningNeuralNetwork" + "--enable-features=WebMachineLearningNeuralNetwork,WebNNDirectML", + "--disable-features=WebNNOnnxRuntime" ], "expires": "Jun 1, 2026", "owners": [ @@ -5829,7 +5831,8 @@ "exclusive_tests": "ALL", "args": [ "--use-gpu-in-tests", - "--enable-features=WebMachineLearningNeuralNetwork" + "--enable-features=WebMachineLearningNeuralNetwork,WebNNDirectML", + "--disable-features=WebNNOnnxRuntime" ], "expires": "Jun 1, 2026", "owners": [
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-computed.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-computed.tentative.html index bcaa0b6..4c958cc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-computed.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-computed.tentative.html
@@ -12,7 +12,17 @@ <body> <div id=target></div> <script> +test_computed_value("contain-intrinsic-width", "from-element"); +test_computed_value("contain-intrinsic-height", "from-element"); + +test_computed_value("contain-intrinsic-inline-size", "from-element"); +test_computed_value("contain-intrinsic-block-size", "from-element"); + +test_computed_value("contain-intrinsic-width", "from-element 200px"); +test_computed_value("contain-intrinsic-height", "from-element 200px"); + test_computed_value("contain-intrinsic-size", "from-element"); +test_computed_value("contain-intrinsic-size", "from-element 200px"); </script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-valid.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-valid.tentative.html index fe99ccb..e54302c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-valid.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/parsing/from-element-valid.tentative.html
@@ -8,11 +8,29 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/css/support/parsing-testcommon.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> </head> <body> <script> +test_valid_value("contain-intrinsic-width", "from-element"); +test_valid_value("contain-intrinsic-height", "from-element"); + +test_valid_value("contain-intrinsic-inline-size", "from-element"); +test_valid_value("contain-intrinsic-block-size", "from-element"); + +test_valid_value("contain-intrinsic-width", "from-element 200px"); +test_valid_value("contain-intrinsic-height", "from-element 200px"); + test_valid_value("contain-intrinsic-size", "from-element"); +test_valid_value("contain-intrinsic-size", "from-element 200px"); +test_shorthand_value("contain-intrinsic-size", "from-element", { + "contain-intrinsic-width": "from-element", + "contain-intrinsic-height": "from-element", +}); +test_shorthand_value("contain-intrinsic-size", "from-element 200px", { + "contain-intrinsic-width": "from-element 200px", + "contain-intrinsic-height": "from-element 200px", +}); </script> </body> </html> -
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving.html b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving.html index bcf3d1de..d5098fe 100644 --- a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving.html +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resolving.html
@@ -4,6 +4,7 @@ <meta name="variant" content="?overlapping-entries.json"> <meta name="variant" content="?packages-via-trailing-slashes.json"> <meta name="variant" content="?resolving-null.json"> +<meta name="variant" content="?empty-scopes.json"> <meta name="variant" content="?scopes-exact-vs-prefix.json"> <meta name="variant" content="?scopes.json"> <meta name="variant" content="?tricky-specifiers.json">
diff --git a/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/empty-scopes.json b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/empty-scopes.json new file mode 100644 index 0000000..259471a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/import-maps/data-driven/resources/empty-scopes.json
@@ -0,0 +1,160 @@ +{ + "name": "Scope sorting with multiple empty scopes", + "details": "Tests that empty scopes don't interfere with scope resolution priority. This reproduces a bug where having multiple empty scope entries before a more specific scope causes the wrong scope to be selected.", + "link": "https://github.com/astegmaier/playground-import-maps", + "tests": { + "Multiple empty scopes before specific scope": { + "importMap": { + "scopes": { + "./__bundles__/asdfasdf/": {}, + "./__bundles__/qwerqwer/": {}, + "./__bundles__/foo/": { + "bar": "./__bundles__/bar/version2/index.js" + }, + "./__bundles__/": { + "bar": "./__bundles__/bar/version1/index.js" + } + } + }, + "importMapBaseURL": "https://example.com/", + "tests": { + "Import from foo should use version2": { + "baseURL": "https://example.com/__bundles__/foo/index.js", + "expectedResults": { + "bar": "https://example.com/__bundles__/bar/version2/index.js" + } + }, + "Import from root bundles should use version1": { + "baseURL": "https://example.com/__bundles__/other/index.js", + "expectedResults": { + "bar": "https://example.com/__bundles__/bar/version1/index.js" + } + }, + "Import from asdfasdf should use version1 (empty scope)": { + "baseURL": "https://example.com/__bundles__/asdfasdf/index.js", + "expectedResults": { + "bar": "https://example.com/__bundles__/bar/version1/index.js" + } + }, + "Import from qwerqwer should use version1 (empty scope)": { + "baseURL": "https://example.com/__bundles__/qwerqwer/index.js", + "expectedResults": { + "bar": "https://example.com/__bundles__/bar/version1/index.js" + } + } + } + }, + "Empty scopes after specific scope": { + "importMap": { + "scopes": { + "./__bundles__/foo/": { + "bar": "./__bundles__/bar/version2/index.js" + }, + "./__bundles__/": { + "bar": "./__bundles__/bar/version1/index.js" + }, + "./__bundles__/asdfasdf/": {}, + "./__bundles__/qwerqwer/": {} + } + }, + "importMapBaseURL": "https://example.com/", + "tests": { + "Import from foo should use version2 (order independent)": { + "baseURL": "https://example.com/__bundles__/foo/index.js", + "expectedResults": { + "bar": "https://example.com/__bundles__/bar/version2/index.js" + } + }, + "Import from root bundles should use version1": { + "baseURL": "https://example.com/__bundles__/other/index.js", + "expectedResults": { + "bar": "https://example.com/__bundles__/bar/version1/index.js" + } + } + } + }, + "Single empty scope before specific scope": { + "importMap": { + "scopes": { + "./__bundles__/asdfasdf/": {}, + "./__bundles__/foo/": { + "bar": "./__bundles__/bar/version2/index.js" + }, + "./__bundles__/": { + "bar": "./__bundles__/bar/version1/index.js" + } + } + }, + "importMapBaseURL": "https://example.com/", + "tests": { + "Import from foo should use version2 (single empty scope)": { + "baseURL": "https://example.com/__bundles__/foo/index.js", + "expectedResults": { + "bar": "https://example.com/__bundles__/bar/version2/index.js" + } + } + } + }, + "Deeply nested scopes with empty scopes": { + "importMap": { + "scopes": { + "./a/b/c/d/": {}, + "./a/b/c/e/": {}, + "./a/b/foo/": { + "pkg": "./resolved/version2.js" + }, + "./a/b/": { + "pkg": "./resolved/version1.js" + } + } + }, + "importMapBaseURL": "https://example.com/", + "tests": { + "Import from a/b/foo should use version2": { + "baseURL": "https://example.com/a/b/foo/index.js", + "expectedResults": { + "pkg": "https://example.com/resolved/version2.js" + } + }, + "Import from a/b/ should use version1": { + "baseURL": "https://example.com/a/b/other.js", + "expectedResults": { + "pkg": "https://example.com/resolved/version1.js" + } + } + } + }, + "Many empty scopes with different lengths": { + "importMap": { + "scopes": { + "./x/": {}, + "./xy/": {}, + "./xyz/": {}, + "./xyzw/": {}, + "./xyzwv/": {}, + "./packages/foo/": { + "bar": "./bar/version2.js" + }, + "./packages/": { + "bar": "./bar/version1.js" + } + } + }, + "importMapBaseURL": "https://example.com/", + "tests": { + "Import from packages/foo should use version2": { + "baseURL": "https://example.com/packages/foo/index.js", + "expectedResults": { + "bar": "https://example.com/bar/version2.js" + } + }, + "Import from packages/ should use version1": { + "baseURL": "https://example.com/packages/other.js", + "expectedResults": { + "bar": "https://example.com/bar/version1.js" + } + } + } + } + } +}
diff --git a/third_party/dawn b/third_party/dawn index 80128f9..5f59849 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit 80128f92cd70ee0a272009cfaf2dcc701e7eb441 +Subproject commit 5f5984923015d226e61ff97790afe13351917fa7
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index d4a2211a..653c6a3 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit d4a2211a75b888917546d8066eea4aee48350beb +Subproject commit 653c6a3d75c7b0782ab7c675bd88e07e3bb99444
diff --git a/third_party/search_engines_data/resources_internal b/third_party/search_engines_data/resources_internal index ab395ff..d796f63 160000 --- a/third_party/search_engines_data/resources_internal +++ b/third_party/search_engines_data/resources_internal
@@ -1 +1 @@ -Subproject commit ab395ff6dac9f780c2cb6474ff42017a334b0725 +Subproject commit d796f6348f95a4ff08a8efe02f11e55c2dd257ec
diff --git a/third_party/skia b/third_party/skia index 925c311..04f08a1 160000 --- a/third_party/skia +++ b/third_party/skia
@@ -1 +1 @@ -Subproject commit 925c311f4b37026e285964fb7bd1b56b9b4e3ea4 +Subproject commit 04f08a150e243d0b3781868a943d1f72751e2747
diff --git a/third_party/swiftshader b/third_party/swiftshader index d7bc957..be8ed1d 160000 --- a/third_party/swiftshader +++ b/third_party/swiftshader
@@ -1 +1 @@ -Subproject commit d7bc95730bdda6c88b45c00b1bfece8a5cd99ea5 +Subproject commit be8ed1d0e9173e2c0d9380ba4cffe51582aaa866
diff --git a/third_party/vulkan-deps b/third_party/vulkan-deps index f1e2e0e..c42dd8c 160000 --- a/third_party/vulkan-deps +++ b/third_party/vulkan-deps
@@ -1 +1 @@ -Subproject commit f1e2e0ed9389e19a4b88521061ff30578872d2e4 +Subproject commit c42dd8c6ffc3d38b86ddfdb16cccb5851e3ea86f
diff --git a/third_party/vulkan-validation-layers/src b/third_party/vulkan-validation-layers/src index 473d80b..c1054db 160000 --- a/third_party/vulkan-validation-layers/src +++ b/third_party/vulkan-validation-layers/src
@@ -1 +1 @@ -Subproject commit 473d80b724a3c5d0e18e216b1afb791872ed796a +Subproject commit c1054dbc91e22cb6d99bf5b0766c4efb18dc2bd6
diff --git a/third_party/webrtc b/third_party/webrtc index 920b3b7..131cd61 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit 920b3b701d21e61e045dc02d5757936ad141ba19 +Subproject commit 131cd6104aa0b4e2cd07b74b2955a9f8ba6db419
diff --git a/tools/metrics/histograms/metadata/account_manager/histograms.xml b/tools/metrics/histograms/metadata/account_manager/histograms.xml index 6c034a3a..fbe727dc 100644 --- a/tools/metrics/histograms/metadata/account_manager/histograms.xml +++ b/tools/metrics/histograms/metadata/account_manager/histograms.xml
@@ -159,7 +159,7 @@ </histogram> <histogram name="AccountManager.NumAccounts" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sinhak@chromium.org</owner> <owner>emaamari@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index a85f43a..9480ee1 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -376,7 +376,7 @@ </histogram> <histogram name="Android.ActivityStop.NumberOfTabsUsed" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>gauravjj@google.com</owner> <owner>skavuluru@google.com</owner> <owner>clank-large-form-factors@google.com</owner> @@ -408,7 +408,7 @@ </histogram> <histogram name="Android.ActivityStop.PercentageOfTabsUsed" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>gauravjj@google.com</owner> <owner>skavuluru@google.com</owner> <owner>clank-large-form-factors@google.com</owner> @@ -1260,7 +1260,7 @@ </histogram> <histogram name="Android.ChildProcessBinding.BinderIPC.Count" units="calls" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kawasin@google.com</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -1845,7 +1845,7 @@ </histogram> <histogram name="Android.DragDrop.Files.Count" units="files" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>joelhockey@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -1925,7 +1925,7 @@ </histogram> <histogram name="Android.DragDrop.Image.Size" units="KB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -2134,7 +2134,7 @@ </histogram> <histogram name="Android.EdgeToEdge.Eligible" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lazzzis@google.com</owner> <owner>edge-to-edge@chromium.org</owner> <summary> @@ -2453,7 +2453,7 @@ </histogram> <histogram name="Android.IncognitoReauth.AuthResult" - enum="DeviceAuthFinalResult" expires_after="2026-03-22"> + enum="DeviceAuthFinalResult" expires_after="2026-05-24"> <owner>roagarwal@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -2463,7 +2463,7 @@ </histogram> <histogram name="Android.IncognitoReauth.PrefToggledFromSettingPage" - enum="IncognitoReauthToggleValueType" expires_after="2026-03-22"> + enum="IncognitoReauthToggleValueType" expires_after="2026-05-24"> <owner>roagarwal@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -2570,7 +2570,7 @@ </histogram> <histogram name="Android.InputOnViz.Browser.EventsAfterTransfer" - enum="MotionEventAction" expires_after="2026-03-22"> + enum="MotionEventAction" expires_after="2026-05-24"> <owner>kartarsingh@google.com</owner> <owner>woa-performance-team@google.com</owner> <summary> @@ -2648,7 +2648,7 @@ </histogram> <histogram name="Android.InputOnViz.Browser.TouchMovesSeenAfterTransfer" - units="counts" expires_after="2026-03-22"> + units="counts" expires_after="2026-05-24"> <owner>kartarsingh@google.com</owner> <owner>woa-performance-team@google.com</owner> <summary> @@ -2677,7 +2677,7 @@ </histogram> <histogram name="Android.InputOnViz.InputReceiverCreationResult" - enum="CreateAndroidInputReceiverResult" expires_after="2026-03-22"> + enum="CreateAndroidInputReceiverResult" expires_after="2026-05-24"> <owner>kartarsingh@google.com</owner> <owner>woa-performance-team@google.com</owner> <summary> @@ -2845,7 +2845,7 @@ </histogram> <histogram name="Android.Intent.MainFrameIntentLaunch" - enum="MainFrameIntentLaunch" expires_after="2026-03-22"> + enum="MainFrameIntentLaunch" expires_after="2026-05-24"> <owner>mthiesse@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -2867,7 +2867,7 @@ </histogram> <histogram name="Android.Intent.ShareIntentUrlCount" units="URLs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mthiesse@chromium.org</owner> <owner>tedchoc@google.com</owner> <summary> @@ -3073,7 +3073,7 @@ </histogram> <histogram name="Android.Messages.Dismissed{MessageIdentifier}" - enum="MessageDismissReason" expires_after="2026-03-22"> + enum="MessageDismissReason" expires_after="2026-05-24"> <owner>lazzzis@chromium.org</owner> <owner>src/components/messages/OWNERS</owner> <summary> @@ -3247,7 +3247,7 @@ </histogram> <histogram name="Android.Messages.TimeToAction{MessageIdentifier}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lazzzis@chromium.org</owner> <owner>src/components/messages/OWNERS</owner> <summary> @@ -3503,7 +3503,7 @@ <histogram name="Android.MultiWindowMode.AssertIndicesMatch{ActivityIndexMismatchAssignmentState}" - enum="PreAssignedActivityState" expires_after="2026-03-22"> + enum="PreAssignedActivityState" expires_after="2026-05-24"> <owner>wenyufu@chromium.org</owner> <owner>aishwaryarj@google.com</owner> <owner>clank-large-form-factors@google.com</owner> @@ -3547,7 +3547,7 @@ </histogram> <histogram name="Android.MultiWindowMode.DraggedTabOpenedNewWindow" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>aishwaryarj@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -4408,7 +4408,7 @@ </histogram> <histogram name="Android.PageContentProtoViewStructureBuilder.Result" - enum="BooleanSuccess" expires_after="2026-03-15"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>salg@google.com</owner> <owner>ssid@google.com</owner> <summary> @@ -4654,7 +4654,7 @@ </histogram> <histogram name="Android.Pdf.DocumentLoadTime.FirstPaired" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -5485,7 +5485,7 @@ </histogram> <histogram name="Android.StorageSystem.Type" enum="AndroidStorageSystemType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yfriedman@chromium.org</owner> <owner>clank-performance-team@google.com</owner> <summary> @@ -5626,7 +5626,7 @@ </histogram> <histogram name="Android.Tab.CreateNewTabDuration.{TabLaunchType}2" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sreejakshetty@chromium.org</owner> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> @@ -6815,7 +6815,7 @@ </histogram> <histogram name="Android.WebView.Callback.Counts" enum="WebViewCallbackType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ntfschr@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary> @@ -7359,7 +7359,7 @@ </histogram> <histogram name="Android.WebView.Gfx.HardwareDrawType" - enum="WebViewDrawAndSubmissionType" expires_after="2026-03-22"> + enum="WebViewDrawAndSubmissionType" expires_after="2026-05-24"> <owner>vasilyt@chromium.org</owner> <owner>boliu@chromium.org</owner> <summary> @@ -8344,7 +8344,7 @@ </histogram> <histogram name="Android.WebView.SecureCookieAction" enum="SecureCookieAction" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ntfschr@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index 9109cfcc..eda579a2 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -338,7 +338,7 @@ <token key="AppInstallSurface" variants="AppInstallSurface"/> </histogram> -<histogram name="Apps.AppLaunch" enum="AppLaunch" expires_after="2026-03-22"> +<histogram name="Apps.AppLaunch" enum="AppLaunch" expires_after="2026-05-24"> <owner>tapted@chromium.org</owner> <owner>benwells@chromium.org</owner> <summary> @@ -358,7 +358,7 @@ </histogram> <histogram name="Apps.AppLaunchPerAppType" enum="AppType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ovn@google.com</owner> <owner>lt-web-apps-team@google.com</owner> <summary> @@ -368,7 +368,7 @@ </histogram> <histogram name="Apps.AppLaunchPerAppTypeV2" enum="AppTypeV2" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ovn@google.com</owner> <owner>lt-web-apps-team@google.com</owner> <summary> @@ -927,7 +927,7 @@ </histogram> <histogram name="Apps.AppList.NumberOfApps" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tbarzic@chromium.org</owner> <owner>mmourgos@chromium.org</owner> <owner>gzadina@google.com</owner> @@ -1958,7 +1958,7 @@ </histogram> <histogram name="Apps.AppListFolder.ShowHide.AnimationSmoothness" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tbarzic@chromium.org</owner> <owner>jamescook@chromium.org</owner> <owner>chromeos-launcher@google.com</owner> @@ -2218,7 +2218,7 @@ </histogram> <histogram name="Apps.AppShimSignatureValidationResult" - enum="WebAppShimSignatureValidationResult" expires_after="2026-03-22"> + enum="WebAppShimSignatureValidationResult" expires_after="2026-05-24"> <owner>markrowe@chromium.org</owner> <owner>chrome-platform-security-core@google.com</owner> <summary> @@ -2347,7 +2347,7 @@ </histogram> <histogram name="Apps.CreateShortcuts.Mac.Result2" - enum="WebAppCreateShortcutMacResult" expires_after="2026-03-22"> + enum="WebAppCreateShortcutMacResult" expires_after="2026-05-24"> <owner>mek@chromium.org</owner> <owner>pwa-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/arc/histograms.xml b/tools/metrics/histograms/metadata/arc/histograms.xml index 7b29452..d4254ed0 100644 --- a/tools/metrics/histograms/metadata/arc/histograms.xml +++ b/tools/metrics/histograms/metadata/arc/histograms.xml
@@ -381,7 +381,7 @@ </histogram> <histogram name="Arc.App.LowMemoryKills.{ArcAppKillType}Count10Minutes" - units="Apps" expires_after="2026-03-22"> + units="Apps" expires_after="2026-05-24"> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> <summary> @@ -393,7 +393,7 @@ <histogram name="Arc.App.LowMemoryKills.{ArcBackgroundVms}.{ArcAppKillType}Count10Minutes" - units="Apps" expires_after="2026-03-22"> + units="Apps" expires_after="2026-05-24"> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> <summary> @@ -406,7 +406,7 @@ <histogram name="Arc.App.LowMemoryKills{ArcAppKillDailyBackgroundVms}{ArcAppKillDailyType}" - units="Apps" expires_after="2026-03-22"> + units="Apps" expires_after="2026-05-24"> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> <summary> @@ -429,7 +429,7 @@ </summary> </histogram> -<histogram name="Arc.AppCount" units="units" expires_after="2026-03-22"> +<histogram name="Arc.AppCount" units="units" expires_after="2026-05-24"> <owner>khmel@google.com</owner> <owner>fahdi@google.com</owner> <summary> @@ -672,7 +672,7 @@ </histogram> <histogram name="Arc.ArcOnDemand.ActivationIsDelayed" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yuholong@google.com</owner> <owner>arcvm-eng@google.com</owner> <summary> @@ -964,7 +964,7 @@ </histogram> <histogram name="Arc.CumulativeUseTime" units="seconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jhorwich@google.com</owner> <owner>shobnah@google.com</owner> <summary> @@ -1087,7 +1087,7 @@ </histogram> <histogram name="Arc.DlcInstaller.Install" enum="BooleanSuccess" - expires_after="2026-03-24"> + expires_after="2026-05-24"> <owner>tinghaolin@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -1102,7 +1102,7 @@ </histogram> <histogram name="Arc.DlcInstaller.InstallTime" units="ms" - expires_after="2026-03-24"> + expires_after="2026-05-24"> <owner>tinghaolin@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -1113,7 +1113,7 @@ </histogram> <histogram name="Arc.EngagementTime.ArcTotal" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mduggan@google.com</owner> <owner>yhanada@google.com</owner> <owner>arc-framework@google.com</owner> @@ -1127,7 +1127,7 @@ </histogram> <histogram name="Arc.EngagementTime.Background" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mduggan@google.com</owner> <owner>yhanada@google.com</owner> <owner>arc-framework@google.com</owner> @@ -1139,7 +1139,7 @@ </histogram> <histogram name="Arc.EngagementTime.Foreground" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mduggan@google.com</owner> <owner>yhanada@google.com</owner> <owner>arc-framework@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml index 40b011e6..e89791a 100644 --- a/tools/metrics/histograms/metadata/ash/histograms.xml +++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -975,7 +975,7 @@ </histogram> <histogram name="Ash.Birch.Bar.Activate" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jamescook@chromium.org</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -1041,7 +1041,7 @@ <summary>Recorded when the user is shown a chip of a given type.</summary> </histogram> -<histogram name="Ash.Birch.ChipCount" units="count" expires_after="2026-03-22"> +<histogram name="Ash.Birch.ChipCount" units="count" expires_after="2026-05-24"> <owner>jamescook@chromium.org</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -1171,7 +1171,7 @@ </histogram> <histogram name="Ash.Boca.Babelorca.SendingStoppedReason" - enum="BabelOrcaSendingStoppedReason" expires_after="2026-03-21"> + enum="BabelOrcaSendingStoppedReason" expires_after="2026-05-24"> <owner>anasr@google.com</owner> <owner>cros-edu-eng@google.com</owner> <summary> @@ -1189,7 +1189,7 @@ </histogram> <histogram name="Ash.Boca.Babelorca.{Request}.HttpResponseCodeOrNetError" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <owner>anasr@google.com</owner> <owner>cros-edu-eng@google.com</owner> <summary> @@ -1205,7 +1205,7 @@ </histogram> <histogram name="Ash.Boca.Babelorca.{Scope}.OAuthFetchError" - enum="GoogleServiceAuthError" expires_after="2026-03-21"> + enum="GoogleServiceAuthError" expires_after="2026-05-24"> <owner>anasr@google.com</owner> <owner>cros-edu-eng@google.com</owner> <summary> @@ -3384,7 +3384,7 @@ </histogram> <histogram name="Ash.Display.{DisplayType}.ActiveEffectiveDPI" units="dpi" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -4683,7 +4683,7 @@ </histogram> <histogram name="Ash.InteractiveWindowResize.TimeToPresent" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>oshima@chromium.org</owner> <owner>zoraiznaeem@chromium.org</owner> <owner>cros-sw-perf@google.com</owner> @@ -4922,7 +4922,7 @@ </histogram> <histogram name="Ash.Login.TotalSessionDuration" units="minutes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hidehiko@chromium.org</owner> <owner>raging@google.com</owner> <owner>cros-lurs@google.com</owner> @@ -4934,7 +4934,7 @@ </histogram> <histogram name="Ash.LoginAnimation.Duration2.{TabletOrClamshellMode}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>oshima@chromium.org</owner> <owner>zhzhliu@google.com</owner> <owner>cros-sw-perf@google.com</owner> @@ -5177,7 +5177,7 @@ </histogram> <histogram name="Ash.Mahi.Elucidation.LoadingTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>newcomer@chromium.org</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -5547,7 +5547,7 @@ </histogram> <histogram name="Ash.Notification.ImageMemorySizeInKB" units="KB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>andrewxu@chromium.org</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -6713,7 +6713,7 @@ </histogram> <histogram name="Ash.Picker.Search.{Provider}Provider.QueryTime" units="ms" - expires_after="2026-03-01"> + expires_after="2026-05-24"> <owner>shend@chromium.org</owner> <owner>jopalmer@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -7175,7 +7175,7 @@ <histogram name="Ash.Projector.OnDeviceToServerSpeechRecognitionFallbackReason" enum="OnDeviceToServerSpeechRecognitionFallbackReason" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dorianbrandon@google.com</owner> <owner>bzielinski@google.com</owner> <owner>cros-projector@google.com</owner> @@ -8026,7 +8026,7 @@ <histogram name="Ash.ServerBasedSpeechRecognition.AudioLengthLeftWhenAudioCaptureEnd" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>dorianbrandon@google.com</owner> <owner>bzielinski@google.com</owner> <owner>cros-projector@google.com</owner> @@ -8038,7 +8038,7 @@ <histogram name="Ash.ServerBasedSpeechRecognition.EndOfRecognitionSignalLatency" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>dorianbrandon@google.com</owner> <owner>bzielinski@google.com</owner> <owner>cros-projector@google.com</owner> @@ -8049,7 +8049,7 @@ </histogram> <histogram name="Ash.ServerBasedSpeechRecognition.ErrorCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-22"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <owner>dorianbrandon@google.com</owner> <owner>bzielinski@google.com</owner> <owner>cros-projector@google.com</owner> @@ -8105,7 +8105,7 @@ </histogram> <histogram name="Ash.Shelf.NumberOfPinnedItems" units="Icons" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>anasalazar@chromium.org</owner> <owner>mmourgos@google.com</owner> <summary> @@ -8289,7 +8289,7 @@ </histogram> <histogram name="Ash.ShortcutCustomization.ModifyType.{ActionName}" - enum="ShortcutCustomizationModificationType" expires_after="2026-03-22"> + enum="ShortcutCustomizationModificationType" expires_after="2026-05-24"> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -9957,7 +9957,7 @@ </histogram> <histogram name="DemoMode.ActiveApp" enum="DemoModeApp" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -9968,7 +9968,7 @@ </histogram> <histogram name="DemoMode.AppLaunched" enum="DemoModeApp" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -9980,7 +9980,7 @@ </histogram> <histogram name="DemoMode.AppLaunchSource" enum="DemoModeAppLaunchSource" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>wanghaifan@google.com</owner> @@ -9992,7 +9992,7 @@ </histogram> <histogram name="DemoMode.AppUsageTime.{DemoModeAppName}" units="s" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> <summary> @@ -10020,7 +10020,7 @@ </histogram> <histogram name="DemoMode.AttractLoop.Timestamp" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@google.com</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -10030,7 +10030,7 @@ </summary> </histogram> -<histogram name="DemoMode.DwellTime" units="seconds" expires_after="2026-03-22"> +<histogram name="DemoMode.DwellTime" units="seconds" expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -10061,7 +10061,7 @@ <histogram name="DemoMode.Highlights.DetailsPageStayDuration.{HighlightsDetailsPageName}" - units="ms" expires_after="2026-01-21"> + units="ms" expires_after="2026-05-24"> <owner>llin@google.com</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -10257,7 +10257,7 @@ </histogram> <histogram name="DemoMode.SessionLength" units="minutes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -10272,7 +10272,7 @@ </histogram> <histogram name="DemoMode.Setup.ComponentInitialLoadingResult" - enum="DemoModeSetupComponentLoadingResult" expires_after="2026-03-22"> + enum="DemoModeSetupComponentLoadingResult" expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>wanghaifan@google.com</owner> @@ -10322,7 +10322,7 @@ </histogram> <histogram name="DemoMode.Setup.Error" enum="DemoModeSetupError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>wanghaifan@google.com</owner> @@ -10378,7 +10378,7 @@ </histogram> <histogram name="DemoMode.SignedIn.Request.CleanupResult" - enum="DemoModeSignedInAccountRequestResult" expires_after="2026-03-22"> + enum="DemoModeSignedInAccountRequestResult" expires_after="2026-05-24"> <owner>wanghaifan@google.com</owner> <owner>cros-demo-mode-eng@google.com</owner> <summary> @@ -10391,7 +10391,7 @@ </histogram> <histogram name="DemoMode.SignedIn.Request.SetupResult" - enum="DemoModeSignedInAccountRequestResult" expires_after="2026-03-22"> + enum="DemoModeSignedInAccountRequestResult" expires_after="2026-05-24"> <owner>wanghaifan@google.com</owner> <owner>cros-demo-mode-eng@google.com</owner> <summary> @@ -10404,7 +10404,7 @@ </histogram> <histogram name="DemoMode.SignedIn.Shopper.DwellTime" units="seconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wanghaifan@google.com</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -10421,7 +10421,7 @@ </histogram> <histogram name="DemoMode.UniqueAppsLaunched" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -10432,7 +10432,7 @@ </histogram> <histogram name="DemoMode.UserClicksAndPresses" units="clicks" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>llin@chromium.org</owner> <owner>xiqiruan@chromium.org</owner> <owner>cros-demo-mode-eng@google.com</owner> @@ -10678,7 +10678,7 @@ </histogram> <histogram name="Touchpad.NaturalScroll.Started" enum="BooleanEnabled" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ash_growth/histograms.xml b/tools/metrics/histograms/metadata/ash_growth/histograms.xml index a4f41f87..1a21587 100644 --- a/tools/metrics/histograms/metadata/ash_growth/histograms.xml +++ b/tools/metrics/histograms/metadata/ash_growth/histograms.xml
@@ -74,7 +74,7 @@ </histogram> <histogram name="Ash.Growth.CampaignsManager.GetCampaignBySlot" - enum="CampaignSlot" expires_after="2026-03-22"> + enum="CampaignSlot" expires_after="2026-05-24"> <owner>llin@google.com</owner> <owner>cros-growth@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml index ea72e4c..5e1d909 100644 --- a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml +++ b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml
@@ -138,7 +138,7 @@ <histogram name="Conversions.AggregatableReport.ExtraReportDelayForSuccessfulSend" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>tquintanilla@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -543,7 +543,7 @@ </histogram> <histogram name="Conversions.HeadersSize.Register{Type}" units="bytes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tquintanilla@chromium.org</owner> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index 86e1fe1..bde3298 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -2776,7 +2776,7 @@ <histogram name="Autofill.CreditCard.Seamless{AutofillSeamlessnessFillability}{AutofillSeamlessnessMeasurementTime}{AutofillSeamlessnessVisibility}" - enum="CreditCardSeamlessFill" expires_after="2026-03-22"> + enum="CreditCardSeamlessFill" expires_after="2026-05-24"> <owner>schwering@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2820,7 +2820,7 @@ <histogram name="Autofill.CreditCard.Seamless{AutofillSeamlessnessFillability}{AutofillSeamlessnessMeasurementTime}{AutofillSeamlessnessVisibility}.Bitmask" - enum="AutofillCreditCardSeamlessnessBitmask" expires_after="2026-03-22"> + enum="AutofillCreditCardSeamlessnessBitmask" expires_after="2026-05-24"> <owner>schwering@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3385,7 +3385,7 @@ </histogram> <histogram name="Autofill.DriverRouter.TriggerFormExtractionExcept.FrameCount" - units="frames" expires_after="2026-03-22"> + units="frames" expires_after="2026-05-24"> <owner>vincb@google.com</owner> <owner>schwering@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -4580,7 +4580,7 @@ </histogram> <histogram name="Autofill.iOS.FormSubmission.IsProgrammatic" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>eic@google.com</owner> <owner>vincb@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -4595,7 +4595,7 @@ </histogram> <histogram name="Autofill.iOS.FormSubmission.Outcome.InvalidFormReason" - enum="InvalidSubmittedFormReasonIOS" expires_after="2026-03-22"> + enum="InvalidSubmittedFormReasonIOS" expires_after="2026-05-24"> <owner>eic@google.com</owner> <owner>vincb@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -4607,7 +4607,7 @@ </histogram> <histogram name="Autofill.iOS.FormSubmission.OutcomeV2" - enum="FormSubmissionOutcomeIOS" expires_after="2026-03-22"> + enum="FormSubmissionOutcomeIOS" expires_after="2026-05-24"> <owner>eic@google.com</owner> <owner>vincb@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -4798,7 +4798,7 @@ </histogram> <histogram name="Autofill.Leipzig.FillingAssistanceCategory" - enum="AutofillCategoryResolvedFillingAssistance" expires_after="2026-03-22"> + enum="AutofillCategoryResolvedFillingAssistance" expires_after="2026-05-24"> <owner>koerber@chromium.org</owner> <owner>fleimgruber@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -4809,7 +4809,7 @@ </histogram> <histogram name="Autofill.Leipzig.FillingCorrectness.{Category}" - enum="BooleanAutofillFillingCorrectness" expires_after="2026-03-22"> + enum="BooleanAutofillFillingCorrectness" expires_after="2026-05-24"> <owner>koerber@chromium.org</owner> <owner>fleimgruber@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -6247,7 +6247,7 @@ </histogram> <histogram name="Autofill.ProfileTokenQuality.{Type}" units="Percents" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -8874,7 +8874,7 @@ </histogram> <histogram name="Autofill.WebOTP.OneTimeCode.FillDuration.FromInteraction" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>yigu@chromium.org</owner> <owner>battre@chromium.org</owner> <owner>web-identity-eng@google.com</owner> @@ -9218,7 +9218,7 @@ </histogram> <histogram name="WebDatabase.AutofillAccountStorage" - enum="WebDatabaseAutofillAccountStorageResult" expires_after="2026-03-22"> + enum="WebDatabaseAutofillAccountStorageResult" expires_after="2026-05-24"> <owner>mastiz@chromium.org</owner> <owner>droger@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/background/histograms.xml b/tools/metrics/histograms/metadata/background/histograms.xml index f87757be..42ccda4 100644 --- a/tools/metrics/histograms/metadata/background/histograms.xml +++ b/tools/metrics/histograms/metadata/background/histograms.xml
@@ -80,7 +80,7 @@ </histogram> <histogram name="BackgroundSync.Event.OneShotResultPattern" - enum="BackgroundSyncResultPattern" expires_after="2026-03-22"> + enum="BackgroundSyncResultPattern" expires_after="2026-05-24"> <owner>nator@chromium.org</owner> <owner>rayankans@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/blink/enums.xml b/tools/metrics/histograms/metadata/blink/enums.xml index 4f883c9..fb86730 100644 --- a/tools/metrics/histograms/metadata/blink/enums.xml +++ b/tools/metrics/histograms/metadata/blink/enums.xml
@@ -6361,6 +6361,7 @@ <int value="5727" label="V8Origin_FromURL_Method"/> <int value="5728" label="V8Origin_Parse_Method"/> <int value="5729" label="ExtendedTextMetrics"/> + <int value="5730" label="UseCssSizingProperties"/> </enum> <!-- LINT.ThenChange(//third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom:WebFeature) -->
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index 078a059..a6485f1 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -413,7 +413,7 @@ </histogram> <histogram name="Blink.Canvas.MaximumInflightResources" - units="canvas resources" expires_after="2026-03-22"> + units="canvas resources" expires_after="2026-05-24"> <owner>aaronhk@chromium.org</owner> <owner>fserb@chromium.org</owner> <summary> @@ -994,7 +994,7 @@ </histogram> <histogram name="Blink.DecodedImage.AvifDensity.KiBWeighted2" - units="0.01 bits per pixel" expires_after="2026-03-22"> + units="0.01 bits per pixel" expires_after="2026-05-24"> <owner>wtc@google.com</owner> <owner>jzern@google.com</owner> <owner> @@ -1515,7 +1515,7 @@ </histogram> <histogram name="Blink.FedCm.Button.LoadingDialogResult" - enum="FedCmLoadingDialogResult" expires_after="2026-03-22"> + enum="FedCmLoadingDialogResult" expires_after="2026-05-24"> <owner>tanzachary@chromium.org</owner> <owner>web-identity-eng@google.com</owner> <summary> @@ -2641,7 +2641,7 @@ </histogram> <histogram name="Blink.Fonts.FontServiceThread.OpenStreamTime" - units="microseconds" expires_after="2026-03-01"> + units="microseconds" expires_after="2026-05-24"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -4310,7 +4310,7 @@ </histogram> <histogram name="Blink.Network.ParseDataURLTime{Type}{CharacterCount}" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>nidhijaju@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -5605,7 +5605,7 @@ </histogram> <histogram name="Blink.UseCounter.FeaturePolicy.Header" - enum="FeaturePolicyFeature" expires_after="2026-03-22"> + enum="FeaturePolicyFeature" expires_after="2026-05-24"> <owner>iclelland@chromium.org</owner> <owner>feature-control@chromium.org</owner> <summary> @@ -5674,7 +5674,7 @@ </histogram> <histogram name="Blink.UseCounter.PermissionsPolicy.Allow2" - enum="FeaturePolicyFeature" expires_after="2026-03-09"> + enum="FeaturePolicyFeature" expires_after="2026-05-24"> <owner>iclelland@chromium.org</owner> <owner>feature-control@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/bookmarks/histograms.xml b/tools/metrics/histograms/metadata/bookmarks/histograms.xml index e99e2fd5..a58a872 100644 --- a/tools/metrics/histograms/metadata/bookmarks/histograms.xml +++ b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
@@ -210,7 +210,7 @@ <histogram name="Bookmarks.BookmarkBar.NavigationOrActivationToFirstContentfulPaint" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>robertlin@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -235,7 +235,7 @@ <histogram name="Bookmarks.BookmarkBar.NavigationOrActivationToLargestContentfulPaint" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>robertlin@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -257,7 +257,7 @@ </histogram> <histogram name="Bookmarks.BookmarkBar.Shown" enum="BooleanShown" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>amelies@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -298,7 +298,7 @@ </histogram> <histogram name="Bookmarks.BookmarksBar.DragDropType" - enum="BookmarkBarDragDropType" expires_after="2026-03-22"> + enum="BookmarkBarDragDropType" expires_after="2026-05-24"> <owner>dfried@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -366,7 +366,7 @@ </histogram> <histogram name="Bookmarks.EditLocation" enum="BookmarkLaunchLocation" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dfried@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -389,7 +389,7 @@ </histogram> <histogram name="Bookmarks.EntryPoint" enum="BookmarksEntryPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ianwen@chromium.org</owner> <summary>How users add a new bookmark.</summary> </histogram> @@ -528,7 +528,7 @@ </histogram> <histogram name="Bookmarks.OpenBookmarkTimeInterval2.{BookmarkType}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wylieb@google.com</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -565,7 +565,7 @@ </histogram> <histogram name="Bookmarks.Opened.TimeSinceLastUsed" units="days" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wylieb@google.com</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -709,7 +709,7 @@ </histogram> <histogram name="Bookmarks.Storage.TimeToLoadAtStartup2" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wylieb@google.com</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -904,7 +904,7 @@ </histogram> <histogram name="Bookmarks.Utilization.OnProfileLoad.TotalUnused" - units="Bookmarks" expires_after="2026-03-22"> + units="Bookmarks" expires_after="2026-05-24"> <owner>wylieb@google.com</owner> <owner>chrome-collections@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/browser/histograms.xml b/tools/metrics/histograms/metadata/browser/histograms.xml index 178fc6e..0bd1ffe 100644 --- a/tools/metrics/histograms/metadata/browser/histograms.xml +++ b/tools/metrics/histograms/metadata/browser/histograms.xml
@@ -547,7 +547,7 @@ </histogram> <histogram name="Browser.ERP.SingleRequestPayloadSize" units="bytes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>djzhang@google.com</owner> <owner>jdudder@google.com</owner> <owner>cros-reporting-team@google.com</owner> @@ -1251,7 +1251,7 @@ <histogram name="BrowserRenderProcessHost.AvailableMemoryBeforeCreation.SpareRenderer" - units="MB" expires_after="2026-03-22"> + units="MB" expires_after="2026-05-24"> <owner>gjc@google.com</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1262,7 +1262,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.BlockedByFilterURL" - enum="RenderProcessHostBlockedURLReason" expires_after="2026-02-05"> + enum="RenderProcessHostBlockedURLReason" expires_after="2026-05-24"> <owner>creis@chromium.org</owner> <owner>site-isolation-dev@chromium.org</owner> <summary> @@ -1548,7 +1548,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.SpareProcessEvictedOtherSpare" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>jam@chromium.org</owner> <owner>cduvall@chromium.org</owner> <summary> @@ -1559,7 +1559,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.SpareProcessMaybeTakeAction" - enum="SpareProcessMaybeTakeAction" expires_after="2026-03-22"> + enum="SpareProcessMaybeTakeAction" expires_after="2026-05-24"> <owner>alexmos@chromium.org</owner> <owner>lukasza@chromium.org</owner> <summary> @@ -1619,7 +1619,7 @@ </histogram> <histogram name="BrowserRenderProcessHost.SpareProcessStartupTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kerenzhu@chromium.org</owner> <owner>dayeung@chromium.org</owner> <owner>robliao@chromium.org</owner> @@ -1741,7 +1741,7 @@ <histogram name="BrowserRenderProcessHost.SubframeProcessReuseThreshold.TotalFrames" - units="frames" expires_after="2026-03-22"> + units="frames" expires_after="2026-05-24"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <owner>wjmaclean@chromium.org</owner> @@ -2158,7 +2158,7 @@ </histogram> <histogram name="{SidePanelType}.OpenDuration" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>corising@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -2183,7 +2183,7 @@ </histogram> <histogram name="{SidePanelType}.OpenTrigger" enum="SidePanelOpenTrigger" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>corising@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -2253,7 +2253,7 @@ </histogram> <histogram name="{SidePanelType}.{SidePanelEntry}.ShownDuration" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>corising@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -2266,7 +2266,7 @@ </histogram> <histogram name="{SidePanelType}.{SidePanelEntry}.ShowTriggered" - enum="SidePanelOpenTrigger" expires_after="2026-03-22"> + enum="SidePanelOpenTrigger" expires_after="2026-05-24"> <owner>corising@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chrome/histograms.xml b/tools/metrics/histograms/metadata/chrome/histograms.xml index 493d2b88..1672190 100644 --- a/tools/metrics/histograms/metadata/chrome/histograms.xml +++ b/tools/metrics/histograms/metadata/chrome/histograms.xml
@@ -192,7 +192,7 @@ </histogram> <histogram name="Chrome.KAnonymityService.JoinSet.Action" - enum="KAnonymityServiceJoinSetAction" expires_after="2026-03-22"> + enum="KAnonymityServiceJoinSetAction" expires_after="2026-05-24"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <summary> @@ -216,7 +216,7 @@ </histogram> <histogram name="Chrome.KAnonymityService.QuerySet.Action" - enum="KAnonymityServiceQuerySetAction" expires_after="2026-03-22"> + enum="KAnonymityServiceQuerySetAction" expires_after="2026-05-24"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <summary> @@ -241,7 +241,7 @@ </histogram> <histogram name="Chrome.KAnonymityService.QuerySet.Size" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <summary> @@ -481,7 +481,7 @@ </histogram> <histogram name="ChromeColors.ColorOnLoad" enum="ChromeColorsInfo" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index d68e82c..9444929 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -1164,7 +1164,7 @@ </histogram> <histogram name="ChromeOS.CountryCode.MissingVariationData" - enum="ChromeOSFallbackCountry" expires_after="2026-03-20"> + enum="ChromeOSFallbackCountry" expires_after="2026-05-24"> <owner>cschlosser@chromium.org</owner> <owner>chromeos-privacyhub@google.com</owner> <owner>chrome-regionalcapabilities@google.com</owner> @@ -1180,7 +1180,7 @@ </histogram> <histogram name="ChromeOS.CountryCode.VPDRegionSplittingOutcome" - enum="BooleanSuccess" expires_after="2026-03-20"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>cschlosser@chromium.org</owner> <owner>chromeos-privacyhub@google.com</owner> <owner>chrome-regionalcapabilities@google.com</owner> @@ -1294,7 +1294,7 @@ </histogram> <histogram name="ChromeOS.CWP.{PPath}.{PType}" units="failures" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>raging@google.com</owner> <owner>chromeos-memory@google.com</owner> <summary> @@ -2031,7 +2031,7 @@ </histogram> <histogram name="ChromeOS.Inputs.AttachmentType.{Form}" enum="AttachmentType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wmahon@google.com</owner> <owner>chromeos-tango@google.com</owner> <owner>cros-device-enablement@google.com</owner> @@ -2726,7 +2726,7 @@ </histogram> <histogram name="ChromeOS.Liveness.PingResult" enum="BooleanSuccess" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>iby@google.com</owner> <owner>xiyuan@google.com</owner> <summary> @@ -3700,7 +3700,7 @@ <histogram name="ChromeOS.Settings.Device.Keyboard.{KeyboardType}.Modifiers.{Modifier}RemappedTo.Changed" - enum="KeyboardModifierRemappingKeys" expires_after="2026-03-22"> + enum="KeyboardModifierRemappingKeys" expires_after="2026-05-24"> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -3752,7 +3752,7 @@ <histogram name="ChromeOS.Settings.Device.Keyboard.{KeyboardType}.SixPackKeys.{Key}.Changed" - enum="SixPackKeyModifier" expires_after="2026-03-22"> + enum="SixPackKeyModifier" expires_after="2026-05-24"> <owner>michaelcheco@google.com</owner> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> @@ -3777,7 +3777,7 @@ <histogram name="ChromeOS.Settings.Device.Keyboard.{KeyboardType}.SixPackKeys.{Key}.Initial" - enum="SixPackKeyModifier" expires_after="2026-03-22"> + enum="SixPackKeyModifier" expires_after="2026-05-24"> <owner>michaelcheco@google.com</owner> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml index 8e6ca62..ead93ad4 100644 --- a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
@@ -362,7 +362,7 @@ </histogram> <histogram name="ChromeOS.Settings.Display.NewDisplayConnected" - enum="DisplayType" expires_after="2026-03-22"> + enum="DisplayType" expires_after="2026-05-24"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -384,7 +384,7 @@ </histogram> <histogram name="ChromeOS.Settings.Display.{DisplayType}" - enum="DisplaySettingsType" expires_after="2026-03-22"> + enum="DisplaySettingsType" expires_after="2026-05-24"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -651,7 +651,7 @@ </histogram> <histogram name="ChromeOS.Settings.MagicBoost.LobsterEnabled" - enum="BooleanToggled" expires_after="2026-03-22"> + enum="BooleanToggled" expires_after="2026-05-24"> <owner>curtismcmullan@google.com</owner> <owner>hdchuong@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/collaboration_service/histograms.xml b/tools/metrics/histograms/metadata/collaboration_service/histograms.xml index 50bd446..e21c1f5 100644 --- a/tools/metrics/histograms/metadata/collaboration_service/histograms.xml +++ b/tools/metrics/histograms/metadata/collaboration_service/histograms.xml
@@ -83,7 +83,7 @@ <histogram name="CollaborationService.LeaveOrDeleteFlow.EntryPoint" enum="CollaborationServiceLeaveOrDeleteEntryPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>haileywang@google.com</owner> <owner>chrome-tab-group-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml index f952db6..9160bc88 100644 --- a/tools/metrics/histograms/metadata/commerce/histograms.xml +++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -227,7 +227,7 @@ </histogram> <histogram name="Commerce.Discounts.DiscountBubble.SourceTypeOnShow" - enum="DiscountType" expires_after="2026-03-22"> + enum="DiscountType" expires_after="2026-05-24"> <owner>ihsuanchen@google.com</owner> <owner>chrome-shopping@google.com</owner> <summary> @@ -247,7 +247,7 @@ </histogram> <histogram name="Commerce.Discounts.DiscountsBubble.SourceTypeOnCopy" - enum="DiscountType" expires_after="2026-03-22"> + enum="DiscountType" expires_after="2026-05-24"> <owner>ihsuanchen@google.com</owner> <owner>chrome-shopping@google.com</owner> <summary> @@ -312,7 +312,7 @@ </histogram> <histogram name="Commerce.Discounts.PageActionIcon.SourceTypeOnShown" - enum="DiscountType" expires_after="2026-03-22"> + enum="DiscountType" expires_after="2026-05-24"> <owner>ihsuanchen@google.com</owner> <owner>chrome-shopping@google.com</owner> <summary> @@ -469,7 +469,7 @@ </histogram> <histogram name="Commerce.PDPNavigation.{FeatureName}.IneligibilityReason" - enum="ShoppingFeatureIneligibilityReason" expires_after="2026-03-22"> + enum="ShoppingFeatureIneligibilityReason" expires_after="2026-05-24"> <owner>ayman@chromium.org</owner> <owner>mdjones@chromium.org</owner> <owner>chrome-shopping@google.com</owner> @@ -727,7 +727,7 @@ </histogram> <histogram name="Commerce.PriceTracking.EmailNotificationsEnabled" - enum="PriceNotificationEmailState" expires_after="2026-03-22"> + enum="PriceNotificationEmailState" expires_after="2026-05-24"> <owner>ayman@chromium.org</owner> <owner>mdjones@chromium.org</owner> <owner>chrome-shopping@google.org</owner>
diff --git a/tools/metrics/histograms/metadata/compose/histograms.xml b/tools/metrics/histograms/metadata/compose/histograms.xml index fc7ec93..0b40e156 100644 --- a/tools/metrics/histograms/metadata/compose/histograms.xml +++ b/tools/metrics/histograms/metadata/compose/histograms.xml
@@ -38,7 +38,7 @@ </variants> <histogram name="Compose.ContextMenu.CTR" enum="ComposeContextMenuCtrEvent" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sophey@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -71,7 +71,7 @@ </histogram> <histogram name="Compose.ContextMenu.ShowStatus" enum="ComposeShowStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sophey@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -156,7 +156,7 @@ </histogram> <histogram name="Compose.ProactiveNudge.CTR" enum="ComposeNudgeCtrEvent" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>perrier@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -179,7 +179,7 @@ </histogram> <histogram name="Compose.ProactiveNudge.ShowStatus" enum="ComposeShowStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>perrier@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -296,7 +296,7 @@ </histogram> <histogram name="Compose.{ComposeEvalLocation}Request.Duration.Ok" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>perrier@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -341,7 +341,7 @@ </histogram> <histogram name="Compose.{ComposeEvalLocation}Request.Status" - enum="ComposeRequestStatus" expires_after="2026-03-22"> + enum="ComposeRequestStatus" expires_after="2026-05-24"> <owner>cuianthony@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -373,7 +373,7 @@ </histogram> <histogram name="Compose.{ComposeEvalLocation}Session.CloseReason" - enum="ComposeSessionCloseReasonType" expires_after="2026-03-22"> + enum="ComposeSessionCloseReasonType" expires_after="2026-05-24"> <owner>petewil@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -388,7 +388,7 @@ <histogram name="Compose.{ComposeEvalLocation}Session.ComposeCount.{FinalStatus}" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>perrier@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -403,7 +403,7 @@ <histogram name="Compose.{ComposeEvalLocation}Session.DialogShownCount.{FinalStatus}" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>perrier@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -419,7 +419,7 @@ </histogram> <histogram name="Compose.{ComposeEvalLocation}Session.Duration.{SessionType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>perrier@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary> @@ -438,7 +438,7 @@ </histogram> <histogram name="Compose.{ComposeEvalLocation}Session.EventCounts" - enum="ComposeSessionEventTypes" expires_after="2026-03-22"> + enum="ComposeSessionEventTypes" expires_after="2026-05-24"> <owner>perrier@chromium.org</owner> <owner>chrome-compose-frontend@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/compositing/histograms.xml b/tools/metrics/histograms/metadata/compositing/histograms.xml index fd9e306..a2eedf2 100644 --- a/tools/metrics/histograms/metadata/compositing/histograms.xml +++ b/tools/metrics/histograms/metadata/compositing/histograms.xml
@@ -111,7 +111,7 @@ </histogram> <histogram name="Compositing.Browser.LayersUpdateTime" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>pdr@chromium.org</owner> <owner>animations-dev@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -383,7 +383,7 @@ </histogram> <histogram name="Compositing.Display.Draw.Occlusion.Calculation.Time" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>yiyix@chromium.org</owner> <owner>chromeos-gfx@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -412,7 +412,7 @@ </histogram> <histogram name="Compositing.Display.DrawToSwapUs" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -840,7 +840,7 @@ </histogram> <histogram name="Compositing.TileManager.TileInvalidationArea" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>petermcneeley@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/contextual_cueing/histograms.xml b/tools/metrics/histograms/metadata/contextual_cueing/histograms.xml index 6feeab9..60c8348 100644 --- a/tools/metrics/histograms/metadata/contextual_cueing/histograms.xml +++ b/tools/metrics/histograms/metadata/contextual_cueing/histograms.xml
@@ -57,7 +57,7 @@ </histogram> <histogram name="ContextualCueing.GlicSuggestions.MesFetchLatency" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sophiechang@chromium.org</owner> <owner>zekunjiang@google.com</owner> <summary> @@ -69,7 +69,7 @@ <histogram name="ContextualCueing.GlicSuggestions.PageContextFetchlatency.{PageContextType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>zekunjiang@google.com</owner> <owner>rajendrant@google.com</owner> <owner>sophiechang@chromium.org</owner> @@ -119,7 +119,7 @@ <histogram name="ContextualCueing.GlicSuggestions.SuggestionsFetchLatency.{ResultType}{EngagementType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>sophiechang@chromium.org</owner> <owner>zekunjiang@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/contextual_search/histograms.xml b/tools/metrics/histograms/metadata/contextual_search/histograms.xml index d01fbb1d..8f8960eb 100644 --- a/tools/metrics/histograms/metadata/contextual_search/histograms.xml +++ b/tools/metrics/histograms/metadata/contextual_search/histograms.xml
@@ -158,7 +158,7 @@ <histogram name="ContextualSearch.Query.Time.ToSubmission.{ContextualSearchSource}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hujasonx@google.com</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -189,7 +189,7 @@ <histogram name="ContextualSearch.Session.Duration.{Status}.{ContextualSearchSource}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hujasonx@google.com</owner> <owner>chrome-desktop-search@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml index 3149930..a10a1e7a 100644 --- a/tools/metrics/histograms/metadata/cookie/histograms.xml +++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -109,7 +109,7 @@ </histogram> <histogram name="Cookie.CookieJarSize" units="kibibytes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -144,7 +144,7 @@ </histogram> <histogram name="Cookie.CookieSchemeRequestScheme" enum="CookieRequestScheme" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>miketaylr@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -630,7 +630,7 @@ </histogram> <histogram name="Cookie.MaxSameSiteNoneCookiesPerKey" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -702,7 +702,7 @@ </histogram> <histogram name="Cookie.PartitionCount" units="partitions" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -725,7 +725,7 @@ </histogram> <histogram name="Cookie.PartitionedCookieCount" units="cookies" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -751,7 +751,7 @@ </histogram> <histogram name="Cookie.PartitionedCookieJarSizeKibibytes" units="kibibytes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -762,7 +762,7 @@ </histogram> <histogram name="Cookie.PartitionedCookieJarSizeKibibytes.{NonceType}" - units="kibibytes" expires_after="2026-03-22"> + units="kibibytes" expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -778,7 +778,7 @@ </histogram> <histogram name="Cookie.PartitionedCookiesInRequest" units="cookies" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -1058,7 +1058,7 @@ </histogram> <histogram name="Cookie.SetCookieContainsPartitioned" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dylancutler@google.com</owner> <owner>src/net/cookies/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cras/histograms.xml b/tools/metrics/histograms/metadata/cras/histograms.xml index 4146b55..816aa5f 100644 --- a/tools/metrics/histograms/metadata/cras/histograms.xml +++ b/tools/metrics/histograms/metadata/cras/histograms.xml
@@ -745,7 +745,7 @@ </histogram> <histogram name="Cras.MissedCallbackFrequencyInput" units="count" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -1025,7 +1025,7 @@ </histogram> <histogram name="Cras.StreamCreateError" enum="CrasStreamCreateError" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>hychao@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary>Record the errors happen when CRAS server creats a stream.</summary> @@ -1215,7 +1215,7 @@ </histogram> <histogram name="Cras.UnderrunsPerDeviceDuringAPNC{Device}" units="count" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -1226,7 +1226,7 @@ </histogram> <histogram name="Cras.UnderrunsPerDevice{Device}" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cros/histograms.xml b/tools/metrics/histograms/metadata/cros/histograms.xml index c6290e3..6f5c9197 100644 --- a/tools/metrics/histograms/metadata/cros/histograms.xml +++ b/tools/metrics/histograms/metadata/cros/histograms.xml
@@ -35,7 +35,7 @@ </histogram> <histogram name="CrosDisks.ArchiveType" enum="CrosDisksArchiveType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -44,7 +44,7 @@ </histogram> <histogram name="CrosDisks.DeviceMediaType" enum="CrosDisksDeviceMediaType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -54,7 +54,7 @@ </histogram> <histogram name="CrosDisks.Error.Fuse.PrematureTermination.{FileSystem}" - enum="DaemonError" expires_after="2026-03-22"> + enum="DaemonError" expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -76,7 +76,7 @@ </histogram> <histogram name="CrosDisks.Error.Fuse.Start.archive" enum="FuseArchiveError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -104,7 +104,7 @@ </histogram> <histogram name="CrosDisks.Error.Fuse.Start.{FileSystem}" enum="DaemonError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -122,7 +122,7 @@ </histogram> <histogram name="CrosDisks.Error.{Action}.{FileSystem}" enum="DaemonError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -140,7 +140,7 @@ </histogram> <histogram name="CrosDisks.Error.{SysCall}.{FileSystem}" enum="PopularOSErrno" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -176,7 +176,7 @@ </histogram> <histogram name="CrosDisks.FilesystemType" enum="CrosDisksFilesystemType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -186,7 +186,7 @@ </histogram> <histogram name="CrosDisks.ReadOnlyFileSystemAfterError" - enum="CrosDisksFilesystemType" expires_after="2026-03-22"> + enum="CrosDisksFilesystemType" expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -217,7 +217,7 @@ </histogram> <histogram name="CrosDisks.Time.Fuse.PrematureTermination.{FileSystem}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -239,7 +239,7 @@ </histogram> <histogram name="CrosDisks.Time.Fuse.Start.{FileSystem}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -259,7 +259,7 @@ </histogram> <histogram name="CrosDisks.Time.{Action}.{FileSystem}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary>Time taken by the program {Action} {FileSystem} partition.</summary> @@ -275,7 +275,7 @@ </histogram> <histogram name="CrosDisks.Time.{SysCall}.{FileSystem}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -311,7 +311,7 @@ </histogram> <histogram name="CrosDisksClient.FormatCompletedError" - enum="CrosDisksClientFormatError" expires_after="2026-03-22"> + enum="CrosDisksClientFormatError" expires_after="2026-05-24"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -321,7 +321,7 @@ </histogram> <histogram name="CrosDisksClient.FormatTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -330,7 +330,7 @@ </histogram> <histogram name="CrosDisksClient.MountCompletedError" - enum="CrosDisksClientMountError" expires_after="2026-03-22"> + enum="CrosDisksClientMountError" expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -340,7 +340,7 @@ </histogram> <histogram name="CrosDisksClient.MountErrorMountType" - enum="CrosDisksMountTypeError" expires_after="2026-03-22"> + enum="CrosDisksMountTypeError" expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -350,7 +350,7 @@ </histogram> <histogram name="CrosDisksClient.MountTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -359,7 +359,7 @@ </histogram> <histogram name="CrosDisksClient.UnmountError" enum="CrosDisksClientMountError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -369,7 +369,7 @@ </histogram> <histogram name="CrosDisksClient.UnmountTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cros_ml/histograms.xml b/tools/metrics/histograms/metadata/cros_ml/histograms.xml index f377472..9fb0f10 100644 --- a/tools/metrics/histograms/metadata/cros_ml/histograms.xml +++ b/tools/metrics/histograms/metadata/cros_ml/histograms.xml
@@ -60,7 +60,7 @@ </variants> <histogram name="MachineLearningService.CpuUsageMilliPercent" - units="1/1000ths of %" expires_after="2026-03-22"> + units="1/1000ths of %" expires_after="2026-05-24"> <owner>alanlxl@chromium.org</owner> <owner>amoylan@chromium.org</owner> <summary> @@ -256,7 +256,7 @@ </histogram> <histogram name="MachineLearningService.ProcessError" - enum="MachineLearningServiceProcessError" expires_after="2026-03-22"> + enum="MachineLearningServiceProcessError" expires_after="2026-05-24"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary> @@ -315,7 +315,7 @@ <histogram name="MachineLearningService.WebPlatformHandwritingModel.LoadModelResult.Event" enum="MachineLearningServiceLoadHandwritingModelResultEvent" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary> @@ -336,7 +336,7 @@ </histogram> <histogram name="MachineLearningService.WorkerProcessCleanUpTime" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>alanlxl@chromium.org</owner> <owner>amoylan@chromium.org</owner> <summary> @@ -383,7 +383,7 @@ <histogram name="MachineLearningService.{ModelName}.LoadModelResult.Event" enum="MachineLearningServiceLoadModelResultEvent" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary> @@ -407,7 +407,7 @@ </histogram> <histogram name="MachineLearningService.{RequestName}.CpuTimeMicrosec" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary> @@ -419,7 +419,7 @@ </histogram> <histogram name="MachineLearningService.{RequestName}.TotalMemoryDeltaKb" - units="KB" expires_after="2026-03-22"> + units="KB" expires_after="2026-05-24"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary>Memory usage increase caused by {RequestName} request.</summary>
diff --git a/tools/metrics/histograms/metadata/cryptohome/histograms.xml b/tools/metrics/histograms/metadata/cryptohome/histograms.xml index da2eb8c..7274337 100644 --- a/tools/metrics/histograms/metadata/cryptohome/histograms.xml +++ b/tools/metrics/histograms/metadata/cryptohome/histograms.xml
@@ -133,7 +133,7 @@ </histogram> <histogram name="Cryptohome.Errors" enum="CryptohomeError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>apronin@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> <summary>Cryptohome errors.</summary> @@ -440,7 +440,7 @@ </histogram> <histogram name="Cryptohome.TimeToGenerateEccAuthValue" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yich@google.com</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -589,7 +589,7 @@ </histogram> <histogram name="Cryptohome.{Action}AuthBlockType" - enum="CryptohomeAuthBlockType" expires_after="2026-03-22"> + enum="CryptohomeAuthBlockType" expires_after="2026-05-24"> <owner>yich@google.com</owner> <owner>cros-hwsec+uma@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml index dadacf2..372e292 100644 --- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml +++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -258,7 +258,7 @@ </histogram> <histogram name="CustomTabs.ClientAppId" enum="ClientAppId" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yusufo@chromium.org</owner> <summary> Android: AppId declared by the launching application in EXTRA_APPLICATION_ID @@ -290,7 +290,7 @@ </histogram> <histogram name="CustomTabs.CloseCause" enum="CustomTabsCloseCause" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jinsukkim@chromium.org</owner> <owner>twellington@chromium.org</owner> <owner>cct-team@google.com</owner> @@ -939,7 +939,7 @@ </histogram> <histogram name="CustomTabs.WarmupStateOnLaunch" enum="WarmupStateOnLaunch" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lizeb@chromium.org</owner> <summary> Recorded only on Android. Reports whether warmup() has been called when a
diff --git a/tools/metrics/histograms/metadata/data/histograms.xml b/tools/metrics/histograms/metadata/data/histograms.xml index ab86226..68a0ff3 100644 --- a/tools/metrics/histograms/metadata/data/histograms.xml +++ b/tools/metrics/histograms/metadata/data/histograms.xml
@@ -117,7 +117,7 @@ </histogram> <histogram name="DataUse.BytesSent3.Delegate" units="bytes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>curranmax@chromium.org</owner> <owner>ryansturm@chromium.org</owner> <owner>spelchat@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/dev/histograms.xml b/tools/metrics/histograms/metadata/dev/histograms.xml index 40fa378d..3627f97 100644 --- a/tools/metrics/histograms/metadata/dev/histograms.xml +++ b/tools/metrics/histograms/metadata/dev/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="DevTools.ActionTaken" enum="DevToolsAction" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yangguo@google.com</owner> <owner>bmeurer@google.com</owner> <summary>Specified DevTools action has been taken.</summary> @@ -48,7 +48,7 @@ </histogram> <histogram name="DevTools.CDPCommandFrom{ClientType}" enum="CDPCommands" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wolfi@google.com</owner> <owner>danilsomsikov@google.com</owner> <owner>yangguo@google.com</owner> @@ -130,7 +130,7 @@ </histogram> <histogram name="DevTools.ExperimentDisabled" enum="DevtoolsExperiments" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yangguo@google.com</owner> <owner>changhaohan@google.com</owner> <summary> @@ -148,7 +148,7 @@ </histogram> <histogram name="DevTools.ExperimentEnabled" enum="DevtoolsExperiments" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yangguo@google.com</owner> <owner>changhaohan@google.com</owner> <summary> @@ -157,7 +157,7 @@ </histogram> <histogram name="DevTools.ExperimentEnabledAtLaunch" enum="DevtoolsExperiments" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yangguo@google.com</owner> <owner>changhaohan@google.com</owner> <summary> @@ -356,7 +356,7 @@ </histogram> <histogram name="DevTools.PanelShown" enum="DevToolsPanel" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yangguo@google.com</owner> <owner>bmeurer@google.com</owner> <summary>Specified DevTools panel was shown.</summary>
diff --git a/tools/metrics/histograms/metadata/disk/histograms.xml b/tools/metrics/histograms/metadata/disk/histograms.xml index d017fec..97af225f 100644 --- a/tools/metrics/histograms/metadata/disk/histograms.xml +++ b/tools/metrics/histograms/metadata/disk/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="DiskCache.0.Error" enum="DiskCacheError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wfh@chromium.org</owner> <owner>src/net/disk_cache/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/download/histograms.xml b/tools/metrics/histograms/metadata/download/histograms.xml index f196234..61277d9 100644 --- a/tools/metrics/histograms/metadata/download/histograms.xml +++ b/tools/metrics/histograms/metadata/download/histograms.xml
@@ -228,7 +228,7 @@ </histogram> <histogram name="Download.Bubble.SubpageAction" - enum="DownloadBubbleSubpageAction" expires_after="2026-03-22"> + enum="DownloadBubbleSubpageAction" expires_after="2026-05-24"> <owner>chlily@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -755,7 +755,7 @@ </histogram> <histogram name="Download.Open.ContentType" enum="DownloadContentType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml index b8e4844..6e0f0794 100644 --- a/tools/metrics/histograms/metadata/enterprise/histograms.xml +++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -1000,7 +1000,7 @@ </histogram> <histogram name="Enterprise.DeviceSignals.Collection.{Variant}" - enum="DeviceSignalsSignalName" expires_after="2026-02-10"> + enum="DeviceSignalsSignalName" expires_after="2026-05-24"> <owner>seblalancette@chromium.org</owner> <owner>cbe-device-trust-eng@google.com</owner> <summary> @@ -1744,7 +1744,7 @@ </histogram> <histogram name="Enterprise.Dlp.ReportedBlockLevelRestriction" - enum="EnterpriseDlpPolicyRestriction" expires_after="2026-03-22"> + enum="EnterpriseDlpPolicyRestriction" expires_after="2026-05-24"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1754,7 +1754,7 @@ </histogram> <histogram name="Enterprise.Dlp.ReportedEventStatus" enum="GoogleRpcCode" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1763,7 +1763,7 @@ </histogram> <histogram name="Enterprise.Dlp.ReportedReportLevelRestriction" - enum="EnterpriseDlpPolicyRestriction" expires_after="2026-03-22"> + enum="EnterpriseDlpPolicyRestriction" expires_after="2026-05-24"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1949,7 +1949,7 @@ </histogram> <histogram name="Enterprise.DMServerRequestSuccess{EnterpriseDMServerRequest}" - enum="EnterpriseDMServerRequestSuccess" expires_after="2026-03-22"> + enum="EnterpriseDMServerRequestSuccess" expires_after="2026-05-24"> <owner>rbock@google.com</owner> <owner>chromeos-commercial-remote-management@google.com</owner> <owner>managed-devices@google.com</owner> @@ -2409,7 +2409,7 @@ </histogram> <histogram name="Enterprise.FileAnalysisRequest.FileSize" units="KB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>eliashomsi@google.com</owner> <owner>nancylanxiao@google.com</owner> <owner>cbe-cep-eng@google.com</owner> @@ -2643,7 +2643,7 @@ <histogram name="Enterprise.MachineLevelUserCloudPolicyEnrollment.StartupDialog" enum="MachineLevelUserCloudPolicyEnrollmentStartupDialog" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>zmin@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -3014,7 +3014,7 @@ </histogram> <histogram name="Enterprise.PolicyUpdatePeriod.MachineLevelUser" units="days" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>zmin@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -3041,7 +3041,7 @@ </histogram> <histogram name="Enterprise.ProfileAffiliation.IsAffiliated" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>igorruvinov@chromium.org</owner> <owner>cbe-magic@google.com</owner> <summary> @@ -3051,7 +3051,7 @@ </histogram> <histogram name="Enterprise.ProfileAffiliation.UnaffiliatedReason" - enum="EnterpriseProfileUnaffiliatedReason" expires_after="2026-03-22"> + enum="EnterpriseProfileUnaffiliatedReason" expires_after="2026-05-24"> <owner>igorruvinov@chromium.org</owner> <owner>cbe-magic@google.com</owner> <summary> @@ -3105,7 +3105,7 @@ </histogram> <histogram name="Enterprise.PublicSession.SessionLength" units="minutes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bfranz@chromium.org</owner> <owner>chromeos-kiosk-eng@google.com</owner> <summary> @@ -3258,7 +3258,7 @@ <histogram name="Enterprise.SecondaryGoogleAccountUsage.PolicyFetch.Status" enum="SecondaryGoogleAccountUsagePolicyFetchStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rodmartin@google.com</owner> <owner>chromeos-commercial-identity@google.com</owner> <summary> @@ -3334,7 +3334,7 @@ </histogram> <histogram name="Enterprise.SkyVault.Migration.WriteAccessError" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>aidazolic@google.com</owner> <owner>src/chrome/browser/ash/policy/skyvault/OWNERS</owner> <summary> @@ -3966,7 +3966,7 @@ <histogram name="Enterprise.{ContentAnalysisProtocol}Request.{ContentAnalysisRequestType}.Result" - enum="SafeBrowsingBinaryUploadResult" expires_after="2026-03-22"> + enum="SafeBrowsingBinaryUploadResult" expires_after="2026-05-24"> <owner>nancylanxiao@google.com</owner> <owner>domfc@chromium.org</owner> <owner>cbe-cep-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/event/histograms.xml b/tools/metrics/histograms/metadata/event/histograms.xml index 2f5c825f..0565f73 100644 --- a/tools/metrics/histograms/metadata/event/histograms.xml +++ b/tools/metrics/histograms/metadata/event/histograms.xml
@@ -92,7 +92,7 @@ <histogram name="Event.DownEventCount.PerInputFormFactorDestinationCombination2" enum="DownEventInputFormFactorDestinationCombination2" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tbuckley@chromium.org</owner> <summary> The number of down events received per destination, input and form factor @@ -553,7 +553,7 @@ </histogram> <histogram name="Event.ScrollJank.DelayedFramesPercentage.PerScroll" units="%" - expires_after="2026-05-17"> + expires_after="2026-05-24"> <owner>kartarsingh@google.com</owner> <owner>jonross@chromium.org</owner> <owner>woa-performance-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml index 7202eb2..ca23d746 100644 --- a/tools/metrics/histograms/metadata/extensions/histograms.xml +++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -2578,7 +2578,7 @@ </histogram> <histogram name="Extensions.Functions.DidSandboxedExtensionAPICall" - enum="Boolean" expires_after="2026-02-01"> + enum="Boolean" expires_after="2026-05-24"> <owner>wjmaclean@chromium.org</owner> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> @@ -2607,7 +2607,7 @@ </histogram> <histogram name="Extensions.Functions.ExtensionMV3Calls" - enum="ExtensionFunctions" expires_after="2026-03-22"> + enum="ExtensionFunctions" expires_after="2026-05-24"> <owner>tjudkins@chromium.org</owner> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> @@ -3424,7 +3424,7 @@ </histogram> <histogram name="Extensions.LoadType2" enum="ExtensionType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4232,7 +4232,7 @@ </histogram> <histogram name="Extensions.ServiceWorkerBackground.StartWorkerStatus" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4426,7 +4426,7 @@ <histogram name="Extensions.SettingsOverridden.BackToGoogleSearchOverriddenDialogResult" - enum="SettingsOverriddenDialogResult" expires_after="2026-03-22"> + enum="SettingsOverriddenDialogResult" expires_after="2026-05-24"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4440,7 +4440,7 @@ <histogram name="Extensions.SettingsOverridden.BackToOtherSearchOverriddenDialogResult" - enum="SettingsOverriddenDialogResult" expires_after="2026-03-22"> + enum="SettingsOverriddenDialogResult" expires_after="2026-05-24"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4467,7 +4467,7 @@ <histogram name="Extensions.SettingsOverridden.GenericSearchOverriddenDialogResult" - enum="SettingsOverriddenDialogResult" expires_after="2026-03-22"> + enum="SettingsOverriddenDialogResult" expires_after="2026-05-24"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4479,7 +4479,7 @@ </histogram> <histogram name="Extensions.StartupPagesOverrides2" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rdevlin.cronin@chromium.org</owner> <owner>kelvinjiang@chromium.org</owner> <summary> @@ -4526,7 +4526,7 @@ </histogram> <histogram name="Extensions.Toolbar.InvocationSource" - enum="ExtensionActionInvocationSource" expires_after="2026-03-22"> + enum="ExtensionActionInvocationSource" expires_after="2026-05-24"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/families/histograms.xml b/tools/metrics/histograms/metadata/families/histograms.xml index 016b473..76b492e 100644 --- a/tools/metrics/histograms/metadata/families/histograms.xml +++ b/tools/metrics/histograms/metadata/families/histograms.xml
@@ -407,7 +407,7 @@ </histogram> <histogram name="FamilyLinkUser.LocalWebApprovalCompleteRequestTotalDuration" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>anthie@google.com</owner> <owner>ljjlee@google.com</owner> <owner>chrome-kids-eng@google.com</owner> @@ -432,7 +432,7 @@ </histogram> <histogram name="FamilyLinkUser.LocalWebApprovalOutcome" - enum="FamilyLinkUserLocalWebApprovalOutcome" expires_after="2026-03-22"> + enum="FamilyLinkUserLocalWebApprovalOutcome" expires_after="2026-05-24"> <owner>anthie@google.com</owner> <owner>ljjlee@google.com</owner> <owner>chrome-kids-eng@google.com</owner> @@ -444,7 +444,7 @@ </histogram> <histogram name="FamilyLinkUser.LocalWebApprovalResult" - enum="FamilyLinkUserLocalWebApprovalResult" expires_after="2026-03-22"> + enum="FamilyLinkUserLocalWebApprovalResult" expires_after="2026-05-24"> <owner>agawronska@chromium.org</owner> <owner>cros-families-eng@google.com</owner> <owner>chrome-kids-eng@google.com</owner> @@ -1013,7 +1013,7 @@ <histogram name="SupervisedUsers.SkipParentApprovalToInstallExtensions.PerRecord" - enum="SupervisedUserToggleState" expires_after="2026-01-11"> + enum="SupervisedUserToggleState" expires_after="2026-05-24"> <owner>anthie@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <owner>cros-families-eng@google.com</owner> @@ -1119,7 +1119,7 @@ </histogram> <histogram name="{RequestType}.HttpStatusOrNetError" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-22"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <owner>tju@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml index 22a33a8..de067d7 100644 --- a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml +++ b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
@@ -764,7 +764,7 @@ </histogram> <histogram name="InProductHelp.Db.TotalEvents" units="events" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>nyquist@chromium.org</owner> <summary> Records the total number of event records in the database for in-product @@ -813,7 +813,7 @@ </histogram> <histogram name="InProductHelp.NotifyEventReadyState.{IPHFeature}" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>nyquist@chromium.org</owner> <summary> Records if the model is ready when in-product help event happens for @@ -823,7 +823,7 @@ </histogram> <histogram name="InProductHelp.ShouldTriggerHelpUI.{IPHFeature}" - enum="TriggerHelpUIResult" expires_after="2026-03-22"> + enum="TriggerHelpUIResult" expires_after="2026-05-24"> <owner>nyquist@chromium.org</owner> <summary> Records if in-product help for {IPHFeature} is shown to the user, and the
diff --git a/tools/metrics/histograms/metadata/gcm/histograms.xml b/tools/metrics/histograms/metadata/gcm/histograms.xml index f33ea969..5c0948a 100644 --- a/tools/metrics/histograms/metadata/gcm/histograms.xml +++ b/tools/metrics/histograms/metadata/gcm/histograms.xml
@@ -102,7 +102,7 @@ </histogram> <histogram name="GCM.DeliveredToAppHandler{AppHandler}" enum="BooleanDelivered" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>peter@chromium.org</owner> <owner>rushans@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/geolocation/histograms.xml b/tools/metrics/histograms/metadata/geolocation/histograms.xml index bbad656..435647ee 100644 --- a/tools/metrics/histograms/metadata/geolocation/histograms.xml +++ b/tools/metrics/histograms/metadata/geolocation/histograms.xml
@@ -298,7 +298,7 @@ </histogram> <histogram name="Geolocation.NetworkLocationRequest.ResponseCode" - enum="HttpResponseCode" expires_after="2026-03-22"> + enum="HttpResponseCode" expires_after="2026-05-24"> <owner>mattreynolds@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/glic/histograms.xml b/tools/metrics/histograms/metadata/glic/histograms.xml index d165e5f8..22e4dbaa 100644 --- a/tools/metrics/histograms/metadata/glic/histograms.xml +++ b/tools/metrics/histograms/metadata/glic/histograms.xml
@@ -96,7 +96,7 @@ </histogram> <histogram name="Glic.Api.NotifyPanelWillOpen" enum="GlicWebClientMode" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <summary> @@ -136,7 +136,7 @@ </histogram> <histogram name="Glic.Api.RequestCounts.{ApiRequestType}" - enum="GlicRequestEvent" expires_after="2026-03-22"> + enum="GlicRequestEvent" expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <summary> @@ -252,7 +252,7 @@ </histogram> <histogram name="Glic.Api.{TabContextOperation}.Error.{Mode}" - enum="GlicGetContextFromTabError" expires_after="2026-03-22"> + enum="GlicGetContextFromTabError" expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>birnie@google.com</owner> @@ -331,7 +331,7 @@ </histogram> <histogram name="Glic.EntryPoint.Status" enum="GlicEntryPointStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sanaakbani@google.com</owner> <owner>iwells@google.com</owner> <summary> @@ -408,7 +408,7 @@ </histogram> <histogram name="Glic.FRE.InvocationSource" enum="GlicInvocationSource" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>cuianthony@google.com</owner> <owner>iwells@google.com</owner> <summary> @@ -512,7 +512,7 @@ </histogram> <histogram name="Glic.FreErrorStateReason" enum="FreErrorStateReason" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>birnie@google.com</owner> <owner>cuianthony@google.com</owner> <summary> @@ -522,14 +522,14 @@ </histogram> <histogram name="Glic.FreModalWebUiState.FinishState2" enum="FreWebUiState" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>cuianthony@google.com</owner> <owner>iwells@google.com</owner> <summary>Record the current state of the FRE modal when it closes.</summary> </histogram> <histogram name="Glic.FrePresentationTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dewittj@google.com</owner> <owner>vollick@google.com</owner> <owner>baranerf@google.com</owner> @@ -605,7 +605,7 @@ </histogram> <histogram name="Glic.Host.WebClientState.{Event}" - enum="GlicDetailedWebClientState" expires_after="2026-03-22"> + enum="GlicDetailedWebClientState" expires_after="2026-05-24"> <owner>harringtond@chromium.org</owner> <owner>carlosk@chromium.org</owner> <summary>Records the web client state according to the host. {Event}</summary> @@ -1119,7 +1119,7 @@ </histogram> <histogram name="Glic.MaybeReplaceNavigation.Result" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>liberato@chromium.org</owner> <summary> Records the boolean result of calling MaybeReplaceNavigation. This is used @@ -1151,7 +1151,7 @@ </histogram> <histogram name="Glic.Metrics.Error" enum="GlicMetricsError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dewittj@google.com</owner> <owner>iwells@google.com</owner> <owner>erikchen@chromium.org</owner> @@ -1162,7 +1162,7 @@ </histogram> <histogram name="Glic.Metrics.Error{Cause}" enum="GlicMetricsError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dewittj@google.com</owner> <owner>iwells@google.com</owner> <owner>erikchen@chromium.org</owner> @@ -1196,7 +1196,7 @@ </histogram> <histogram name="Glic.OsEntrypoint.Settings.Shortcut" enum="BooleanEnabled" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>agale@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -1210,7 +1210,7 @@ </histogram> <histogram name="Glic.OsEntrypoint.Settings.ShortcutStatus" - enum="BooleanEnabled" expires_after="2026-03-22"> + enum="BooleanEnabled" expires_after="2026-05-24"> <owner>erikchen@chromium.org</owner> <owner>pauladedeji@google.com</owner> <summary> @@ -1220,7 +1220,7 @@ </histogram> <histogram name="Glic.PageContextFetcher.GetAnnotatedPageContent" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1231,7 +1231,7 @@ </histogram> <histogram name="Glic.PageContextFetcher.GetEncodedScreenshot" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1242,7 +1242,7 @@ </histogram> <histogram name="Glic.PageContextFetcher.GetEncodedScreenshot.Failure" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1307,7 +1307,7 @@ </histogram> <histogram name="Glic.PanelPresentationTime2.{InputMode}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dewittj@google.com</owner> <owner>iwells@google.com</owner> <summary> @@ -1319,7 +1319,7 @@ </histogram> <histogram name="Glic.PanelWebUi.ElapsedTimeBetweenSessions" units="seconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fsenra@google.com</owner> <owner>dewittj@google.com</owner> <summary> @@ -1329,7 +1329,7 @@ </histogram> <histogram name="Glic.PanelWebUi.Size.Area" units="DIPs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fsenra@google.com</owner> <owner>dewittj@google.com</owner> <summary> @@ -1339,7 +1339,7 @@ </histogram> <histogram name="Glic.PanelWebUi.Size.Height" units="DIPs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fsenra@google.com</owner> <owner>dewittj@google.com</owner> <summary> @@ -1349,7 +1349,7 @@ </histogram> <histogram name="Glic.PanelWebUi.Size.Width" units="DIPs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fsenra@google.com</owner> <owner>dewittj@google.com</owner> <summary> @@ -1359,7 +1359,7 @@ </histogram> <histogram name="Glic.PanelWebUi.UserResizeEnded.Height" units="DIPs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fsenra@google.com</owner> <owner>iwells@google.com</owner> <summary> @@ -1369,7 +1369,7 @@ </histogram> <histogram name="Glic.PanelWebUi.UserResizeEnded.Width" units="DIPs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fsenra@google.com</owner> <owner>iwells@google.com</owner> <summary> @@ -1399,14 +1399,14 @@ </histogram> <histogram name="Glic.PanelWebUiState" enum="WebUiState" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>erikchen@chromium.org</owner> <owner>iwells@google.com</owner> <summary>Record the panel webui state any time it changes.</summary> </histogram> <histogram name="Glic.PanelWebUiState.FinishState2" enum="WebUiState" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dewittj@google.com</owner> <owner>iwells@google.com</owner> <summary>Record the current state when the the panel is closed.</summary> @@ -1434,7 +1434,7 @@ </histogram> <histogram name="Glic.PositionOnChrome.{Event}" enum="ChromeRelativePosition" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>andreaxg@google.com</owner> <owner>iwells@google.com</owner> <summary> @@ -1445,7 +1445,7 @@ </histogram> <histogram name="Glic.PositionOnDisplay.{Event}" enum="DisplayPosition" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>andreaxg@google.com</owner> <owner>iwells@google.com</owner> <summary> @@ -1457,7 +1457,7 @@ </histogram> <histogram name="Glic.Prewarming.ChecksResult" - enum="GlicPrewarmingChecksResult" expires_after="2026-03-22"> + enum="GlicPrewarmingChecksResult" expires_after="2026-05-24"> <owner>dullweber@chromium.org</owner> <owner>vollick@chromium.org</owner> <owner>jbroman@chromium.org</owner> @@ -1469,7 +1469,7 @@ </histogram> <histogram name="Glic.PrewarmingFre.{PrewarmDisposition}PreloadFreForSource" - enum="GlicPrewarmingFreSource" expires_after="2026-03-22"> + enum="GlicPrewarmingFreSource" expires_after="2026-05-24"> <owner>dewittj@chromium.org</owner> <owner>vollick@chromium.org</owner> <summary> @@ -1486,7 +1486,7 @@ </histogram> <histogram name="Glic.Response.Attached" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1519,7 +1519,7 @@ </histogram> <histogram name="Glic.Response.InputMode" enum="GlicWebClientMode" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1529,7 +1529,7 @@ </histogram> <histogram name="Glic.Response.InvocationSource" enum="GlicInvocationSource" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1540,7 +1540,7 @@ </histogram> <histogram name="Glic.Response.Rated" enum="BooleanPositive" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1551,7 +1551,7 @@ </histogram> <histogram name="Glic.Response.Segmentation" enum="GlicResponseSegmentation" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>iwells@google.com</owner> <owner>erikchen@chromium.org</owner> <summary> @@ -1560,7 +1560,7 @@ </summary> </histogram> -<histogram name="Glic.Response.StartTime" units="ms" expires_after="2026-03-22"> +<histogram name="Glic.Response.StartTime" units="ms" expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1571,7 +1571,7 @@ </histogram> <histogram name="Glic.Response.StartTime.InputMode.{Mode}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1584,7 +1584,7 @@ </histogram> <histogram name="Glic.Response.StartTime.TabContext.{ContextStatus}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1639,7 +1639,7 @@ </histogram> <histogram name="Glic.Response.TurnDuration.{Mode}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dtapuska@chromium.org</owner> <owner>erikchen@chromium.org</owner> <summary> @@ -1682,7 +1682,7 @@ </histogram> <histogram name="Glic.ScrollTo.SessionCount" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>liuwilliam@google.com</owner> <owner>adithyas@google.com</owner> <summary> @@ -1703,7 +1703,7 @@ </histogram> <histogram name="Glic.Session.AttachStateChanges" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dullweber@chromium.org</owner> <owner>erikchen@chromium.org</owner> <summary> @@ -1712,7 +1712,7 @@ </summary> </histogram> -<histogram name="Glic.Session.Duration" units="ms" expires_after="2026-03-22"> +<histogram name="Glic.Session.Duration" units="ms" expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1723,7 +1723,7 @@ </histogram> <histogram name="Glic.Session.InputModesUsed" enum="GlicInputModesUsed" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dullweber@chromium.org</owner> <owner>erikchen@chromium.org</owner> <summary> @@ -1743,7 +1743,7 @@ </histogram> <histogram name="Glic.Session.Open.Attached" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1762,7 +1762,7 @@ </histogram> <histogram name="Glic.Session.Open.InvocationSource" - enum="GlicInvocationSource" expires_after="2026-03-22"> + enum="GlicInvocationSource" expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1772,7 +1772,7 @@ </histogram> <histogram name="Glic.Session.ResponseCount" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1812,7 +1812,7 @@ </histogram> <histogram name="Glic.Sharing.ActiveTabSharingState.{Event}" - enum="ActiveTabSharingState" expires_after="2026-03-22"> + enum="ActiveTabSharingState" expires_after="2026-05-24"> <owner>harringtond@chromium.org</owner> <owner>carlosk@chromium.org</owner> <summary> @@ -1875,7 +1875,7 @@ </histogram> <histogram name="Glic.TabContext.PdfContentsRequested" enum="PdfRequestStates" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <summary> @@ -1922,7 +1922,7 @@ </histogram> <histogram name="Glic.TieredRolloutEnablementStatus" - enum="GlicTieredRolloutEnablementStatus" expires_after="2026-03-22"> + enum="GlicTieredRolloutEnablementStatus" expires_after="2026-05-24"> <owner>sophiechang@chromium.org</owner> <owner>dewittj@chromium.org</owner> <summary> @@ -2148,7 +2148,7 @@ </histogram> <histogram name="Glic.Usage.Hotkey" enum="GlicHotkeyUsage" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>erikchen@chromium.org</owner> <owner>alimariam@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml index 72b38cd..2412c58 100644 --- a/tools/metrics/histograms/metadata/gpu/histograms.xml +++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -291,7 +291,7 @@ </histogram> <histogram name="Display.MultipleDisplays.GenerateId.CollisionDetection" - enum="BooleanDisplayIdCollision" expires_after="2026-02-28"> + enum="BooleanDisplayIdCollision" expires_after="2026-05-24"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@google.com</owner> <summary> @@ -414,7 +414,7 @@ </histogram> <histogram name="GPU.ANGLE.MetalShaderCompilationTimeUs" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>geofflang@chromium.org</owner> <owner>angle-team@google.com</owner> <summary> @@ -467,7 +467,7 @@ </histogram> <histogram name="GPU.BlocklistFeatureTestResults.{GPUBlocklistPerFeature}" - enum="GPUBlocklistFeatureTestResults" expires_after="2026-03-22"> + enum="GPUBlocklistFeatureTestResults" expires_after="2026-05-24"> <owner>vmiura@chromium.org</owner> <owner>kylechar@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -552,7 +552,7 @@ </histogram> <histogram name="GPU.D3D11FeatureLevel" enum="D3D11FeatureLevel" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -562,7 +562,7 @@ </histogram> <histogram name="GPU.D3D12FeatureLevel" enum="D3D12FeatureLevel" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <summary> @@ -572,7 +572,7 @@ </histogram> <histogram name="GPU.D3D12HighestShaderModel2" enum="D3DShaderModel" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <owner>amaiorano@google.com</owner> @@ -656,7 +656,7 @@ </histogram> <histogram name="GPU.DirectComposition.DCLayerResult.Texture" - enum="DCLayerResult" expires_after="2026-03-22"> + enum="DCLayerResult" expires_after="2026-05-24"> <owner>sunnyps@chromium.org</owner> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -861,7 +861,7 @@ </histogram> <histogram name="GPU.EstablishGpuChannelSyncTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -939,7 +939,7 @@ </histogram> <histogram name="GPU.GPUInitializationTime.V4" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -1221,7 +1221,7 @@ </summary> </histogram> -<histogram name="GPU.Output.HDR" enum="Boolean" expires_after="2026-03-22"> +<histogram name="GPU.Output.HDR" enum="Boolean" expires_after="2026-05-24"> <owner>hubbe@chromium.org</owner> <owner>cassew@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> @@ -1280,7 +1280,7 @@ </histogram> <histogram name="GPU.PersistentCache.{GraphiteDawnOrWebGPU}.Load" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>lehoangquyen@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> @@ -1292,7 +1292,7 @@ </histogram> <histogram name="GPU.PersistentCache.{GraphiteDawnOrWebGPU}.Store" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>kylechar@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> @@ -1305,7 +1305,7 @@ <histogram name="GPU.PersistentCache.{GraphiteDawnOrWebGPU}.{LoadStore}.CacheAvailable" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>lehoangquyen@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> @@ -1599,7 +1599,7 @@ </histogram> <histogram name="GPU.{GraphiteDawnOrWebGPU}.Create{Module}Success" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>enga@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> <summary> @@ -1611,7 +1611,7 @@ </histogram> <histogram name="GPU.{GraphiteDawnOrWebGPU}.Create{Module}US" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>enga@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> <summary> @@ -1636,7 +1636,7 @@ </histogram> <histogram name="GPU.{GraphiteDawnOrWebGPU}.HasGpuAdapter" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>cduvall@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> <summary> @@ -2044,7 +2044,7 @@ </histogram> <histogram name="Viz.DisplayCompositor.OverlayStrategy" - enum="OverlayStrategies" expires_after="2026-03-22"> + enum="OverlayStrategies" expires_after="2026-05-24"> <owner>kylechar@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -2162,7 +2162,7 @@ </histogram> <histogram name="Viz.FrameIntervalDecider.ResultMatcherType" - enum="FrameIntervalMatcherType" expires_after="2026-03-22"> + enum="FrameIntervalMatcherType" expires_after="2026-05-24"> <owner>boliu@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -2172,7 +2172,7 @@ </histogram> <histogram name="Viz.FrameIntervalDecider.ResultTimeDelta" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>boliu@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml index 9f3c375..1f1311bf9 100644 --- a/tools/metrics/histograms/metadata/history/histograms.xml +++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -97,7 +97,7 @@ </histogram> <histogram name="History.ClearBrowsingData.Duration.ChromeTask.{Task}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>dullweber@chromium.org</owner> <owner>msramek@chromium.org</owner> <component>1456716</component> @@ -223,7 +223,7 @@ </histogram> <histogram name="History.ClearBrowsingData.Duration.Task.{Task}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dullweber@chromium.org</owner> <owner>msramek@chromium.org</owner> <component>1456716</component> @@ -432,7 +432,7 @@ </histogram> <histogram name="History.Clusters.Actions.InitialState" - enum="HistoryClustersInitialState" expires_after="2026-03-22"> + enum="HistoryClustersInitialState" expires_after="2026-05-24"> <owner>mcrouse@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>1457319</component> @@ -1590,7 +1590,7 @@ </histogram> <histogram name="History.DomainCount28Day_V3" units="domains" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -1631,7 +1631,7 @@ </histogram> <histogram name="History.DomainCount28Day_V4" units="domains" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -1711,7 +1711,7 @@ </histogram> <histogram name="History.DomainCount7Day_V3" units="domains" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -1752,7 +1752,7 @@ </histogram> <histogram name="History.DomainCount7Day_V4" units="domains" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mpearson@chromium.org</owner> <owner>mjzhang@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> @@ -2474,7 +2474,7 @@ </histogram> <histogram name="History.Embeddings.Search.Duration" units="ms" - expires_after="2026-02-28"> + expires_after="2026-05-24"> <owner>orinj@chromium.org</owner> <owner>src/components/history_embeddings/OWNERS</owner> <summary> @@ -2720,7 +2720,7 @@ </histogram> <histogram name="History.ForeignVisitsTotal" units="visits" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>treib@chromium.org</owner> <component>1456716</component> <summary> @@ -2731,7 +2731,7 @@ </histogram> <histogram name="History.HistoryPageView" enum="HistoryPageView" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>calamity@chromium.org</owner> <owner>src/chrome/browser/resources/history/OWNERS</owner> <component>1456716</component> @@ -2772,7 +2772,7 @@ </histogram> <histogram name="History.InMemoryURLHistoryItems" units="items" - expires_after="2026-02-09"> + expires_after="2026-05-24"> <owner>mpearson@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> <component>1456716</component> @@ -2896,7 +2896,7 @@ </histogram> <histogram name="History.QueryMostVisitedURLsTime" units="ms" - expires_after="2026-03-21"> + expires_after="2026-05-24"> <owner>mahmadi@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -3128,7 +3128,7 @@ </histogram> <histogram name="History.VisitedLinkTableCount" units="VisitedLinks" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kyraseevers@chromium.org</owner> <owner>janiceliu@chromium.org</owner> <component>1456589</component> @@ -3139,7 +3139,7 @@ </histogram> <histogram name="History.VisitTableCount" units="visits" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mpearson@chromium.org</owner> <owner>sky@chromium.org</owner> <component>1456716</component>
diff --git a/tools/metrics/histograms/metadata/image/histograms.xml b/tools/metrics/histograms/metadata/image/histograms.xml index 6579ed4..2124ca4 100644 --- a/tools/metrics/histograms/metadata/image/histograms.xml +++ b/tools/metrics/histograms/metadata/image/histograms.xml
@@ -421,7 +421,7 @@ </histogram> <histogram name="ImageDecoder.Png.UiGfxIntoSkBitmap" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lukasza@chromium.org</owner> <owner>chrome-rust-experiments@google.com</owner> <summary> @@ -439,7 +439,7 @@ </histogram> <histogram name="ImageDecoder.Png.UiGfxIntoVector" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lukasza@chromium.org</owner> <owner>chrome-rust-experiments@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/installer/histograms.xml b/tools/metrics/histograms/metadata/installer/histograms.xml index 01dc8c57..d8bcbc4 100644 --- a/tools/metrics/histograms/metadata/installer/histograms.xml +++ b/tools/metrics/histograms/metadata/installer/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="Installer.Postinstall.BiosType" enum="ChromeOSBiosType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tbrandston@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -40,7 +40,7 @@ </histogram> <histogram name="Installer.Postinstall.EfiBootEntryCount" units="entries" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tbrandston@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -58,7 +58,7 @@ </histogram> <histogram name="Installer.Postinstall.EfiBootEntryFailedLoad" units="entries" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tbrandston@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -93,7 +93,7 @@ </histogram> <histogram name="Installer.Postinstall.ESPMountRetries" units="retries" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tbrandston@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -103,7 +103,7 @@ </histogram> <histogram name="Installer.Postinstall.ManagedEfiBootEntryCount" - units="entries" expires_after="2026-03-22"> + units="entries" expires_after="2026-05-24"> <owner>tbrandston@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -124,7 +124,7 @@ </histogram> <histogram name="Installer.Postinstall.NonChromebookBiosSuccess.{BiosType}" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>tbrandston@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -148,7 +148,7 @@ </histogram> <histogram name="Installer.PowerwashCount" units="powerwashes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kimjae@chromium.org</owner> <owner>chromeos-core-services@chromium.org</owner> <summary> @@ -189,7 +189,7 @@ </histogram> <histogram name="Installer.Recovery.Reason" enum="ChromeOSRecoveryReason" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kimjae@chromium.org</owner> <owner>chromeos-core-services@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml index 10d2813..2b8f6c49 100644 --- a/tools/metrics/histograms/metadata/ios/histograms.xml +++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -226,7 +226,7 @@ </histogram> <histogram name="IOS.Annotations.{Action}.Type" enum="IOSAnnotationType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>olivierrobin@chromium.org</owner> <owner>bling-squid-squad@google.com</owner> <summary>The type of an annotation that is {Action}.</summary> @@ -909,7 +909,7 @@ </histogram> <histogram name="IOS.CredentialExtension.PasskeyUseCount" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tmartino@chromium.org</owner> <owner>bling-transactions-eng@google.com</owner> <summary> @@ -1277,7 +1277,7 @@ </histogram> <histogram name="IOS.DefaultBrowserPromo.SetUpList.Action" - enum="IOSDefaultBrowserFullscreenPromoAction" expires_after="2026-03-22"> + enum="IOSDefaultBrowserFullscreenPromoAction" expires_after="2026-05-24"> <owner>sebsg@chromium.org</owner> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> @@ -1740,7 +1740,7 @@ </histogram> <histogram name="IOS.ExperienceKitCalendar.TextClassifierModelAvailable" - enum="BooleanAvailable" expires_after="2026-01-31"> + enum="BooleanAvailable" expires_after="2026-05-24"> <owner>rajendrant@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -2370,7 +2370,7 @@ </histogram> <histogram name="IOS.GoogleOne.Outcome.{EntryPoint}" enum="GoogleOneOutcome" - expires_after="2026-03-12"> + expires_after="2026-05-24"> <owner>olivierrobin@chromium.org</owner> <owner>qpubert@chromium.org</owner> <summary> @@ -2482,7 +2482,7 @@ </histogram> <histogram name="IOS.HomeCustomization.Background.Gallery.MaxVisibleItemIndex" - units="index" expires_after="2026-03-22"> + units="index" expires_after="2026-05-24"> <owner>cheickcisse@google.com</owner> <owner>bling-mony-pod@google.com</owner> <summary> @@ -3031,7 +3031,7 @@ </histogram> <histogram name="IOS.MagicStack.AppBundlePromo.Impression" enum="Boolean" - expires_after="2026-02-05"> + expires_after="2026-05-24"> <owner>ericekey@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -3040,7 +3040,7 @@ </histogram> <histogram name="IOS.MagicStack.Module.Click" enum="IOSMagicStackModuleType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>thegreenfrog@chromium.org</owner> <owner>scottyoder@google.com</owner> <summary> @@ -3125,7 +3125,7 @@ </histogram> <histogram name="IOS.MagicStack.Module.Click.Shortcuts" units="index" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -3134,7 +3134,7 @@ </histogram> <histogram name="IOS.MagicStack.Module.Click.TabResumption" units="index" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -3160,7 +3160,7 @@ </histogram> <histogram name="IOS.MagicStack.Module.TopImpression" - enum="IOSMagicStackModuleType" expires_after="2026-03-22"> + enum="IOSMagicStackModuleType" expires_after="2026-05-24"> <owner>thegreenfrog@chromium.org</owner> <owner>scottyoder@google.com</owner> <summary> @@ -3347,7 +3347,7 @@ </histogram> <histogram name="IOS.MetricKit.{MXVersion}ApplicationResumeTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>justincohen@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> <summary> @@ -3369,7 +3369,7 @@ </histogram> <histogram name="IOS.MetricKit.{MXVersion}AverageSuspendedMemory" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>justincohen@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> <summary> @@ -3572,7 +3572,7 @@ </histogram> <histogram name="IOS.MetricKit.{MXVersion}OptimizedTimeToFirstDraw" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>justincohen@chromium.org</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -3598,7 +3598,7 @@ </histogram> <histogram name="IOS.MetricKit.{MXVersion}PeakMemoryUsage" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>justincohen@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> <summary> @@ -3626,7 +3626,7 @@ </histogram> <histogram name="IOS.MetricKit.{MXVersion}TimeToFirstDraw" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>justincohen@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> <summary> @@ -3748,7 +3748,7 @@ </histogram> <histogram name="IOS.Notifications.OptInPrompt.Action" - enum="IOSNotificationsOptInActionOnPrompt" expires_after="2026-03-15"> + enum="IOSNotificationsOptInActionOnPrompt" expires_after="2026-05-24"> <owner>hiramahmood@google.com</owner> <owner>scottyoder@google.com</owner> <summary>Logs a user's action on the Notifications Opt-In Prompt.</summary> @@ -3767,7 +3767,7 @@ </histogram> <histogram name="IOS.Notifications.SafetyCheck.Dismissed" - enum="IOSSafetyCheckNotificationType" expires_after="2026-03-22"> + enum="IOSSafetyCheckNotificationType" expires_after="2026-05-24"> <owner>bwwilliams@google.com</owner> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> @@ -3800,7 +3800,7 @@ </histogram> <histogram name="IOS.Notifications.SafetyCheck.Requested" - enum="IOSSafetyCheckNotificationType" expires_after="2026-03-22"> + enum="IOSSafetyCheckNotificationType" expires_after="2026-05-24"> <owner>bwwilliams@google.com</owner> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> @@ -3812,7 +3812,7 @@ </histogram> <histogram name="IOS.Notifications.SafetyCheck.Triggered" - enum="IOSSafetyCheckNotificationType" expires_after="2026-03-22"> + enum="IOSSafetyCheckNotificationType" expires_after="2026-05-24"> <owner>bwwilliams@google.com</owner> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> @@ -3870,7 +3870,7 @@ </histogram> <histogram name="IOS.Notifications.Tips.UserType" - enum="IOSTipsNotificationUserType" expires_after="2026-03-22"> + enum="IOSTipsNotificationUserType" expires_after="2026-05-24"> <owner>scottyoder@google.com</owner> <owner>hiramahmood@google.com</owner> <summary> @@ -4112,7 +4112,7 @@ </histogram> <histogram name="IOS.OverflowMenu.ActionType" enum="IOSOverflowMenuActionType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rkgibson@google.com</owner> <owner>bling-team@google.com</owner> <summary>The type of action the user took in the overflow/tools menu</summary> @@ -4263,7 +4263,7 @@ </histogram> <histogram name="IOS.OverflowMenu.OverflowMenuVisited" units="bitfield value" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rkgibson@google.com</owner> <owner>bling-mony-pod@google.com</owner> <summary> @@ -4282,14 +4282,14 @@ </histogram> <histogram name="IOS.OverflowMenu.TimeOpen" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rkgibson@google.com</owner> <owner>bling-team@google.com</owner> <summary>The amount of time the overflow/tools menu is open.</summary> </histogram> <histogram name="IOS.OverflowMenu.TimeOpen.ActionChosen" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rkgibson@google.com</owner> <owner>bling-mony-pod@google.com</owner> <summary> @@ -4468,7 +4468,7 @@ </histogram> <histogram name="IOS.PasswordBottomSheet.ExitReason" - enum="PasswordSuggestionBottomSheetExitReason" expires_after="2026-03-22"> + enum="PasswordSuggestionBottomSheetExitReason" expires_after="2026-05-24"> <owner>sugoi@chromium.org</owner> <owner>tmartino@chromium.org</owner> <summary> @@ -4873,7 +4873,7 @@ </histogram> <histogram name="IOS.PromosManager.EligiblePromosInQueueCount" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>gayane@google.com</owner> <owner>bling-mony-pod@google.com</owner> <summary> @@ -4884,7 +4884,7 @@ </histogram> <histogram name="IOS.PromosManager.Promo" enum="IOSPromosManagerPromo" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bwwilliams@google.com</owner> <owner>rkgibson@google.com</owner> <owner>huitingyu@google.com</owner> @@ -4921,7 +4921,7 @@ </histogram> <histogram name="IOS.PromosManager.Promo.Type" enum="IOSPromosManagerPromoType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bwwilliams@google.com</owner> <owner>rkgibson@google.com</owner> <owner>huitingyu@google.com</owner> @@ -4992,7 +4992,7 @@ </histogram> <histogram name="IOS.PushNotification.Client.Disabled" - enum="PushNotificationClientId" expires_after="2026-03-22"> + enum="PushNotificationClientId" expires_after="2026-05-24"> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -5001,7 +5001,7 @@ </histogram> <histogram name="IOS.PushNotification.Client.Enabled" - enum="PushNotificationClientId" expires_after="2026-03-22"> + enum="PushNotificationClientId" expires_after="2026-05-24"> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -5227,7 +5227,7 @@ </histogram> <histogram name="IOS.ReaderMode.AccessPoint" enum="ReaderModeAccessPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fernandex@google.com</owner> <owner>qpubert@google.com</owner> <owner>bling-squid-squad@google.com</owner> @@ -5341,7 +5341,7 @@ </histogram> <histogram name="IOS.ReaderMode.Heuristic.Result" - enum="ReaderModeHeuristicResult" expires_after="2026-02-24"> + enum="ReaderModeHeuristicResult" expires_after="2026-05-24"> <owner>fernandex@google.com</owner> <owner>bling-squid-squad@google.com</owner> <summary> @@ -6185,7 +6185,7 @@ </histogram> <histogram name="IOS.SetUpList.ItemSelected" enum="IOSSetUpListItemType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>scottyoder@google.com</owner> <owner>bling-pandamonium@google.com</owner> <summary> @@ -6230,7 +6230,7 @@ </histogram> <histogram name="IOS.SignInpromo.Fullscreen.PromoEvents" - enum="IOSSigninFullscreenPromoEvents" expires_after="2026-03-22"> + enum="IOSSigninFullscreenPromoEvents" expires_after="2026-05-24"> <owner>cheickcisse@google.com</owner> <owner>bling-mony-pod@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ip_protection/histograms.xml b/tools/metrics/histograms/metadata/ip_protection/histograms.xml index f072c226..9f4685e7 100644 --- a/tools/metrics/histograms/metadata/ip_protection/histograms.xml +++ b/tools/metrics/histograms/metadata/ip_protection/histograms.xml
@@ -607,7 +607,7 @@ </histogram> <histogram name="NetworkService.IpProtection.TryGetAuthTokensResult2" - enum="IpProtectionTokenBatchRequestResult" expires_after="2026-03-22"> + enum="IpProtectionTokenBatchRequestResult" expires_after="2026-05-24"> <owner>awillia@chromium.org</owner> <owner>src/components/ip_protection/OWNERS</owner> <summary> @@ -707,7 +707,7 @@ </histogram> <histogram name="NetworkService.MaskedDomainList.MatchesTime" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>djmitche@chromium.org</owner> <owner>src/components/ip_protection/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/language/histograms.xml b/tools/metrics/histograms/metadata/language/histograms.xml index 3cb2653..a84368e 100644 --- a/tools/metrics/histograms/metadata/language/histograms.xml +++ b/tools/metrics/histograms/metadata/language/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="LanguageDetection.TFLiteModel.ClassifyText.Detected" - enum="BooleanDetected" expires_after="2026-03-24"> + enum="BooleanDetected" expires_after="2026-05-24"> <owner>fergal@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -50,7 +50,7 @@ <histogram name="LanguageDetection.TFLiteModel.ClassifyText.HighestConfidenceLanguage" - enum="LocaleCodeBCP47" expires_after="2025-11-30"> + enum="LocaleCodeBCP47" expires_after="2026-04-05"> <owner>fergal@google.com</owner> <owner>chrome-language@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/lens/histograms.xml b/tools/metrics/histograms/metadata/lens/histograms.xml index 591652b9..622a5dd 100644 --- a/tools/metrics/histograms/metadata/lens/histograms.xml +++ b/tools/metrics/histograms/metadata/lens/histograms.xml
@@ -216,7 +216,7 @@ <histogram name="Lens.Overlay.ByInvocationSource.{InvocationSource}.SelectionState.CloseButtonEvent" - enum="LensOverlaySelectionCloseButtonEvent" expires_after="2026-03-22"> + enum="LensOverlaySelectionCloseButtonEvent" expires_after="2026-05-24"> <owner>juanmojica@google.com</owner> <owner>lens-chrome-eng@google.com</owner> <summary> @@ -571,7 +571,7 @@ </histogram> <histogram name="Lens.Overlay.GeneratedTab" enum="LensOverlayNewTabSource" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>christianxu@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -663,7 +663,7 @@ </histogram> <histogram name="Lens.Overlay.OcrDomSimilarity" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mercerd@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -772,7 +772,7 @@ </histogram> <histogram name="Lens.Overlay.SelectionState.CloseButtonEvent" - enum="LensOverlaySelectionCloseButtonEvent" expires_after="2026-03-22"> + enum="LensOverlaySelectionCloseButtonEvent" expires_after="2026-05-24"> <owner>juanmojica@google.com</owner> <owner>lens-chrome-eng@google.com</owner> <summary> @@ -804,7 +804,7 @@ </histogram> <histogram name="Lens.Overlay.Shown" enum="BooleanEnabled" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>erikchen@chromium.org</owner> <owner>mercerd@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/login/histograms.xml b/tools/metrics/histograms/metadata/login/histograms.xml index eb3ba4c..85c073a 100644 --- a/tools/metrics/histograms/metadata/login/histograms.xml +++ b/tools/metrics/histograms/metadata/login/histograms.xml
@@ -201,7 +201,7 @@ </histogram> <histogram name="Login.NumberOfUsersOnLoginScreen" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mslus@chromium.org</owner> <owner>chromeos-commercial-identity@google.com</owner> <summary> @@ -306,7 +306,7 @@ </histogram> <histogram name="Login.SessionExitType" enum="LoginSessionExitType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>iby@chromium.org</owner> <summary> Tracks whether a ChromeOS user was logged out because Chrome repeatedly
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml index 16129a6e..b61eb96 100644 --- a/tools/metrics/histograms/metadata/media/histograms.xml +++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -557,7 +557,7 @@ <histogram name="Media.Audio.Android.AAudioBufferSizeInFrames.{Direction}{AudioLatencyTag}" - units="frames" expires_after="2026-03-22"> + units="frames" expires_after="2026-05-24"> <owner>kawasin@google.com</owner> <owner>tguilbert@chromium.org</owner> <summary> @@ -599,7 +599,7 @@ <histogram name="Media.Audio.Android.AAudioFramesPerDataCallback.{Direction}{AudioLatencyTag}" - units="frames" expires_after="2026-03-22"> + units="frames" expires_after="2026-05-24"> <owner>kawasin@google.com</owner> <owner>tguilbert@chromium.org</owner> <summary> @@ -665,7 +665,7 @@ <histogram name="Media.Audio.Android.PreferredOutputFramesPerBuffer{AudioLatencyTagWithInvalidInputParams}" - units="frames" expires_after="2026-03-22"> + units="frames" expires_after="2026-05-24"> <owner>kawasin@google.com</owner> <owner>tguilbert@chromium.org</owner> <summary> @@ -708,7 +708,7 @@ <histogram name="Media.Audio.Android.RequestedOutputFramesPerBuffer{AudioLatencyTag}" - units="frames" expires_after="2026-03-22"> + units="frames" expires_after="2026-05-24"> <owner>kawasin@google.com</owner> <owner>olka@chromium.org</owner> <owner>dalecurtis@chromium.org</owner> @@ -1196,7 +1196,7 @@ </histogram> <histogram name="Media.Audio.InputStartupSuccessMac{MacAudioInputVariants}" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>henrika@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> <summary> @@ -1398,7 +1398,7 @@ </histogram> <histogram name="Media.Audio.Mac.NoiseSuppressionAvailable" - enum="BooleanSuccess" expires_after="2026-03-19"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>brandstrom@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> <summary> @@ -1671,7 +1671,7 @@ </histogram> <histogram name="Media.Audio.Render.OutputDeviceAuthorizationTimedOut" - enum="BooleanTimedOut" expires_after="2026-03-22"> + enum="BooleanTimedOut" expires_after="2026-05-24"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -1916,7 +1916,7 @@ </histogram> <histogram name="Media.AudioCapturerAudioGlitches" enum="AudioGlitchResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>olka@chromium.org</owner> <owner>gustaf@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -2063,7 +2063,7 @@ </histogram> <histogram name="Media.AudioInputDevice.AudioServiceDelay" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -2074,7 +2074,7 @@ </histogram> <histogram name="Media.AudioInputDevice.AudioServiceGlitchCount{Duration}" - units="glitches" expires_after="2026-03-22"> + units="glitches" expires_after="2026-05-24"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -2088,7 +2088,7 @@ </histogram> <histogram name="Media.AudioInputDevice.AudioServiceGlitchDuration{Duration}" - units="permille" expires_after="2026-03-22"> + units="permille" expires_after="2026-05-24"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -2102,7 +2102,7 @@ </histogram> <histogram name="Media.AudioOutputController.CallbackError" enum="BooleanError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>olka@chromium.org</owner> <owner>guidou@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -2182,7 +2182,7 @@ </histogram> <histogram name="Media.AudioOutputDevice.AudioServiceDelay{LatencyTag}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>dalecurtis@chromium.org</owner> @@ -2197,7 +2197,7 @@ <histogram name="Media.AudioOutputDevice.AudioServiceGlitchCount{Duration}{LatencyTag}" - units="glitches" expires_after="2026-03-22"> + units="glitches" expires_after="2026-05-24"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>dalecurtis@chromium.org</owner> @@ -2215,7 +2215,7 @@ <histogram name="Media.AudioOutputDevice.AudioServiceGlitchDuration{Duration}{LatencyTag}" - units="permille" expires_after="2026-03-22"> + units="permille" expires_after="2026-05-24"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>dalecurtis@chromium.org</owner> @@ -2233,7 +2233,7 @@ <histogram name="Media.AudioOutputResampler.OpenLowLatencyStream2" enum="AudioOutputResamplerLowLatencyOpenStreamResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>olka@chromium.org</owner> <owner>armax@chromium.org</owner> <owner>guidou@chromium.org</owner> @@ -2261,7 +2261,7 @@ </histogram> <histogram name="Media.AudioRendererAudioGlitches2.{LatencyTag}" - enum="AudioGlitchResult" expires_after="2026-03-22"> + enum="AudioGlitchResult" expires_after="2026-05-24"> <owner>dalecurtis@chromium.org</owner> <owner>olka@chromium.org</owner> <owner>tguilbert@chromium.org</owner> @@ -2297,7 +2297,7 @@ <histogram name="Media.AudioRendererMissedDeadline3{Mixing}{Duration}{LatencyTag}" - units="misses" expires_after="2026-03-22"> + units="misses" expires_after="2026-05-24"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>dalecurtis@chromium.org</owner> @@ -2962,7 +2962,7 @@ </histogram> <histogram name="Media.DocumentPictureInPicture.CloseReason" - enum="DocumentPictureInPictureCloseReason" expires_after="2026-03-22"> + enum="DocumentPictureInPictureCloseReason" expires_after="2026-05-24"> <owner>steimel@chromium.org</owner> <owner>liberato@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> @@ -3012,7 +3012,7 @@ </histogram> <histogram name="Media.DocumentPictureInPicture.RequestedLargeResize" - enum="BooleanOccurred" expires_after="2026-03-19"> + enum="BooleanOccurred" expires_after="2026-05-24"> <owner>steimel@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3050,7 +3050,7 @@ </histogram> <histogram name="Media.DroppedFrameCount2.{RendererType}.{ClearOrEncrypted}" - units="units" expires_after="2026-03-22"> + units="units" expires_after="2026-05-24"> <owner>dalecurtis@chromium.org</owner> <owner>frankli@microsoft.com</owner> <owner>media-dev-uma@chromium.org</owner> @@ -3174,7 +3174,7 @@ </histogram> <histogram name="Media.EME.CdmFileIO::OpenFile" enum="CdmStorageStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3213,20 +3213,20 @@ </histogram> <histogram name="Media.EME.CdmLoadResult" enum="CdmLoadResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>The result from an attempt to load a library CDM.</summary> </histogram> -<histogram name="Media.EME.CdmLoadTime" units="ms" expires_after="2026-03-22"> +<histogram name="Media.EME.CdmLoadTime" units="ms" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>The time spent to load a library CDM.</summary> </histogram> <histogram name="Media.EME.CdmProcessDebuggerAttached" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3588,7 +3588,7 @@ </histogram> <histogram name="Media.EME.MediaCryptoAvailable" enum="BooleanAvailable" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3598,7 +3598,7 @@ </histogram> <histogram name="Media.EME.MediaDrm.GetOriginIdResult" enum="GetOriginIdResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3621,7 +3621,7 @@ <histogram name="Media.EME.MediaDrm.PreprovisionedOriginId.PerAppProvisioningDevice" - units="units" expires_after="2026-03-22"> + units="units" expires_after="2026-05-24"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3641,7 +3641,7 @@ </histogram> <histogram name="Media.EME.MediaDrmBridge.KeySystemSupport" - enum="BooleanSupported" expires_after="2026-03-22"> + enum="BooleanSupported" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3661,7 +3661,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationCdm.LoadErrorCode" - enum="WinGetLastError" expires_after="2026-03-22"> + enum="WinGetLastError" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3670,7 +3670,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationCdm.LoadResult" enum="CdmLoadResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3679,7 +3679,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationCdm.LoadTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>The time spent to load a library MediaFoundation CDM.</summary> @@ -3687,7 +3687,7 @@ <histogram name="Media.EME.MediaFoundationCdm.{KeySystem}.HardwareSecure.FirstInitialize" - enum="Hresult" expires_after="2026-03-22"> + enum="Hresult" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3712,7 +3712,7 @@ <histogram name="Media.EME.MediaFoundationCdm.{KeySystem}.HardwareSecure.{EmeApi}" - enum="Hresult" expires_after="2026-03-22"> + enum="Hresult" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3724,7 +3724,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationService.Crash2" - enum="BooleanAfterPowerOrDisplayChange" expires_after="2026-03-22"> + enum="BooleanAfterPowerOrDisplayChange" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3768,7 +3768,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationService.IsKeySystemSupported" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3779,7 +3779,7 @@ <histogram name="Media.EME.MediaFoundationService.{KeySystem}.HardwareSecure.GetCdmCapability" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3793,7 +3793,7 @@ <histogram name="Media.EME.MediaFoundationService.{KeySystem}.HardwareSecure.IsTypeSupported" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3808,7 +3808,7 @@ <histogram name="Media.EME.MediaFoundationService.{KeySystem}.HardwareSecure.IsTypeSupportedEx" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3835,7 +3835,7 @@ </histogram> <histogram name="Media.EME.OutputProtection" enum="MediaOutputProtectionStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3857,7 +3857,7 @@ </histogram> <histogram name="Media.EME.RequestMediaKeySystemAccess.{KeySystem}" - enum="RequestMediaKeySystemAccessStatus" expires_after="2026-03-22"> + enum="RequestMediaKeySystemAccessStatus" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3935,7 +3935,7 @@ </histogram> <histogram name="Media.EME.Widevine.LibraryCdmAvailable" - enum="BooleanAvailable" expires_after="2026-03-22"> + enum="BooleanAvailable" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3947,7 +3947,7 @@ </histogram> <histogram name="Media.EME.Widevine.SoftwareSecure.SystemCode" - enum="CdmSystemCode" expires_after="2026-03-22"> + enum="CdmSystemCode" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3957,7 +3957,7 @@ </histogram> <histogram name="Media.EME.Widevine.VideoCapability.HasEmptyRobustness" - enum="BooleanEmpty" expires_after="2026-03-22"> + enum="BooleanEmpty" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3969,7 +3969,7 @@ <histogram name="Media.EME.{KeySystem}.CdmCapabilityQueryStatus.CreateDummyMediaFoundationCdmHresult" - enum="Hresult" expires_after="2026-03-22"> + enum="Hresult" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3981,7 +3981,7 @@ <histogram name="Media.EME.{KeySystem}.CdmCapabilityQueryStatus.MediaFoundationGetCdmFactoryHresult" - enum="Hresult" expires_after="2026-03-22"> + enum="Hresult" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3992,7 +3992,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateCdm" enum="BooleanSuccess" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4004,7 +4004,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateCdmStatus" enum="CreateCdmStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4016,7 +4016,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateCdmTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>Time took to create the CDM instance for {KeySystem}.</summary> @@ -4024,7 +4024,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateSession.SessionType" - enum="EmeSessionType" expires_after="2026-03-22"> + enum="EmeSessionType" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>EME session type passed into CreateSession.</summary> @@ -4042,7 +4042,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.HardwareSecure.AllowedForSite" - enum="BooleanEnabled" expires_after="2026-03-22"> + enum="BooleanEnabled" expires_after="2026-05-24"> <owner>feras@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4055,7 +4055,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.HardwareSecure.CdmCapabilityQueryStatus" - enum="CdmCapabilityQueryStatus" expires_after="2026-03-22"> + enum="CdmCapabilityQueryStatus" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4067,7 +4067,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.HardwareSecure.CdmInfoStatus" - enum="CdmInfoStatus" expires_after="2026-03-22"> + enum="CdmInfoStatus" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4078,7 +4078,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.HardwareSecure.Support" - enum="BooleanSupported" expires_after="2026-03-22"> + enum="BooleanSupported" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4091,7 +4091,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.HardwareSecure.Support.{VideoCodec}" - enum="BooleanSupported" expires_after="2026-03-22"> + enum="BooleanSupported" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4105,7 +4105,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.InitialKeyStatusMix" - enum="CdmKeyStatusMix" expires_after="2026-03-22"> + enum="CdmKeyStatusMix" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4116,7 +4116,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.KeyStatusSystemCode" - enum="CdmSystemCode" expires_after="2026-03-22"> + enum="CdmSystemCode" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>System code associated with key status for {KeySystem}.</summary> @@ -4136,7 +4136,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.TimeTo{ResolveOrReject}.{EmeApi}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>The time it takes to {ResolveOrReject} a EME promise.</summary> @@ -4146,7 +4146,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.WaitingForKey" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4158,7 +4158,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.{EmeApi}" enum="CdmPromiseResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>Result of EME promises that were handled by Chromium code.</summary> @@ -4167,7 +4167,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.{EmeApi}.SystemCode" - enum="CdmSystemCode" expires_after="2026-03-22"> + enum="CdmSystemCode" expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>System code in promise rejection.</summary> @@ -4509,7 +4509,7 @@ </histogram> <histogram name="Media.GpuMemoryBufferVideoFramePool.UnsupportedFormat" - enum="VideoPixelFormatUnion" expires_after="2026-03-22"> + enum="VideoPixelFormatUnion" expires_after="2026-05-24"> <owner>magchen@chromium.org</owner> <owner>cros-gfx-video@google.com</owner> <summary> @@ -4559,7 +4559,7 @@ </histogram> <histogram name="Media.HasAcceleratedVideoDecode.{CodecType}" - enum="BooleanSupported" expires_after="2026-03-22"> + enum="BooleanSupported" expires_after="2026-05-24"> <owner>dalecurtis@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4755,7 +4755,7 @@ </histogram> <histogram name="Media.MeanTimeBetweenRebuffers{MediaRebufferingCategories}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>dalecurtis@chromium.org</owner> <summary> The total watch time (see Media.WatchTime) of a given playback divided by @@ -4770,7 +4770,7 @@ </histogram> <histogram name="Media.MediaCodecError.NegativeCodecExceptionErrorCode" - units="CodecErrorCode" expires_after="2026-03-22"> + units="CodecErrorCode" expires_after="2026-05-24"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4781,7 +4781,7 @@ </histogram> <histogram name="Media.MediaCodecError.{VideoCodec}.{Secure}" - enum="MediaCodecError" expires_after="2026-03-22"> + enum="MediaCodecError" expires_after="2026-05-24"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -4991,7 +4991,7 @@ <histogram name="Media.MediaFoundation.MediaEngineError.{MF_MEDIA_ENGINE_ERR}.Hresult" - enum="Hresult" expires_after="2026-03-22"> + enum="Hresult" expires_after="2026-05-24"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -5087,7 +5087,7 @@ </histogram> <histogram name="Media.MediaFoundationRenderer.PlaybackError" enum="Hresult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -5099,7 +5099,7 @@ <histogram name="Media.MediaFoundationRenderer.RenderedVideoFrameDetectionResult" enum="MediaFoundationRendererRenderedVideoFrameDetectionResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -5110,7 +5110,7 @@ <histogram name="Media.MediaFoundationRenderer.RenderedVideoFrameDetectionResult.TimeTo.{ResultReason}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -5858,7 +5858,7 @@ </histogram> <histogram name="Media.PipelineStatus.Start" enum="PipelineStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -6503,7 +6503,7 @@ </histogram> <histogram name="Media.Session.EnterPictureInPictureV2" - enum="MediaSessionEnterPictureInPictureType" expires_after="2026-01-18"> + enum="MediaSessionEnterPictureInPictureType" expires_after="2026-05-24"> <owner>steimel@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -6730,7 +6730,7 @@ </histogram> <histogram name="Media.Ui.GetDisplayMedia.BasicFlow.SourceCount.{Type}" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>eladalon@chromium.org</owner> <owner>tovep@chromium.org</owner> <summary> @@ -7233,7 +7233,7 @@ </histogram> <histogram name="Media.VideoCapture.FrameRate" units="fps" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>hiroh@chromium.org</owner> <owner>chromeos-gfx-video@chromium.org</owner> <owner>guidou@chromium.org</owner> @@ -7833,7 +7833,7 @@ </histogram> <histogram name="Media.VideoHeight.Initial.{PlaybackType}" units="pixels" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -7874,7 +7874,7 @@ </histogram> <histogram name="Media.WatchTime{MediaWatchTimeCategories}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dalecurtis@chromium.org</owner> <summary> Watch time is defined as the amount of elapsed media time for audio+video @@ -8506,7 +8506,7 @@ </histogram> <histogram name="MediaRouter.Cast.Discovery.KnownDevicesCount" units="devices" - expires_after="2026-03-01"> + expires_after="2026-05-24"> <owner>muyaoxu@google.com</owner> <owner>mfoltz@chromium.org</owner> <owner>openscreen-eng@google.com</owner> @@ -8556,7 +8556,7 @@ </histogram> <histogram name="MediaRouter.CastStreaming.Session.Launch" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary>Total time to launch a Cast Streaming mirror session.</summary> @@ -8631,7 +8631,7 @@ </histogram> <histogram name="MediaRouter.CastStreaming.Start.Success" enum="MirrorType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/memory/histograms.xml b/tools/metrics/histograms/metadata/memory/histograms.xml index e9e9eaf6..c05c519 100644 --- a/tools/metrics/histograms/metadata/memory/histograms.xml +++ b/tools/metrics/histograms/metadata/memory/histograms.xml
@@ -843,7 +843,7 @@ </variants> <histogram name="HeapProfiling.InProcess.BloomFilterHitCount{Process}" - units="hits" expires_after="2026-03-22"> + units="hits" expires_after="2026-05-24"> <owner>joenotcharles@google.com</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -857,7 +857,7 @@ </histogram> <histogram name="HeapProfiling.InProcess.BloomFilterHitRate{Process}" - units="1/100 %" expires_after="2026-03-22"> + units="1/100 %" expires_after="2026-05-24"> <owner>joenotcharles@google.com</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -872,7 +872,7 @@ </histogram> <histogram name="HeapProfiling.InProcess.BloomFilterMaxSaturation{Process}" - units="bits" expires_after="2026-03-22"> + units="bits" expires_after="2026-05-24"> <owner>joenotcharles@google.com</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -988,7 +988,7 @@ </histogram> <histogram name="HeapProfiling.InProcess.TotalSampledMemory{Process}" - units="MB" expires_after="2026-03-22"> + units="MB" expires_after="2026-05-24"> <owner>joenotcharles@google.com</owner> <owner>etienneb@chromium.org</owner> <owner>chrome-memory@google.com</owner> @@ -1333,7 +1333,7 @@ </histogram> <histogram name="Memory.Experimental.AvailableMemoryPercent" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -1537,7 +1537,7 @@ </histogram> <histogram name="Memory.Experimental.MacAvailableMemoryPercentFreePageCache2" - units="%" expires_after="2026-03-22"> + units="%" expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -1941,7 +1941,7 @@ </histogram> <histogram name="Memory.GPU.PeakMemoryAllocationSource2.{Usage}.{Source}" - units="MB" expires_after="2026-03-22"> + units="MB" expires_after="2026-05-24"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1961,7 +1961,7 @@ </histogram> <histogram name="Memory.GPU.PeakMemoryUsage2.{Usage}" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -2166,7 +2166,7 @@ </histogram> <histogram name="Memory.NetworkService.PrivateMemoryFootprint" units="MiB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -2226,14 +2226,14 @@ </histogram> <histogram name="Memory.OOMKills.Count" units="kills" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vovoy@google.com</owner> <owner>wvk@google.com</owner> <summary>Cumulative count of OOM kills in one user session.</summary> </histogram> <histogram name="Memory.OOMKills.Daily" units="kills" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vovoy@google.com</owner> <owner>src/chromeos/ash/components/memory/OWNERS</owner> <summary> @@ -2424,7 +2424,7 @@ </histogram> <histogram name="Memory.ParkableString.OnDiskSizeKb.5min" units="KB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lizeb@chromium.org</owner> <owner>pasko@chromium.org</owner> <summary> @@ -2717,7 +2717,7 @@ </histogram> <histogram name="Memory.RendererProcessCount2" units="processes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>creis@chromium.org</owner> <owner>nasko@chromium.org</owner> <summary> @@ -2882,7 +2882,7 @@ </histogram> <histogram name="Memory.Total.GpuMappedMemory" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lizeb@chromium.org</owner> <owner>chrome-memory@chromium.org</owner> <summary> @@ -2894,7 +2894,7 @@ </histogram> <histogram name="Memory.Total.HibernatedCanvas.OriginalSize" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lizeb@chromium.org</owner> <owner>chrome-memory@chromium.org</owner> <summary> @@ -2907,7 +2907,7 @@ </histogram> <histogram name="Memory.Total.HibernatedCanvas.Size" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>lizeb@chromium.org</owner> <owner>chrome-memory@chromium.org</owner> <summary> @@ -2945,7 +2945,7 @@ </histogram> <histogram name="Memory.Total.PrivateMemoryFootprintExcludingWaivedRenderers" - units="MB" expires_after="2026-03-22"> + units="MB" expires_after="2026-05-24"> <owner>ckitagawa@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -2959,7 +2959,7 @@ <histogram name="Memory.Total.PrivateMemoryFootprintVisibleOrHigherPriorityRenderers" - units="MB" expires_after="2026-03-22"> + units="MB" expires_after="2026-05-24"> <owner>ckitagawa@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -2985,7 +2985,7 @@ </histogram> <histogram name="Memory.Total.RendererBlinkGC" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdoray@chromium.org</owner> <owner>lizeb@chromium.org</owner> <summary> @@ -2997,7 +2997,7 @@ </histogram> <histogram name="Memory.Total.RendererBlinkGC.Fragmentation" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdoray@chromium.org</owner> <owner>lizeb@chromium.org</owner> <summary> @@ -3022,7 +3022,7 @@ </histogram> <histogram name="Memory.Total.RendererPrivateMemoryFootprint" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tommckee@chromium.org</owner> <summary> A rough estimate of the private memory footprint of all renderer processes. @@ -3054,7 +3054,7 @@ <histogram name="Memory.Total.RendererPrivateMemoryFootprintVisibleOrHigherPriority" - units="MB" expires_after="2026-03-22"> + units="MB" expires_after="2026-05-24"> <owner>ckitagawa@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -3134,7 +3134,7 @@ </summary> </histogram> -<histogram name="Memory.Total.TileMemory" units="MB" expires_after="2026-03-22"> +<histogram name="Memory.Total.TileMemory" units="MB" expires_after="2026-05-24"> <owner>lizeb@chromium.org</owner> <owner>chrome-gpu-memory@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/mobile/histograms.xml b/tools/metrics/histograms/metadata/mobile/histograms.xml index 2a9eb15..4d8b0d8 100644 --- a/tools/metrics/histograms/metadata/mobile/histograms.xml +++ b/tools/metrics/histograms/metadata/mobile/histograms.xml
@@ -1100,7 +1100,7 @@ </histogram> <histogram name="MobileFre.Progress.{MobileFreEntryType}" - enum="MobileFreProgress" expires_after="2026-03-22"> + enum="MobileFreProgress" expires_after="2026-05-24"> <owner>bsazonov@chromium.org</owner> <owner>samarchehade@google.com</owner> <owner>chrome-signin-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml index b24b00e..6ef4786 100644 --- a/tools/metrics/histograms/metadata/navigation/histograms.xml +++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -351,7 +351,7 @@ <histogram name="BackForwardCache.Experimental.UnexpectedIPCMessagePostedToCachedFrame.MethodHash" - enum="MojoInterfaceName" expires_after="2026-03-22"> + enum="MojoInterfaceName" expires_after="2026-05-24"> <owner>fergal@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -884,7 +884,7 @@ <histogram name="Navigation.CommitNavigationWithParams.Time.IsStandardLoadType.IsHTTPOrHTTPS" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -909,7 +909,7 @@ <histogram name="Navigation.CommitRenderFrame.OutermostMainFrame.NewNavigation.IsHTTPOrHTTPS" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>sisidovski@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -921,7 +921,7 @@ </histogram> <histogram name="Navigation.CommitRenderFrame.{FrameType}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sisidovski@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -995,7 +995,7 @@ </histogram> <histogram name="Navigation.DidCommitSameDocumentNavigation.Duration" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>peilinwang@google.com</owner> <owner>woa-performance-bugs+jank@google.com</owner> <summary> @@ -1304,7 +1304,7 @@ <histogram name="Navigation.GetFrameHostForNavigationTime.InDidCreateNavigationRequest.IsHTTPOrHTTPS" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1323,7 +1323,7 @@ </histogram> <histogram name="Navigation.Guest.IsHTTPOrHTTPS" - enum="BooleanHttpBasedOrOtherScheme" expires_after="2026-03-21"> + enum="BooleanHttpBasedOrOtherScheme" expires_after="2026-05-24"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <owner>wjmaclean@chromium.org</owner> @@ -1382,7 +1382,7 @@ </histogram> <histogram name="Navigation.IframeCreated.AdTracker.DuplicateAncestryScriptId" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>jkarlin@chromium.org</owner> <owner>yaoxia@chromium.org</owner> <owner>apaseltiner@chromium.org</owner> @@ -1583,7 +1583,7 @@ </histogram> <histogram name="Navigation.MainFrame.ThirdPartyCookieBlockingEnabled" - enum="ThirdPartyCookieBlockState" expires_after="2026-03-22"> + enum="ThirdPartyCookieBlockState" expires_after="2026-05-24"> <owner>dullweber@chromium.org</owner> <owner>feuunk@chromium.org</owner> <summary> @@ -1698,7 +1698,7 @@ </histogram> <histogram name="Navigation.MainFrameSchemeDifferentPageOTR2" - enum="NavigationScheme" expires_after="2026-03-22"> + enum="NavigationScheme" expires_after="2026-05-24"> <owner>estark@chromium.org</owner> <owner>elawrence@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> @@ -1747,7 +1747,7 @@ </histogram> <histogram name="Navigation.OnBeforeUnloadTotalTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1792,7 +1792,7 @@ </histogram> <histogram name="Navigation.PageLifecycleStateFromNewPageCommit.Duration" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1935,7 +1935,7 @@ <histogram name="Navigation.Prefetch.IsPrefetchingSRPUrl.{PreloadingEmbedderType}" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>robertlin@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -2727,7 +2727,7 @@ </histogram> <histogram name="Navigation.Timeline.IgnoredCorrectly.Duration" units="ms" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <summary> @@ -2743,7 +2743,7 @@ </histogram> <histogram name="Navigation.Timeline.IgnoredIncorrectly.Duration" units="ms" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <summary> @@ -2795,7 +2795,7 @@ </histogram> <histogram name="Navigation.Timeline.IgnoredIncorrectly.Percentage" units="%" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>creis@chromium.org</owner> <owner>alexmos@chromium.org</owner> <summary> @@ -2811,7 +2811,7 @@ <histogram name="Navigation.Timeline.TotalExcludingBeforeUnload.MainFrameOnly.Duration" - units="ms" expires_after="2026-03-25"> + units="ms" expires_after="2026-05-24"> <owner>creis@chromium.org</owner> <owner>alexmos@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -2829,7 +2829,7 @@ </histogram> <histogram name="Navigation.Timeline.{DurationFromTo}.Duration" units="ms" - expires_after="2026-03-25"> + expires_after="2026-05-24"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -2926,7 +2926,7 @@ </histogram> <histogram name="Navigation.TimeToActivatePrerender{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>sreejakshetty@chromium.org</owner> <owner>chrome-prerendering@chromium.org</owner> @@ -3543,7 +3543,7 @@ <histogram name="Prerender.Experimental.ActivationHeadersMismatch{PreloadingTriggerType}" - enum="PrerenderActivationHeaderMismatchType" expires_after="2026-03-22"> + enum="PrerenderActivationHeaderMismatchType" expires_after="2026-05-24"> <owner>lingqi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -3765,7 +3765,7 @@ <histogram name="Prerender.Experimental.PrerenderHostFinalStatus{PreloadingTriggerType}" - enum="PrerenderHostFinalStatus" expires_after="2026-03-22"> + enum="PrerenderHostFinalStatus" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>toyoshim@chromium.org</owner> <owner>lingqi@chromium.org</owner> @@ -3779,7 +3779,7 @@ <histogram name="Prerender.Experimental.PrerenderLoadingFailureError{PreloadingTriggerType}" - enum="NetErrorCodes" expires_after="2026-03-22"> + enum="NetErrorCodes" expires_after="2026-05-24"> <owner>lingqi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -3858,7 +3858,7 @@ </histogram> <histogram name="Prerender.Experimental.Search.ResponseReuseCount" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>lingqi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -3902,7 +3902,7 @@ </histogram> <histogram name="Prerender.IsPrerenderingSRPUrl.{PreloadingEmbedderType}" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>robertlin@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml index b72e27c..229404d 100644 --- a/tools/metrics/histograms/metadata/net/histograms.xml +++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -475,7 +475,7 @@ </histogram> <histogram name="Crypto.UnexportableKeys.BackgroundTaskDuration{Priority}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> @@ -567,7 +567,7 @@ </histogram> <histogram name="Crypto.UnexportableKeys.BackgroundTaskRunDuration{TaskType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> @@ -604,7 +604,7 @@ </histogram> <histogram name="HttpCache.AccessToDone2{HttpCacheAccessToDoneCases}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>morlovich@chromium.org</owner> <owner>olivierli@chromium.org</owner> <summary> @@ -634,7 +634,7 @@ </histogram> <histogram name="HttpCache.BeforeSend{HttpCacheBeforeSendCases}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>morlovich@chromium.org</owner> <owner>yhirano@chromium.org</owner> <summary> @@ -658,7 +658,7 @@ </histogram> <histogram name="HttpCache.CreateDiskEntry" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yhirano@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -829,7 +829,7 @@ </histogram> <histogram name="HttpCache.NoVarySearch.InitDeleteError.{Directory}.{File}" - enum="PlatformFileError" expires_after="2026-01-11"> + enum="PlatformFileError" expires_after="2026-05-24"> <owner>ricea@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -1228,7 +1228,7 @@ </token> </histogram> -<histogram name="HttpCache.OpenDiskEntry" units="ms" expires_after="2026-03-22"> +<histogram name="HttpCache.OpenDiskEntry" units="ms" expires_after="2026-05-24"> <owner>yhirano@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -1310,7 +1310,7 @@ </histogram> <histogram name="HttpCache.TotalDiskCacheTimePerTransaction.{AccessType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -1561,7 +1561,7 @@ </histogram> <histogram name="Net.CertificateTransparency.SCTOrigin" enum="SCTOrigin" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>estark@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -1984,7 +1984,7 @@ </histogram> <histogram name="Net.DeviceBoundSessions.MinimumBoundCookieLifetime" units="ms" - expires_after="2026-02-18"> + expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1996,7 +1996,7 @@ <histogram name="Net.DeviceBoundSessions.MinimumProactiveRefreshThreshold{Outcome}" - units="ms" expires_after="2026-02-18"> + units="ms" expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2033,7 +2033,7 @@ <histogram name="Net.DeviceBoundSessions.ProactiveRefreshCandidateDeferredCount.{Threshold}" - units="requests" expires_after="2026-02-18"> + units="requests" expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2052,7 +2052,7 @@ <histogram name="Net.DeviceBoundSessions.ProactiveRefreshCandidateRequestDeferredDuration.{Threshold}" - units="requests" expires_after="2026-02-18"> + units="requests" expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2082,7 +2082,7 @@ </histogram> <histogram name="Net.DeviceBoundSessions.RefreshChallengeCount" - units="challenges" expires_after="2026-02-18"> + units="challenges" expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2157,7 +2157,7 @@ </histogram> <histogram name="Net.DeviceBoundSessions.RequestDeferredCount" units="requests" - expires_after="2026-02-18"> + expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2552,7 +2552,7 @@ <histogram name="Net.DNS.DnsTransaction.SecureValidated.{DohProviderId}FailureError" - enum="NetErrorCodes" expires_after="2026-03-22"> + enum="NetErrorCodes" expires_after="2026-05-24"> <owner>awillia@chromium.org</owner> <owner>src/net/dns/OWNERS</owner> <summary> @@ -3554,7 +3554,7 @@ </histogram> <histogram name="Net.HttpRequestSSLUpgradeDecision" - enum="HttpRequestSSLUpgradeDecision" expires_after="2026-03-22"> + enum="HttpRequestSSLUpgradeDecision" expires_after="2026-05-24"> <owner>cthomp@chromium.org</owner> <owner>etienneb@chromium.org</owner> <owner>joenotcharles@google.com</owner> @@ -3699,7 +3699,7 @@ </histogram> <histogram name="Net.HttpStreamPool.JobErrorCode" enum="NetErrorCodes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -4023,7 +4023,7 @@ <histogram name="Net.NetworkTransaction.Create{StreamType}Time2{HostType}.{Protocol}{AddressFamily}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -4144,7 +4144,7 @@ <histogram name="Net.NetworkTransaction.InitializeStreamBlockTime{HostType}.{Protocol}" - units="ms" expires_after="2026-03-15"> + units="ms" expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -4220,7 +4220,7 @@ <histogram name="Net.NetworkTransaction.StreamRequestCompleteTime2{HostType}.{SuccessOrFailure}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -4379,7 +4379,7 @@ </histogram> <histogram name="Net.QuicChromiumClientStream.HandleOnCloseConnectionError" - enum="QuicErrorCodes" expires_after="2026-03-22"> + enum="QuicErrorCodes" expires_after="2026-05-24"> <owner>renjietang@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -5385,7 +5385,7 @@ </histogram> <histogram name="Net.QuicSession.EncryptionEstablishedTime" - units="Milliseconds" expires_after="2026-03-22"> + units="Milliseconds" expires_after="2026-05-24"> <owner>fayang@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -5807,7 +5807,7 @@ </histogram> <histogram name="Net.QuicSession.NumMigrations" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>renjietang@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary>The number of successful migrations for a QUIC session.</summary> @@ -5844,7 +5844,7 @@ </histogram> <histogram name="Net.QuicSession.NumPingsSent{HostType}" units="pings" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>renjietang@chromium.org</owner> <owner>suzukikeita@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> @@ -6778,7 +6778,7 @@ </histogram> <histogram name="Net.QuicSession.ZeroRttState{HostType}" enum="ZeroRttState" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -7198,7 +7198,7 @@ </histogram> <histogram name="Net.RestrictedPorts" units="connections" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tov@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -7828,7 +7828,7 @@ </histogram> <histogram name="Net.SqlDiskCache.Backend.DatabaseSize" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -7838,7 +7838,7 @@ </histogram> <histogram name="Net.SqlDiskCache.Backend.EntryCount" units="entries" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -7848,7 +7848,7 @@ </histogram> <histogram name="Net.SqlDiskCache.Backend.IndexMismatch" - enum="SqlDiskCacheIndexMismatchLocation" expires_after="2026-03-22"> + enum="SqlDiskCacheIndexMismatchLocation" expires_after="2026-05-24"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -7872,7 +7872,7 @@ </histogram> <histogram name="Net.SqlDiskCache.Backend.MaxSize" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -7882,7 +7882,7 @@ </histogram> <histogram name="Net.SqlDiskCache.Backend.SqliteError" - enum="SqliteLoggedResultCode" expires_after="2026-03-22"> + enum="SqliteLoggedResultCode" expires_after="2026-05-24"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -7892,7 +7892,7 @@ </histogram> <histogram name="Net.SqlDiskCache.Backend.TotalSize" units="MB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -8087,7 +8087,7 @@ </histogram> <histogram name="Net.SqlDiskCache.Write.IsOptimistic" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>horo@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -8230,7 +8230,7 @@ </histogram> <histogram name="Net.SSLHandshakeEarlyDataReason" - enum="SSLHandshakeEarlyDataReason" expires_after="2026-03-22"> + enum="SSLHandshakeEarlyDataReason" expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -8245,7 +8245,7 @@ </histogram> <histogram name="Net.SSLHandshakeEarlyDataReason.Google" - enum="SSLHandshakeEarlyDataReason" expires_after="2026-03-22"> + enum="SSLHandshakeEarlyDataReason" expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -8365,7 +8365,7 @@ </histogram> <histogram name="Net.TcpConnectAttempt.Latency.Success" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bashi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -8569,7 +8569,7 @@ <histogram name="Net.TrustTokens.RequestHelperFactoryOutcome.{TrustTokenOperationType}" - enum="TrustTokenRequestHelperFactoryOutcome" expires_after="2026-03-22"> + enum="TrustTokenRequestHelperFactoryOutcome" expires_after="2026-05-24"> <owner>svaldez@chromium.org</owner> <owner>timhuber@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml index 912d0135..b64e246 100644 --- a/tools/metrics/histograms/metadata/network/histograms.xml +++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -4257,7 +4257,7 @@ </histogram> <histogram name="Network.Shill.WiFi.Passpoint.Domains" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hugobenichi@google.com</owner> <owner>cros-networking@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4279,7 +4279,7 @@ </histogram> <histogram name="Network.Shill.WiFi.Passpoint.InterworkingDurationMillis" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hugobenichi@google.com</owner> <owner>cros-networking@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4323,7 +4323,7 @@ </histogram> <histogram name="Network.Shill.WiFi.Passpoint.Origin" enum="PasspointOrigin" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hugobenichi@google.com</owner> <owner>cros-networking@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4333,7 +4333,7 @@ </histogram> <histogram name="Network.Shill.WiFi.Passpoint.ProvisioningResult" - enum="PasspointProvisioningResult" expires_after="2026-03-22"> + enum="PasspointProvisioningResult" expires_after="2026-05-24"> <owner>hugobenichi@google.com</owner> <owner>cros-networking@google.com</owner> <owner>cros-network-metrics@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml index 619ca7cf..07966f5 100644 --- a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml +++ b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
@@ -96,7 +96,7 @@ </variants> <histogram name="NewTabPage.ActionAndroid2" enum="NewTabPageActionAndroid2" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>twellington@chromium.org</owner> <owner>finkm@chromium.org</owner> <summary> @@ -181,7 +181,7 @@ </histogram> <histogram name="NewTabPage.BackgroundImageSource" - enum="NTPBackgroundImageSource" expires_after="2026-03-22"> + enum="NTPBackgroundImageSource" expires_after="2026-05-24"> <owner>pauladedeji@google.com</owner> <owner>danpeng@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -289,7 +289,7 @@ </histogram> <histogram name="NewTabPage.Collections.IdOnLoad" enum="NTPCollectionId" - expires_after="2026-03-01"> + expires_after="2026-05-24"> <owner>pauladedeji@google.com</owner> <owner>danpeng@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -350,7 +350,7 @@ </histogram> <histogram name="NewTabPage.ConcretePage" enum="NewTabPageConcretePage" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -361,7 +361,7 @@ </histogram> <histogram name="NewTabPage.ContentSuggestions.ArticlesListVisible" - enum="BooleanVisible" expires_after="2026-03-22"> + enum="BooleanVisible" expires_after="2026-05-24"> <owner>freedjm@chromium.org</owner> <owner>feed@chromium.org</owner> <summary> @@ -538,7 +538,7 @@ </histogram> <histogram name="NewTabPage.Customization.{ModuleToggleState}" - enum="ModuleType" expires_after="2026-03-22"> + enum="ModuleType" expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>yanlinghu@google.com</owner> <owner>clank-start@google.com</owner> @@ -563,7 +563,7 @@ </histogram> <histogram name="NewTabPage.CustomizeChromeOpened" - enum="NTPCustomizeChromeEntryPoint" expires_after="2026-03-22"> + enum="NTPCustomizeChromeEntryPoint" expires_after="2026-05-24"> <owner>pauladedeji@google.com</owner> <owner>danpeng@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -600,7 +600,7 @@ </histogram> <histogram name="NewTabPage.Customized" enum="NTPCustomizedFeatures" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -611,7 +611,7 @@ </histogram> <histogram name="NewTabPage.CustomizedShortcuts" - enum="NTPCustomizedShortcutSettings" expires_after="2026-03-22"> + enum="NTPCustomizedShortcutSettings" expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -882,7 +882,7 @@ </summary> </histogram> -<histogram name="NewTabPage.Height" units="pixels" expires_after="2026-03-22"> +<histogram name="NewTabPage.Height" units="pixels" expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -895,7 +895,7 @@ </histogram> <histogram name="NewTabPage.Images.ShownTime{ImageType}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>pauladedeji@google.com</owner> <owner>danpeng@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1029,7 +1029,7 @@ </histogram> <histogram name="NewTabPage.LoadTime{NewTabPageTimings}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1198,7 +1198,7 @@ </histogram> <histogram name="NewTabPage.MicrosoftFiles.RequestResult" - enum="MicrosoftFilesRequestResult" expires_after="2026-03-22"> + enum="MicrosoftFilesRequestResult" expires_after="2026-05-24"> <owner>jennserrano@google.com</owner> <owner>rtatum@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1211,7 +1211,7 @@ </histogram> <histogram name="NewTabPage.MicrosoftFiles.ResponseResult" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jennserrano@google.com</owner> <owner>rtatum@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1227,7 +1227,7 @@ </histogram> <histogram name="NewTabPage.MicrosoftFiles.ShownFiles.{RecommendationType}" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>jennserrano@google.com</owner> <owner>rtatum@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1306,7 +1306,7 @@ </histogram> <histogram name="NewTabPage.Module.LongClick" enum="ModuleTypeOnStartAndNTP" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>xinyiji@chromium.org</owner> <summary> @@ -1353,7 +1353,7 @@ </histogram> <histogram name="NewTabPage.Modules.Dismissed{NewTabPageModules}" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1369,7 +1369,7 @@ </histogram> <histogram name="NewTabPage.Modules.EnabledOnNTPLoad{NewTabPageModules}" - enum="BooleanEnabled" expires_after="2026-03-22"> + enum="BooleanEnabled" expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1444,7 +1444,7 @@ </histogram> <histogram name="NewTabPage.Modules.Impression{NewTabPageModules}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1541,7 +1541,7 @@ </histogram> <histogram name="NewTabPage.Modules.LoadedWith.{NtpModule}" enum="NtpModules" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1564,7 +1564,7 @@ </histogram> <histogram name="NewTabPage.Modules.Loaded{NewTabPageModules}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> @@ -1623,7 +1623,7 @@ </histogram> <histogram name="NewTabPage.Modules.Restored{NewTabPageModules}" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1650,7 +1650,7 @@ </histogram> <histogram name="NewTabPage.Modules.Usage{NewTabPageModules}" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1670,7 +1670,7 @@ </histogram> <histogram name="NewTabPage.Modules.VisibleOnNTPLoad" enum="BooleanVisible" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>romanarora@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1916,7 +1916,7 @@ </histogram> <histogram name="NewTabPage.OutlookCalendar.ShownEvents" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jennserrano@google.com</owner> <owner>rtatum@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -2174,7 +2174,7 @@ </histogram> <histogram name="NewTabPage.TabResumption.ClickIndex" units="index" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mfacey@google.com</owner> <owner>romanarora@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -2219,7 +2219,7 @@ </histogram> <histogram name="NewTabPage.TabResumption.TimeElapsedSinceLastVisit" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mfacey@google.com</owner> <owner>romanarora@google.com</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -2352,7 +2352,7 @@ </summary> </histogram> -<histogram name="NewTabPage.TimeSpent" units="ms" expires_after="2026-03-22"> +<histogram name="NewTabPage.TimeSpent" units="ms" expires_after="2026-05-24"> <owner>freedjm@chromium.org</owner> <owner>feed@chromium.org</owner> <owner>olivierrobin@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/notifications/histograms.xml b/tools/metrics/histograms/metadata/notifications/histograms.xml index 2daa9491..faaf5de4 100644 --- a/tools/metrics/histograms/metadata/notifications/histograms.xml +++ b/tools/metrics/histograms/metadata/notifications/histograms.xml
@@ -747,7 +747,7 @@ <histogram name="Notifications.NotificationHelper.NotificationActivatorPrimaryStatus" enum="NotificationHelperNotificationActivatorPrimaryStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>finnur@chromium.org</owner> <owner>peter@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/omnibox/histograms.xml b/tools/metrics/histograms/metadata/omnibox/histograms.xml index 3846caf..d9de2d2 100644 --- a/tools/metrics/histograms/metadata/omnibox/histograms.xml +++ b/tools/metrics/histograms/metadata/omnibox/histograms.xml
@@ -318,7 +318,7 @@ </variants> <histogram name="Omnibox.AcceptedKeywordSuggestion" - enum="OmniboxEnteredKeywordMode2" expires_after="2026-03-22"> + enum="OmniboxEnteredKeywordMode2" expires_after="2026-05-24"> <owner>yoangela@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -822,7 +822,7 @@ </histogram> <histogram name="Omnibox.AnswerParseSuccess" enum="BooleanSuccess" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -832,7 +832,7 @@ </histogram> <histogram name="Omnibox.AnswerParseType" enum="SuggestionAnswerType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -848,7 +848,7 @@ <histogram name="Omnibox.AsyncAutocompletionTime2.Provider.{Provider}{Completed}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -899,7 +899,7 @@ </histogram> <histogram name="Omnibox.AsyncAutocompletionTime2.{Change}{Completed}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -1036,7 +1036,7 @@ </histogram> <histogram name="Omnibox.CharTypedToRepaintLatency" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> @@ -1076,7 +1076,7 @@ </histogram> <histogram name="Omnibox.CharTypedToRepaintLatency.InsertToPresent" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> @@ -1125,7 +1125,7 @@ </histogram> <histogram name="Omnibox.CharTypedToRepaintLatency.ToPaint" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> @@ -1313,7 +1313,7 @@ </histogram> <histogram name="Omnibox.DocumentSuggest.HttpResponseCode" - enum="HttpResponseCode" expires_after="2026-03-22"> + enum="HttpResponseCode" expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -1345,7 +1345,7 @@ </histogram> <histogram name="Omnibox.DocumentSuggest.ProviderAllowed" - enum="DocumentProviderAllowedReason" expires_after="2026-03-22"> + enum="DocumentProviderAllowedReason" expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -1366,7 +1366,7 @@ </histogram> <histogram name="Omnibox.DocumentSuggest.Requests" - enum="DocumentSuggestRequestEvent" expires_after="2026-03-22"> + enum="DocumentSuggestRequestEvent" expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -1376,7 +1376,7 @@ </histogram> <histogram name="Omnibox.DocumentSuggest.RequestTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -1430,7 +1430,7 @@ </histogram> <histogram name="Omnibox.DocumentSuggest.ResultCount" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> @@ -1442,7 +1442,7 @@ </histogram> <histogram name="Omnibox.DocumentSuggest.TotalTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -1520,7 +1520,7 @@ </histogram> <histogram name="Omnibox.EnteredKeywordMode2" enum="OmniboxEnteredKeywordMode2" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -1624,7 +1624,7 @@ <histogram name="Omnibox.FocusToCutOrCopyAllTextTime.ByPageContext.{OmniboxPageContext}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>khalidpeer@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -1643,7 +1643,7 @@ </histogram> <histogram name="Omnibox.FocusToCutOrCopyAllTextTime.{OmniboxZeroPrefixState}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>khalidpeer@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -1663,7 +1663,7 @@ <histogram name="Omnibox.FocusToCutOrCopyAllTextTime.{OmniboxZeroPrefixState}.ByPageContext.{OmniboxPageContext}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>khalidpeer@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -1684,7 +1684,7 @@ </histogram> <histogram name="Omnibox.FocusToOpenTimeAnyPopupState3" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -2061,7 +2061,7 @@ </histogram> <histogram name="Omnibox.KeywordModeUsageByEngineType.{Usage}" - enum="OmniboxBuiltinEngineType" expires_after="2026-03-22"> + enum="OmniboxBuiltinEngineType" expires_after="2026-05-24"> <owner>yoangela@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -3498,7 +3498,7 @@ <histogram name="Omnibox.SuggestionUsed.Search.Experimental.NavigationToFirstMeaningfulPaint" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -4578,7 +4578,7 @@ <histogram name="Omnibox.{SearchPrefetch}.HasNoVarySearchHeader2.{PrefetchFallbackOrInitial}.{NavigationOrSuggestionPrefetch}" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>chikamune@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -4600,7 +4600,7 @@ <histogram name="Omnibox.{SearchPrefetch}.NavigationInterceptedToForwardingComplete" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <owner>chrome-desktop-search@google.com</owner> @@ -4619,7 +4619,7 @@ <histogram name="Omnibox.{SearchPrefetch}.NoVarySearchHeaderLength.{PrefetchFallbackOrInitial}.{NavigationOrSuggestionPrefetch}" - units="length" expires_after="2026-03-22"> + units="length" expires_after="2026-05-24"> <owner>chikamune@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -4641,7 +4641,7 @@ <histogram name="Omnibox.{SearchPrefetch}.PrefetchEligibilityReason2.{NavigationOrSuggestionPrefetch}" - enum="SearchPrefetchEligibilityReason" expires_after="2026-03-22"> + enum="SearchPrefetchEligibilityReason" expires_after="2026-05-24"> <owner>ryansturm@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -4660,7 +4660,7 @@ <histogram name="Omnibox.{SearchPrefetch}.PrefetchFinalStatus.{NavigationOrSuggestionPrefetch}" - enum="SearchPrefetchStatus" expires_after="2026-03-22"> + enum="SearchPrefetchStatus" expires_after="2026-05-24"> <owner>ryansturm@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary> @@ -4678,7 +4678,7 @@ <histogram name="Omnibox.{SearchPrefetch}.PrefetchServingReason2{PrerenderOrNavigation}" - enum="SearchPrefetchServingReason" expires_after="2026-03-22"> + enum="SearchPrefetchServingReason" expires_after="2026-05-24"> <owner>ryansturm@chromium.org</owner> <owner>lingqi@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -4702,7 +4702,7 @@ <histogram name="Omnibox.{SearchPrefetch}.ReceivedServableResponse2.{PrefetchFallbackOrInitial}.{NavigationOrSuggestionPrefetch}" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>ryansturm@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <owner>chrome-prerendering@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/on_device_model/histograms.xml b/tools/metrics/histograms/metadata/on_device_model/histograms.xml index e895f42..58487c8 100644 --- a/tools/metrics/histograms/metadata/on_device_model/histograms.xml +++ b/tools/metrics/histograms/metadata/on_device_model/histograms.xml
@@ -19,7 +19,7 @@ </variants> <histogram name="OnDeviceModel.Android.GenerateResult{ModelExecutionFeature}" - enum="OnDeviceModelAndroidGenerateResult" expires_after="2026-01-28"> + enum="OnDeviceModelAndroidGenerateResult" expires_after="2026-05-24"> <owner>ssid@chromium.org</owner> <owner>xinghuilu@chromium.org</owner> <summary> @@ -123,7 +123,7 @@ </histogram> <histogram name="OnDeviceModel.Embedding.LoadDlcStatus" - enum="EmbeddingModelLoadDlcStatus" expires_after="2026-02-22"> + enum="EmbeddingModelLoadDlcStatus" expires_after="2026-05-24"> <owner>jmpollock@chromium.org</owner> <owner>yich@google.com</owner> <owner>zuan@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml index 6d620c8..0aaa9c9 100644 --- a/tools/metrics/histograms/metadata/optimization/histograms.xml +++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -834,7 +834,7 @@ <histogram name="OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount.{RequestContext}" - units="total url count" expires_after="2026-03-22"> + units="total url count" expires_after="2026-05-24"> <owner>rajendrant@chromium.org</owner> <owner>catliu@chromium.org</owner> <summary> @@ -977,7 +977,7 @@ <histogram name="OptimizationGuide.ModelExecution.FeatureEnabledAtSettingsChange.{ModelExecutionFeature}" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>rajendrant@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary> @@ -1069,7 +1069,7 @@ <histogram name="OptimizationGuide.ModelExecution.OnDeviceDestroyedWhileWaitingForResponseTime.{ModelExecutionFeature}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>holte@chromium.org</owner> <owner>wittman@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index f220c9d..697d6db 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -184,7 +184,7 @@ <!-- LINT.ThenChange(//tools/metrics/histograms/metadata/ui/histograms.xml:WebUIHostname) --> <histogram name="AccessCodeCast.Discovery.AddSinkResult.New" - enum="AccessCodeCastAddSinkResult" expires_after="2026-03-22"> + enum="AccessCodeCastAddSinkResult" expires_after="2026-05-24"> <owner>bzielinski@google.com</owner> <owner>cros-edu-eng@google.com</owner> <summary> @@ -309,7 +309,7 @@ </histogram> <histogram name="AccessCodeCast.Ui.AccessCodeInputTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bzielinski@google.com</owner> <owner>cros-edu-eng@google.com</owner> <summary> @@ -918,7 +918,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NonPremadeContextsCreated" - units="contexts" expires_after="2026-03-22"> + units="contexts" expires_after="2026-05-24"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1461,7 +1461,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.UnusedPremadeContexts" - units="contexts" expires_after="2026-03-22"> + units="contexts" expires_after="2026-05-24"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -2514,7 +2514,7 @@ <histogram name="Ads.InterestGroup.{AuctionType}.TimeFromInputsResolvedToAuctionResolved" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>jkarlin@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -2804,7 +2804,7 @@ </summary> </histogram> -<histogram name="BootTime.Chrome.{Type}" units="ms" expires_after="2026-03-22"> +<histogram name="BootTime.Chrome.{Type}" units="ms" expires_after="2026-05-24"> <owner>takayas@google.com</owner> <owner>uekawa@google.com</owner> <summary> @@ -2863,7 +2863,7 @@ </summary> </histogram> -<histogram name="BootTime.Kernel.{Type}" units="ms" expires_after="2026-03-22"> +<histogram name="BootTime.Kernel.{Type}" units="ms" expires_after="2026-05-24"> <owner>takayas@google.com</owner> <owner>uekawa@google.com</owner> <summary> @@ -2995,7 +2995,7 @@ </summary> </histogram> -<histogram name="BootTime.Total2.{Type}" units="ms" expires_after="2026-03-22"> +<histogram name="BootTime.Total2.{Type}" units="ms" expires_after="2026-05-24"> <owner>takayas@google.com</owner> <owner>uekawa@google.com</owner> <summary> @@ -3035,7 +3035,7 @@ </histogram> <histogram name="BrotliFilter.CompressionPercent" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>eustas@chromium.org</owner> <summary>Compressed/Decompressed size ratio.</summary> </histogram> @@ -4146,7 +4146,7 @@ <histogram name="Feedback.HappinessTrackingSurvey.ShouldShowSurveyReason" enum="HappinessTrackingSurveyShouldShowSurveyReasons" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sauski@google.com</owner> <owner>msramek@chromium.org</owner> <summary> @@ -4242,7 +4242,7 @@ </histogram> <histogram name="Feedback.ReportSending.Online" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xiangdongkong@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -4902,7 +4902,7 @@ </histogram> <histogram name="Hwsec.Attestation.Status{AttestationOps}" - enum="HwsecAttestationOpsStatus" expires_after="2026-03-22"> + enum="HwsecAttestationOpsStatus" expires_after="2026-05-24"> <owner>chingkang@chromium.org</owner> <owner>cros-hwsec-userland-eng+uma@google.com</owner> <summary> @@ -5004,7 +5004,7 @@ </histogram> <histogram name="ImportantFile.SerializationDuration{ImportantFileClients}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>battre@chromium.org</owner> <owner>gab@chromium.org</owner> <summary> @@ -5018,7 +5018,7 @@ </histogram> <histogram name="ImportantFile.WriteDuration{ImportantFileClients}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wylieb@google.com</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -5033,7 +5033,7 @@ <histogram name="Incognito.ClearBrowsingDataDialog.ActionType" enum="IncognitoClearBrowsingDataDialogActionType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>roagarwal@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -5179,7 +5179,7 @@ </histogram> <histogram name="Manifest.HasProperty{ManifestProperties}" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mgiuca@chromium.org</owner> <summary> Tracks which properties of a Manifest were present when it was parsed. If a @@ -5276,7 +5276,7 @@ </histogram> <histogram name="Mojo.Channel.WriteMessageLatency" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>amistry@chromium.org</owner> <owner>bgeffon@chromium.org</owner> <owner>rockot@google.com</owner> @@ -5354,7 +5354,7 @@ </histogram> <histogram name="Mojo.DirectReceiver.AdoptPipeResult" - enum="MojoAdoptPipeResult" expires_after="2026-03-22"> + enum="MojoAdoptPipeResult" expires_after="2026-05-24"> <owner>joenotcharles@google.com</owner> <owner>pasko@chromium.org</owner> <summary> @@ -5367,7 +5367,7 @@ </histogram> <histogram name="Mojo.DirectReceiver.MergePortalsResult" - enum="MojoMergePortalsResult" expires_after="2026-03-22"> + enum="MojoMergePortalsResult" expires_after="2026-05-24"> <owner>joenotcharles@google.com</owner> <owner>pasko@chromium.org</owner> <summary> @@ -5435,7 +5435,7 @@ </histogram> <histogram name="MPArch.ChildProcessLauncher.{Event}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ajgo@chromium.org</owner> <owner>src/sandbox/policy/win/OWNERS</owner> <summary> @@ -5455,7 +5455,7 @@ </histogram> <histogram name="MPArch.ChildProcessLaunchFirst" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>pasko@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -5474,7 +5474,7 @@ </histogram> <histogram name="MultiProfile.UsersPerSessionIncremental" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>skuhne@chromium.org</owner> <owner>antrim@chromium.org</owner> <summary> @@ -5828,7 +5828,7 @@ </histogram> <histogram name="OSCrypt.AppBoundProvider.Decrypt.ResultCode" enum="Hresult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -5853,7 +5853,7 @@ </histogram> <histogram name="OSCrypt.AppBoundProvider.Encrypt.ResultCode" enum="Hresult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -5938,7 +5938,7 @@ </histogram> <histogram name="OSCrypt.DPAPIProvider.Status" enum="OSCryptDPAPIKeyStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -6133,7 +6133,7 @@ </histogram> <histogram name="OSCrypt.Win.KeyDecryptionError" enum="WinGetLastError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>wfh@chromium.org</owner> <owner>forshaw@chromium.org</owner> <summary> @@ -6503,7 +6503,7 @@ </histogram> <histogram name="PLT.iOS.BrowserInitiatedPageLoadTime2" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>michaeldo@chromium.org</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -6549,7 +6549,7 @@ </histogram> <histogram name="PLT.iOS.RendererInitiatedPageLoadTime2" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>michaeldo@chromium.org</owner> <owner>bling-fundamentals@google.com</owner> <summary> @@ -6692,7 +6692,7 @@ </histogram> <histogram name="Process.Sandbox.StartSandboxedWin.{Event}Duration" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>ajgo@chromium.org</owner> <owner>src/sandbox/policy/win/OWNERS</owner> <summary> @@ -6781,7 +6781,7 @@ </histogram> <histogram name="PushMessaging.UnregistrationReason" - enum="PushUnregistrationReason" expires_after="2026-03-22"> + enum="PushUnregistrationReason" expires_after="2026-05-24"> <owner>peter@chromium.org</owner> <owner>knollr@chromium.org</owner> <summary> @@ -6984,7 +6984,7 @@ </histogram> <histogram name="ReduceAcceptLanguage.AcceptLanguageNegotiationRestart" - enum="AcceptLanguageNegotiationRestart" expires_after="2026-03-22"> + enum="AcceptLanguageNegotiationRestart" expires_after="2026-05-24"> <owner>victortan@chromium.org</owner> <owner>awillia@chromium.org</owner> <owner>miketaylr@chromium.org</owner> @@ -7018,7 +7018,7 @@ </histogram> <histogram name="ReduceAcceptLanguage.FetchLatencyUs" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>victortan@chromium.org</owner> <owner>awillia@chromium.org</owner> <owner>miketaylr@chromium.org</owner> @@ -7227,7 +7227,7 @@ </token> </histogram> -<histogram name="SB2.RemoteCall.Elapsed" units="ms" expires_after="2026-03-22"> +<histogram name="SB2.RemoteCall.Elapsed" units="ms" expires_after="2026-05-24"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -7587,7 +7587,7 @@ </histogram> <histogram name="SignedExchange.LoadResult2" enum="SignedExchangeLoadResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ksakamoto@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -8748,7 +8748,7 @@ </summary> </histogram> -<histogram name="Uptime.Logout" units="ms" expires_after="2026-03-22"> +<histogram name="Uptime.Logout" units="ms" expires_after="2026-05-24"> <owner>hidehiko@chromium.org</owner> <owner>junis@google.com</owner> <owner>cros-oac@google.com</owner> @@ -8874,7 +8874,7 @@ </histogram> <histogram name="UserManager.LoginUserType" enum="UserType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>achuith@chromium.org</owner> <owner>antrim@chromium.org</owner> <owner>cros-lurs@google.com</owner> @@ -9009,7 +9009,7 @@ </histogram> <histogram name="WebFont.BlankTextShownTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kenjibaheux@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <summary> @@ -9045,7 +9045,7 @@ </histogram> <histogram name="WebFont.DownloadTime.LoadError" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kenjibaheux@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <summary> @@ -9055,7 +9055,7 @@ </histogram> <histogram name="WebFont.HadBlankText" enum="BooleanHadBlankText" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kenjibaheux@chromium.org</owner> <owner>ksakamoto@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index aee51a2..bfd8b47 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -1431,7 +1431,7 @@ </histogram> <histogram name="PageLoad.Clients.GoogleSearch.CSI.{Event}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sisidovski@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1848,7 +1848,7 @@ <histogram name="PageLoad.Clients.GoogleSearch.ParseTiming.NavigationToParseStart{SyntheticResponseSuffix}" - units="ms" expires_after="2026-03-20"> + units="ms" expires_after="2026-05-24"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@google.com</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -2221,7 +2221,7 @@ </histogram> <histogram name="PageLoad.Clients.LCPP.Subresource.Count.Precision" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yoichio@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS @@ -2239,7 +2239,7 @@ </histogram> <histogram name="PageLoad.Clients.LCPP.Subresource.Count.Recall" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yoichio@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS @@ -2389,7 +2389,7 @@ <histogram name="PageLoad.Clients.MultiTabLoading{OtherLoadingCount}.{Timing}{Background}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary>{Timing} {OtherLoadingCount} {Background}</summary> @@ -2570,7 +2570,7 @@ </histogram> <histogram name="PageLoad.Clients.Prerender.HostReused{PreloadingTriggerType}" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>suzukikeita@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2582,7 +2582,7 @@ <histogram name="PageLoad.Clients.Prerender.InteractiveTiming.FirstInputDelay4{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2595,7 +2595,7 @@ <histogram name="PageLoad.Clients.Prerender.LayoutInstability.CumulativeShiftScore.MainFrame{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2609,7 +2609,7 @@ <histogram name="PageLoad.Clients.Prerender.LayoutInstability.CumulativeShiftScore{PreloadingTriggerType}" - units="scorex10" expires_after="2026-03-22"> + units="scorex10" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2636,7 +2636,7 @@ <histogram name="PageLoad.Clients.Prerender.NavigationToActivation{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2650,7 +2650,7 @@ <histogram name="PageLoad.Clients.Prerender.PaintTiming.ActivationToFirstContentfulPaint{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2665,7 +2665,7 @@ <histogram name="PageLoad.Clients.Prerender.PaintTiming.ActivationToFirstPaint{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2679,7 +2679,7 @@ <histogram name="PageLoad.Clients.Prerender.PaintTiming.ActivationToLargestContentfulPaint2{PreloadingTriggerType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nhiroki@chromium.org</owner> <owner>src/content/browser/preloading/prerender/OWNERS</owner> <summary> @@ -2892,7 +2892,7 @@ <histogram name="PageLoad.Clients.TPCD.CookieAccess.ThirdPartyCookieAllowMechanism3" - enum="ThirdPartyCookieAllowMechanism" expires_after="2026-03-22"> + enum="ThirdPartyCookieAllowMechanism" expires_after="2026-05-24"> <owner>victortan@chromium.org</owner> <owner>src/chrome/browser/tpcd/OWNERS</owner> <summary> @@ -3268,7 +3268,7 @@ </histogram> <histogram name="PageLoad.Cpu.TotalUsageForegrounded" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -3531,7 +3531,7 @@ </histogram> <histogram name="PageLoad.Experimental.TotalForegroundDuration{PageVisitType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>npm@chromium.org</owner> <owner>toyoshim@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -4394,7 +4394,7 @@ </histogram> <histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sullivan@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -4476,7 +4476,7 @@ </histogram> <histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>iclelland@chromium.org</owner> <owner>sullivan@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -4564,7 +4564,7 @@ <histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.MainFrame" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>iclelland@chromium.org</owner> <owner>sullivan@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -4659,7 +4659,7 @@ </histogram> <histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index a6657d72..1acd0f0 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -184,7 +184,7 @@ <histogram name="KeyboardAccessory.AccessoryActionSelectedForNonCredentialFieldWithoutSuggestions" - enum="BooleanYesNo" expires_after="2026-03-22"> + enum="BooleanYesNo" expires_after="2026-05-24"> <owner>luchenpeng@google.com</owner> <owner>piotrkotynia@google.com</owner> <summary> @@ -215,7 +215,7 @@ </histogram> <histogram name="KeyboardAccessory.AccessoryToggleClicked" - enum="AccessoryToggleType" expires_after="2026-03-22"> + enum="AccessoryToggleType" expires_after="2026-05-24"> <owner>ioanap@chromium.org</owner> <owner>friedrichh@chromium.org</owner> <summary> @@ -226,7 +226,7 @@ </histogram> <histogram name="KeyboardAccessory.AccessoryToggleImpression" - enum="AccessoryToggleType" expires_after="2026-03-22"> + enum="AccessoryToggleType" expires_after="2026-05-24"> <owner>ioanap@chromium.org</owner> <owner>friedrichh@chromium.org</owner> <summary> @@ -386,7 +386,7 @@ </histogram> <histogram name="PasswordGeneration.GeneratedPasswordWasEdited" - enum="BooleanGeneratedPasswordWasEdited" expires_after="2026-03-22"> + enum="BooleanGeneratedPasswordWasEdited" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -409,7 +409,7 @@ </histogram> <histogram name="PasswordGeneration.iOS.AcceptedGeneratedPasswordSource" - enum="AcceptedGeneratedPasswordSourceType" expires_after="2026-03-22"> + enum="AcceptedGeneratedPasswordSourceType" expires_after="2026-05-24"> <owner>cloutierc@google.com</owner> <owner>vincb@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -465,7 +465,7 @@ </histogram> <histogram name="PasswordGeneration.SubmissionEvent" - enum="PasswordSubmissionEvent" expires_after="2026-03-22"> + enum="PasswordSubmissionEvent" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -544,7 +544,7 @@ <histogram name="PasswordManager.AccountStorageUserStateDuration{UserSyncingType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> <summary> @@ -878,7 +878,7 @@ </histogram> <histogram name="PasswordManager.BiometricAuthBeforeFillingEnabled2" - enum="BooleanEnabled" expires_after="2026-03-22"> + enum="BooleanEnabled" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -1048,7 +1048,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.UserAction" - enum="PasswordCheckInteraction" expires_after="2026-03-22"> + enum="PasswordCheckInteraction" expires_after="2026-05-24"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -1252,7 +1252,7 @@ </histogram> <histogram name="PasswordManager.CompromisedCredentials3.{Issue}" - units="credentials" expires_after="2026-03-22"> + units="credentials" expires_after="2026-05-24"> <owner>vasilii@chromium.org</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -1464,7 +1464,7 @@ </histogram> <histogram name="PasswordManager.EnableState" enum="PasswordManagerEnableState" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>markusheintz@google.com</owner> <owner>mamir@chromium.org</owner> <summary> @@ -1571,7 +1571,7 @@ </histogram> <histogram name="PasswordManager.FillingAssistanceForSingleUsername" - enum="SingleUsernameFillingAssistance" expires_after="2026-03-22"> + enum="SingleUsernameFillingAssistance" expires_after="2026-05-24"> <owner>vincb@google.com</owner> <owner>eic@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -1635,7 +1635,7 @@ </histogram> <histogram name="PasswordManager.FillingSource" - enum="PasswordManagerFillingSource" expires_after="2026-03-22"> + enum="PasswordManagerFillingSource" expires_after="2026-05-24"> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> <summary> @@ -2067,7 +2067,7 @@ </histogram> <histogram name="PasswordManager.LeakDetection.AnalyzeSingleLeakResponseResult" - enum="PasswordAnalyzeLeakResponseResult" expires_after="2026-03-22"> + enum="PasswordAnalyzeLeakResponseResult" expires_after="2026-05-24"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary>Result of analyzing a single leak response.</summary> @@ -2214,7 +2214,7 @@ </histogram> <histogram name="PasswordManager.LoginDatabaseInit2" - enum="LoginDatabaseInitError" expires_after="2026-03-22"> + enum="LoginDatabaseInitError" expires_after="2026-05-24"> <owner>vasilii@chromium.org</owner> <owner>mamir@chromium.org</owner> <summary> @@ -2399,7 +2399,7 @@ <histogram name="PasswordManager.NewlySavedPasswordHasEmptyUsername.{PasswordType}" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <owner>chrome-password-manager-metrics-alerts@google.com</owner> @@ -2411,7 +2411,7 @@ </histogram> <histogram name="PasswordManager.NonSyncPasswordHashChange" - enum="GaiaPasswordHashChange" expires_after="2026-03-22"> + enum="GaiaPasswordHashChange" expires_after="2026-05-24"> <owner>nwokedi@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2422,7 +2422,7 @@ </histogram> <histogram name="PasswordManager.OpenedAsShortcut" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vasilii@chromium.org</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -2792,7 +2792,7 @@ <histogram name="PasswordManager.PasswordChangeVerificationTriggeredAutomatically" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>atsvirchkova@google.com</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -2892,7 +2892,7 @@ </histogram> <histogram name="PasswordManager.PasswordDropdownShown" - enum="PasswordDropdownState" expires_after="2026-03-22"> + enum="PasswordDropdownState" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary>Logs the state of the password dropdown when it's shown.</summary> @@ -2912,7 +2912,7 @@ </histogram> <histogram name="PasswordManager.PasswordDropdownShown.TotalCount" - units="credentials" expires_after="2026-03-22"> + units="credentials" expires_after="2026-05-24"> <owner>derinel@google.com</owner> <owner>markusheintz@google.com</owner> <summary> @@ -2923,7 +2923,7 @@ <histogram name="PasswordManager.PasswordDropdownShown.WebAuthnRequest.UseAnotherDeviceShown" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>derinel@google.com</owner> <owner>markusheintz@google.com</owner> <summary> @@ -2935,7 +2935,7 @@ <histogram name="PasswordManager.PasswordDropdownShown.WebAuthnRequest{MetricType}" - units="credentials" expires_after="2026-03-22"> + units="credentials" expires_after="2026-05-24"> <owner>derinel@google.com</owner> <owner>markusheintz@google.com</owner> <summary> @@ -3037,7 +3037,7 @@ </histogram> <histogram name="PasswordManager.PasswordReuse.NumberOfMatches" - units="credentials" expires_after="2026-03-22"> + units="credentials" expires_after="2026-05-24"> <owner>nwokedi@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3543,7 +3543,7 @@ </histogram> <histogram name="PasswordManager.PasswordStore{Backend}.{Function}" - enum="PasswordStoreAndroidBackendRequestStatus" expires_after="2026-03-22"> + enum="PasswordStoreAndroidBackendRequestStatus" expires_after="2026-05-24"> <owner>maxan@chromium.org</owner> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> @@ -3564,7 +3564,7 @@ </histogram> <histogram name="PasswordManager.PasswordStore{Backend}.{Function}.Latency" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>maxan@chromium.org</owner> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> @@ -3584,7 +3584,7 @@ </histogram> <histogram name="PasswordManager.PasswordStore{Backend}.{Function}.Success" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>maxan@chromium.org</owner> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> @@ -3804,7 +3804,7 @@ </histogram> <histogram name="PasswordManager.SaveUIDismissalReason{UserSyncingType}" - enum="PasswordManagerUIDismissalReason" expires_after="2026-03-22"> + enum="PasswordManagerUIDismissalReason" expires_after="2026-05-24"> <owner>vasilii@chromium.org</owner> <owner>treib@chromium.org</owner> <owner>mamir@chromium.org</owner> @@ -3950,7 +3950,7 @@ </histogram> <histogram name="PasswordManager.SubmittedFormType2" enum="PasswordFormType2" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <owner>chrome-password-manager-metrics-alerts@google.com</owner> @@ -4132,7 +4132,7 @@ <histogram name="PasswordManager.TouchToFill.PasswordGeneration.TriggerOutcome" enum="TouchToFillPasswordGenerationTriggerOutcome" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>atsvirchkova@google.com</owner> <owner>ioanap@chromium.org</owner> <summary> @@ -4216,7 +4216,7 @@ </histogram> <histogram name="PasswordManager.UIDismissalReason" - enum="PasswordManagerUIDismissalReason" expires_after="2026-03-22"> + enum="PasswordManagerUIDismissalReason" expires_after="2026-05-24"> <owner>vasilii@chromium.org</owner> <owner>mamir@chromium.org</owner> <summary> @@ -4344,7 +4344,7 @@ </histogram> <histogram name="PasswordManager.WellKnownChangePasswordResult" - enum="WellKnownChangePasswordResult" expires_after="2026-03-22"> + enum="WellKnownChangePasswordResult" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>jkeitel@google.com</owner> <summary> @@ -4372,7 +4372,7 @@ </histogram> <histogram name="PasswordManager.{Location}.AuthenticationResult" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -4408,7 +4408,7 @@ <histogram name="PasswordManager.{Store}BlacklistedSitesHiRes3{CustomPassphraseStatus}" - units="sites" expires_after="2026-03-22"> + units="sites" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> @@ -4423,7 +4423,7 @@ </histogram> <histogram name="PasswordManager.{Store}InaccessiblePasswords3" - units="saved passwords" expires_after="2026-03-22"> + units="saved passwords" expires_after="2026-05-24"> <owner>derinel@google.com</owner> <owner>vasilii@chromium.org</owner> <owner>mamir@chromium.org</owner> @@ -4439,7 +4439,7 @@ </histogram> <histogram name="PasswordManager.{Store}LoginDatabaseEncryptionStatus" - enum="LoginDatabaseEncryptionStatus" expires_after="2026-03-22"> + enum="LoginDatabaseEncryptionStatus" expires_after="2026-05-24"> <owner>derinel@google.com</owner> <owner>mamir@chromium.org</owner> <summary> @@ -4526,7 +4526,7 @@ <histogram name="PasswordManager.{Store}TimesPasswordUsed3.{PasswordType}{CustomPassphraseStatus}" - units="PasswordUses" expires_after="2026-03-22"> + units="PasswordUses" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>battre@chromium.org</owner> <owner>mamir@chromium.org</owner> @@ -4544,7 +4544,7 @@ </histogram> <histogram name="PasswordManager.{Store}TotalAccountsHiRes3.WithScheme{Scheme}" - units="accounts" expires_after="2026-03-22"> + units="accounts" expires_after="2026-05-24"> <owner>battre@chromium.org</owner> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> @@ -4561,7 +4561,7 @@ <histogram name="PasswordManager.{Store}{Metric3}.{PasswordType}{CustomPassphraseStatus}{StoreErrorStatus}" - units="units" expires_after="2026-03-22"> + units="units" expires_after="2026-05-24"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <owner>mamir@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/payment/histograms.xml b/tools/metrics/histograms/metadata/payment/histograms.xml index b601fad7..b7f9df5e 100644 --- a/tools/metrics/histograms/metadata/payment/histograms.xml +++ b/tools/metrics/histograms/metadata/payment/histograms.xml
@@ -48,7 +48,7 @@ </histogram> <histogram name="PaymentRequest.CheckoutFunnel" - enum="PaymentRequestCheckoutFunnelSteps" expires_after="2026-03-22"> + enum="PaymentRequestCheckoutFunnelSteps" expires_after="2026-05-24"> <owner>smcgruer@chromium.org</owner> <owner>chrome-payments-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/pdf/histograms.xml b/tools/metrics/histograms/metadata/pdf/histograms.xml index a00ba61..1af25568a 100644 --- a/tools/metrics/histograms/metadata/pdf/histograms.xml +++ b/tools/metrics/histograms/metadata/pdf/histograms.xml
@@ -271,7 +271,7 @@ </summary> </histogram> -<histogram name="PDF.RenderAndPaintTime" units="ms" expires_after="2026-03-22"> +<histogram name="PDF.RenderAndPaintTime" units="ms" expires_after="2026-05-24"> <owner>thestig@chromium.org</owner> <owner>ask@chromium.org</owner> <summary> @@ -282,7 +282,7 @@ </histogram> <histogram name="PDF.RenderAndPaintVisiblePagesTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>thestig@chromium.org</owner> <owner>ask@chromium.org</owner> <summary> @@ -292,7 +292,7 @@ </histogram> <histogram name="PDF.RenderPaintAndFlushTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>thestig@chromium.org</owner> <owner>ask@chromium.org</owner> <summary> @@ -428,7 +428,7 @@ </summary> </histogram> -<histogram name="PDF.Version" enum="PDFVersion" expires_after="2026-03-22"> +<histogram name="PDF.Version" enum="PDFVersion" expires_after="2026-05-24"> <owner>dhoss@chromium.org</owner> <owner>thestig@chromium.org</owner> <summary>Tracks versions of documents opened in the PDF viewer.</summary>
diff --git a/tools/metrics/histograms/metadata/performance_controls/histograms.xml b/tools/metrics/histograms/metadata/performance_controls/histograms.xml index bfb7b68..c9aceb8 100644 --- a/tools/metrics/histograms/metadata/performance_controls/histograms.xml +++ b/tools/metrics/histograms/metadata/performance_controls/histograms.xml
@@ -244,7 +244,7 @@ </histogram> <histogram name="PerformanceControls.Intervention.DiscardedTabsPercentageUsage" - units="%" expires_after="2026-03-22"> + units="%" expires_after="2026-05-24"> <owner>stluong@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/performance_manager/histograms.xml b/tools/metrics/histograms/metadata/performance_manager/histograms.xml index c6b8d72..ea859239 100644 --- a/tools/metrics/histograms/metadata/performance_manager/histograms.xml +++ b/tools/metrics/histograms/metadata/performance_manager/histograms.xml
@@ -90,7 +90,7 @@ </histogram> <histogram name="CPU.Experimental.CpuEstimationThreadTimePercent.{CoreType}" - units="%" expires_after="2026-03-22"> + units="%" expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -230,7 +230,7 @@ </histogram> <histogram name="PerformanceManager.Experimental.AccessibilityModeFlag" - enum="AccessibilityModeFlagEnum" expires_after="2026-03-22"> + enum="AccessibilityModeFlagEnum" expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>chrome-catan@google.com</owner> <summary> @@ -240,7 +240,7 @@ </histogram> <histogram name="PerformanceManager.Experimental.HasAccessibilityModeFlag" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>chrome-catan@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml index 011e0f3f..583d6642 100644 --- a/tools/metrics/histograms/metadata/permissions/histograms.xml +++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -611,7 +611,7 @@ </histogram> <histogram name="Permissions.CrowdDeny.PreloadData.DelayedPushNotification" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>elklm@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -626,7 +626,7 @@ </histogram> <histogram name="Permissions.CrowdDeny.PreloadData.NotificationUxQuality" - enum="CrowdDenyNotificationUxQuality" expires_after="2026-03-22"> + enum="CrowdDenyNotificationUxQuality" expires_after="2026-05-24"> <owner>andypaicu@chromium.org</owner> <owner>engedy@chromium.org</owner> <owner>hkamila@chromium.org</owner> @@ -659,7 +659,7 @@ </histogram> <histogram name="Permissions.CrowdDeny.SafeBrowsing.Verdict" - enum="CrowdDenySafeBrowsingVerdict" expires_after="2026-03-22"> + enum="CrowdDenySafeBrowsingVerdict" expires_after="2026-05-24"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1653,7 +1653,7 @@ </histogram> <histogram name="Permissions.Prompt.{PermissionType}.ShownInActiveBrowser" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>tungnh@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1682,7 +1682,7 @@ </histogram> <histogram name="Permissions.Prompt.{PermissionType}.{Disposition}.Action" - enum="PermissionAction" expires_after="2026-03-22"> + enum="PermissionAction" expires_after="2026-05-24"> <owner>elklm@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -2321,7 +2321,7 @@ </histogram> <histogram name="WebsiteSettings.Action" enum="WebsiteSettingsAction" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>estark@chromium.org</owner> <owner>dullweber@chromium.org</owner> <summary> @@ -2370,7 +2370,7 @@ </histogram> <histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Blocked" - enum="ContentType" expires_after="2026-03-22"> + enum="ContentType" expires_after="2026-05-24"> <owner>andypaicu@chromium.org</owner> <owner>engedy@chromium.org</owner> <owner>hkamila@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml index fd8f45f..8008bbe 100644 --- a/tools/metrics/histograms/metadata/platform/histograms.xml +++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -71,7 +71,7 @@ </histogram> <histogram name="Platform.BootMode.FirmwareWriteProtect.{FirmwareType}" - enum="Platform.BootMode.FirmwareWriteProtect" expires_after="2026-03-22"> + enum="Platform.BootMode.FirmwareWriteProtect" expires_after="2026-05-24"> <owner>enlightened@chromium.org</owner> <owner>chromeos-hardening@google.com</owner> <summary> @@ -166,7 +166,7 @@ </histogram> <histogram name="Platform.Chaps.TokenManager.UnloadToken" - enum="TokenManagerStatus" expires_after="2026-03-22"> + enum="TokenManagerStatus" expires_after="2026-05-24"> <owner>chenyian@google.com</owner> <owner>cros-hwsec-userland-eng+uma@google.com</owner> <summary> @@ -193,7 +193,7 @@ </histogram> <histogram name="Platform.CoralService.ClusteringEngine.GeneratedGroupCount" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -205,7 +205,7 @@ </histogram> <histogram name="Platform.CoralService.ClusteringEngine.GroupItemCount" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -216,7 +216,7 @@ </histogram> <histogram name="Platform.CoralService.ClusteringEngine.InputCount" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -227,7 +227,7 @@ </histogram> <histogram name="Platform.CoralService.EmbeddingEngine.CacheHit" - enum="BooleanCacheHit" expires_after="2026-03-22"> + enum="BooleanCacheHit" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -241,7 +241,7 @@ </histogram> <histogram name="Platform.CoralService.EmbeddingEngine.DatabaseEntriesCount" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -307,7 +307,7 @@ </histogram> <histogram name="Platform.CoralService.EmbeddingEngine.SafetyVerdict" - enum="CoralSafetyVerdict" expires_after="2026-03-22"> + enum="CoralSafetyVerdict" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -333,7 +333,7 @@ </histogram> <histogram name="Platform.CoralService.Error.{EngineType}" enum="CoralStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -352,7 +352,7 @@ </histogram> <histogram name="Platform.CoralService.Error.{OperationType}" - enum="CoralStatus" expires_after="2026-03-22"> + enum="CoralStatus" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -378,7 +378,7 @@ <histogram name="Platform.CoralService.Latency.EmbeddingEngine.GenerateEmbedding" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -390,7 +390,7 @@ </histogram> <histogram name="Platform.CoralService.Latency.EmbeddingEngine.LoadModel" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -405,7 +405,7 @@ <histogram name="Platform.CoralService.Latency.TitleGenerationEngine.GenerateTitle" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -417,7 +417,7 @@ </histogram> <histogram name="Platform.CoralService.Latency.TitleGenerationEngine.LoadModel" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -431,7 +431,7 @@ </histogram> <histogram name="Platform.CoralService.Latency.{EngineType}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -450,7 +450,7 @@ </histogram> <histogram name="Platform.CoralService.Latency.{OperationType}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -466,7 +466,7 @@ <histogram name="Platform.CoralService.TitleGenerationEngine.CacheDifferenceRatio" - units="%" expires_after="2026-03-22"> + units="%" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -481,7 +481,7 @@ </histogram> <histogram name="Platform.CoralService.TitleGenerationEngine.CacheHit" - enum="BooleanCacheHit" expires_after="2026-03-22"> + enum="BooleanCacheHit" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -493,7 +493,7 @@ </histogram> <histogram name="Platform.CoralService.TitleGenerationEngine.GenerationResult" - enum="CoralTitleGenerationResult" expires_after="2026-03-22"> + enum="CoralTitleGenerationResult" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -504,7 +504,7 @@ </histogram> <histogram name="Platform.CoralService.TitleGenerationEngine.InputTokenSize" - units="tokens" expires_after="2026-03-22"> + units="tokens" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -529,7 +529,7 @@ </histogram> <histogram name="Platform.CoralService.TitleGenerationEngine.LengthInWords" - units="words" expires_after="2026-03-22"> + units="words" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -544,7 +544,7 @@ </histogram> <histogram name="Platform.CoralService.TitleGenerationEngine.ModelLoaded" - enum="BooleanLoaded" expires_after="2026-03-22"> + enum="BooleanLoaded" expires_after="2026-05-24"> <owner>hcyang@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -712,7 +712,7 @@ </histogram> <histogram name="Platform.DiskUsage.NumUserHomeDirectories" - units="home directories" expires_after="2026-03-22"> + units="home directories" expires_after="2026-05-24"> <owner>achuith@chromium.org</owner> <owner>tls@chromium.org</owner> <summary> @@ -1002,7 +1002,7 @@ </histogram> <histogram name="Platform.FlexHwis.ServerPostSuccess" enum="BooleanSuccess" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tinghaolin@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -1021,7 +1021,7 @@ </histogram> <histogram name="Platform.FlexHwis.ServerPutSuccess" enum="BooleanSuccess" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tinghaolin@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary> @@ -1144,7 +1144,7 @@ </histogram> <histogram name="Platform.IntelMaxMicroArchitecture" - enum="IntelMaxMicroArchitecture" expires_after="2026-03-22"> + enum="IntelMaxMicroArchitecture" expires_after="2026-05-24"> <owner>fbarchard@chromium.org</owner> <owner>pwnall@chromium.org</owner> <summary> @@ -1300,7 +1300,7 @@ </histogram> <histogram name="Platform.Libhwsec.RetryAction{Category}" - enum="HwsecRetryActionEnum" expires_after="2026-03-22"> + enum="HwsecRetryActionEnum" expires_after="2026-05-24"> <owner>yich@google.com</owner> <owner>cros-hwsec-userland-eng+uma@google.com</owner> <summary> @@ -1499,7 +1499,7 @@ </histogram> <histogram name="Platform.MantisService.Latency.{OperationType}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fairuzi@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -1518,7 +1518,7 @@ </histogram> <histogram name="Platform.MantisService.ModelLoaded" enum="BooleanLoaded" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fairuzi@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -1558,7 +1558,7 @@ </histogram> <histogram name="Platform.Memory.ARC{ProcessMemoryType}" units="MiB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bgeffon@chromium.org</owner> <owner>khmel@chromium.org</owner> <owner>chromeos-memory@google.com</owner> @@ -1572,7 +1572,7 @@ </histogram> <histogram name="Platform.Memory.Browser{ProcessMemoryType}" units="MiB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bgeffon@chromium.org</owner> <owner>chromeos-memory@google.com</owner> <summary> @@ -1598,7 +1598,7 @@ </histogram> <histogram name="Platform.Memory.Gpu{ProcessMemoryType}" units="MiB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bgeffon@chromium.org</owner> <owner>chromeos-memory@google.com</owner> <summary> @@ -1764,7 +1764,7 @@ </histogram> <histogram name="Platform.Missive.ClientEnqueueResult" - enum="EnterpriseCloudReportingStatusCode" expires_after="2026-03-22"> + enum="EnterpriseCloudReportingStatusCode" expires_after="2026-05-24"> <owner>djzhang@google.com</owner> <owner>jdudder@google.com</owner> <owner>cros-reporting-team@google.com</owner> @@ -1956,7 +1956,7 @@ </histogram> <histogram name="Platform.Modemfwd.DlcInstallResult" - enum="ModemfwdDlcInstallResult" expires_after="2026-03-22"> + enum="ModemfwdDlcInstallResult" expires_after="2026-05-24"> <owner>andrewlassalle@google.com</owner> <owner>ujjwalpande@google.com</owner> <summary> @@ -2157,7 +2157,7 @@ </histogram> <histogram name="Platform.SafetyService.ClassifySafetyLatency.{Ruleset}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>chensa@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -2180,7 +2180,7 @@ </histogram> <histogram name="Platform.SafetyService.ClassifySafetyResult.{Ruleset}" - enum="SafetyServiceVerdict" expires_after="2026-03-22"> + enum="SafetyServiceVerdict" expires_after="2026-05-24"> <owner>chensa@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -2210,7 +2210,7 @@ </histogram> <histogram name="Platform.SafetyService.Error.GetOnDeviceSafetySession" - enum="SafetyServiceGetOnDeviceSessionResult" expires_after="2026-03-22"> + enum="SafetyServiceGetOnDeviceSessionResult" expires_after="2026-05-24"> <owner>chensa@google.com</owner> <owner>cros-odml-foundations-eng@google.com</owner> <summary> @@ -2737,7 +2737,7 @@ </histogram> <histogram name="Platform.TPM.TimeToTakeOwnership" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yich@google.com</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -2747,7 +2747,7 @@ </histogram> <histogram name="Platform.TPM.TpmManagerSecretStatus" - enum="TpmManagerSecretStatus" expires_after="2026-03-22"> + enum="TpmManagerSecretStatus" expires_after="2026-05-24"> <owner>yich@google.com</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -2769,7 +2769,7 @@ </histogram> <histogram name="Platform.TPM1.CommandAndResponse.{Client}" - enum="TPM1CommandAndResponse" expires_after="2026-03-22"> + enum="TPM1CommandAndResponse" expires_after="2026-05-24"> <owner>chingkang@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -2791,7 +2791,7 @@ </histogram> <histogram name="Platform.TPM2.CommandAndResponse.{Client}" - enum="TPM2CommandAndResponse" expires_after="2026-03-22"> + enum="TPM2CommandAndResponse" expires_after="2026-05-24"> <owner>chingkang@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -2867,7 +2867,7 @@ </histogram> <histogram name="Platform.Trunks.TpmErrorCode" enum="TPMResponseCode" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>yich@google.com</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -2931,7 +2931,7 @@ </histogram> <histogram name="Platform.UnaggregatedUsageTime" units="seconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>iby@chromium.org</owner> <owner>chromeos-data-eng@google.com</owner> <summary> @@ -3085,7 +3085,7 @@ </histogram> <histogram name="Platform.{GSC}.BoardIdFlags" enum="Cr50BoardIdFlags" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>apronin@chromium.org</owner> <owner>vbendeb@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> @@ -3101,7 +3101,7 @@ </histogram> <histogram name="Platform.{GSC}.BoardIdOfRlzMismatch" enum="Cr50CrosRlzCodes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vbendeb@chromium.org</owner> <owner>apronin@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> @@ -3150,7 +3150,7 @@ </histogram> <histogram name="Platform.{GSC}.RlzOfBoardIdMismatch" enum="Cr50CrosRlzCodes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vbendeb@chromium.org</owner> <owner>apronin@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml index ee434769d..4f8aa72 100644 --- a/tools/metrics/histograms/metadata/power/histograms.xml +++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -381,7 +381,7 @@ <histogram name="PerformanceMonitor.UsageScenario.LongInterval" enum="PerformanceMonitor.UsageScenario.LongInterval" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>olivierli@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -744,7 +744,7 @@ </histogram> <histogram name="Power.BatteryDischargeRate" units="mW" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -1004,7 +1004,7 @@ </histogram> <histogram name="Power.CpuTimeSecondsPerProcessType" enum="ProcessType2" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>eseckler@chromium.org</owner> <owner>skyostil@chromium.org</owner> <owner>woa-performance@google.com</owner> @@ -1313,7 +1313,7 @@ </histogram> <histogram name="Power.ForegroundBatteryDrain.30Seconds{Exclusive}" units="uAh" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>eseckler@chromium.org</owner> <owner>skyostil@chromium.org</owner> <owner>woa-performance@google.com</owner> @@ -1359,7 +1359,7 @@ </histogram> <histogram name="Power.ForegroundBatteryDrain{Exclusive}" units="0.1 mAh" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>eseckler@chromium.org</owner> <owner>skyostil@chromium.org</owner> <owner>woa-performance@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/prefetch/histograms.xml b/tools/metrics/histograms/metadata/prefetch/histograms.xml index bfda47b..dde4afb 100644 --- a/tools/metrics/histograms/metadata/prefetch/histograms.xml +++ b/tools/metrics/histograms/metadata/prefetch/histograms.xml
@@ -596,7 +596,7 @@ </histogram> <histogram name="PrefetchProxy.AfterClick.WasFullRedirectChainServed" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -796,7 +796,7 @@ </histogram> <histogram name="PrefetchProxy.Prefetch.Mainframe.TotalTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -806,7 +806,7 @@ </histogram> <histogram name="PrefetchProxy.Prefetch.RedirectChainSize" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -816,7 +816,7 @@ </histogram> <histogram name="PrefetchProxy.Prefetch.StreamingURLLoaderFinalStatus" - enum="PrefetchStreamingURLLoaderStatus" expires_after="2026-03-22"> + enum="PrefetchStreamingURLLoaderStatus" expires_after="2026-05-24"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -870,7 +870,7 @@ </histogram> <histogram name="PrefetchProxy.Redirect.Result" enum="PrefetchRedirectResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/preloading/histograms.xml b/tools/metrics/histograms/metadata/preloading/histograms.xml index bb5c23c1..4029c6f 100644 --- a/tools/metrics/histograms/metadata/preloading/histograms.xml +++ b/tools/metrics/histograms/metadata/preloading/histograms.xml
@@ -374,7 +374,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.ActualMatchThen.TimeFromPrefetchContainerAddedToMatchStart" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -389,7 +389,7 @@ </histogram> <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.Count" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -495,7 +495,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.IsPotentialMatch" - units="bool" expires_after="2026-03-22"> + units="bool" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -510,7 +510,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.IsPotentialMatch.WithAheadOfPrerender" - units="bool" expires_after="2026-03-22"> + units="bool" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -526,7 +526,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.PotentialMatchThen.IsActualMatch" - units="bool" expires_after="2026-03-22"> + units="bool" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -540,7 +540,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.PotentialMatchThen.MatchDuration{PreloadServingMetricsActualMatchSuffix}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -557,7 +557,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.PotentialMatchThen.NumberOfInitialCandidates" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -573,7 +573,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.PotentialMatchThen.NumberOfInitialCandidatesBlockUntilHead" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -589,7 +589,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.PotentialMatchThen.PotentialCandidateServingResult.Last" - enum="PrefetchPotentialCandidateServingResult" expires_after="2026-03-22"> + enum="PrefetchPotentialCandidateServingResult" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -605,7 +605,7 @@ <histogram name="{PreloadServingMetricsPrefix}.PrefetchMatchMetrics.PotentialMatchThen.WithAheadOfPrerender.PotentialCandidateServingResult" - enum="PrefetchPotentialCandidateServingResult" expires_after="2026-03-22"> + enum="PrefetchPotentialCandidateServingResult" expires_after="2026-05-24"> <owner>kenoss@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/printing/histograms.xml b/tools/metrics/histograms/metadata/printing/histograms.xml index ce9c658..bf610a30 100644 --- a/tools/metrics/histograms/metadata/printing/histograms.xml +++ b/tools/metrics/histograms/metadata/printing/histograms.xml
@@ -273,7 +273,7 @@ </histogram> <histogram name="Printing.CUPS.PrinterEditDialogActions" - enum="PrinterEditDialogActions" expires_after="2026-03-22"> + enum="PrinterEditDialogActions" expires_after="2026-05-24"> <owner>nmuggli@google.com</owner> <owner>project-bolton@google.com</owner> <summary> @@ -705,7 +705,7 @@ </histogram> <histogram name="PrintPreview.PrintSettings" enum="PrintSettings" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>thestig@chromium.org</owner> <owner>awscreen@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml index 98f4733..19d130d 100644 --- a/tools/metrics/histograms/metadata/privacy/histograms.xml +++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -416,7 +416,7 @@ </histogram> <histogram name="Privacy.DIPS.ClearedSitesCount{DIPSCookieMode}" units="sites" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>liu@chromium.org</owner> <owner>src/content/browser/btm/OWNERS</owner> <summary> @@ -549,7 +549,7 @@ </histogram> <histogram name="Privacy.DIPS.Deletion{DIPSCookieMode}" - enum="DIPSDeletionAction" expires_after="2026-03-22"> + enum="DIPSDeletionAction" expires_after="2026-05-24"> <owner>njeunje@chromium.org</owner> <owner>src/content/browser/btm/OWNERS</owner> <summary> @@ -660,7 +660,7 @@ </histogram> <histogram name="Privacy.QuickDelete" enum="QuickDeleteAction" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fsenra@google.com</owner> <owner>zalmashni@google.com</owner> <owner>chrome-browser-privacy-team@google.com</owner> @@ -1228,7 +1228,7 @@ </histogram> <histogram name="PrivacySandbox.Attestations.InitializationDuration.Parsing" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>shivanisha@chromium.org</owner> <owner>xiaochenzh@chromium.org</owner> <summary> @@ -1253,7 +1253,7 @@ </histogram> <histogram name="PrivacySandbox.Attestations.IsSiteAttested.FileSource" - enum="PrivacySandboxAttestationsFileSource" expires_after="2026-03-22"> + enum="PrivacySandboxAttestationsFileSource" expires_after="2026-05-24"> <owner>shivanisha@chromium.org</owner> <owner>xiaochenzh@chromium.org</owner> <summary> @@ -1312,7 +1312,7 @@ </histogram> <histogram name="PrivacySandbox.Attestations.Parsing.Status" - enum="PrivacySandboxAttestationParsingStatus" expires_after="2026-03-22"> + enum="PrivacySandboxAttestationParsingStatus" expires_after="2026-05-24"> <owner>shivanisha@chromium.org</owner> <owner>xiaochenzh@chromium.org</owner> <summary> @@ -1575,7 +1575,7 @@ <histogram name="PrivacySandbox.PrivateAggregation.Budgeter.RequestResult3" enum="PrivacySandboxPrivateAggregationBudgeterRequestResult3" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>linnan@chromium.org</owner> <summary> @@ -1709,7 +1709,7 @@ <histogram name="PrivacySandbox.PrivateAggregation.Host.PipeResult" enum="PrivacySandboxPrivateAggregationHostPipeResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>linnan@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/profile/histograms.xml b/tools/metrics/histograms/metadata/profile/histograms.xml index 9adfb41..5929319 100644 --- a/tools/metrics/histograms/metadata/profile/histograms.xml +++ b/tools/metrics/histograms/metadata/profile/histograms.xml
@@ -74,7 +74,7 @@ <!-- LINT.ThenChange(//components/profile_metrics/state.h:StateSuffix) --> <histogram name="Profile.AddNewUser" enum="ProfileAddNewUser" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rogerta@chromium.org</owner> <summary>The frequency of ways that new user profiles are added.</summary> </histogram> @@ -260,7 +260,7 @@ </histogram> <histogram name="Profile.Incognito.Lifetime" units="minutes" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rhalavati@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -400,7 +400,7 @@ </histogram> <histogram name="Profile.NumberOfActiveProfiles{ProfileActivityThreshold}" - units="profiles" expires_after="2026-03-22"> + units="profiles" expires_after="2026-05-24"> <owner>droger@chromium.org</owner> <owner>feuunk@chromium.org</owner> <summary> @@ -443,7 +443,7 @@ </histogram> <histogram name="Profile.NumberOfManagedProfiles{ProfileActivityThreshold}" - units="profiles" expires_after="2026-03-22"> + units="profiles" expires_after="2026-05-24"> <owner>agawronska@chromium.org</owner> <owner>cros-families-eng@google.com</owner> <summary> @@ -479,7 +479,7 @@ </histogram> <histogram name="Profile.NumberOfProfiles" units="profiles" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -637,7 +637,7 @@ </histogram> <histogram name="Profile.ProfileError2" enum="ProfileErrorType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>etienneb@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -658,7 +658,7 @@ </histogram> <histogram name="Profile.SessionDuration.PerProfile" enum="Profile" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>msarda@chromium.org</owner> <owner>alexilin@chromium.org</owner> <summary> @@ -680,7 +680,7 @@ </histogram> <histogram name="Profile.State.LastUsed{ProfileStateGroup}" units="days" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -702,7 +702,7 @@ <histogram name="Profile.State.UnconsentedPrimaryAccountType{ProfileStateGroup}" - enum="ProfileUnconsentedPrimaryAccountType" expires_after="2026-03-22"> + enum="ProfileUnconsentedPrimaryAccountType" expires_after="2026-05-24"> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -712,7 +712,7 @@ </summary> </histogram> -<histogram name="Profile.TotalSize" units="MB" expires_after="2026-03-22"> +<histogram name="Profile.TotalSize" units="MB" expires_after="2026-05-24"> <owner>etienneb@chromium.org</owner> <owner>gab@chromium.org</owner> <summary>Total size of the profile data (excluding sub-folders).</summary> @@ -879,7 +879,7 @@ </histogram> <histogram name="ProfilePicker.FirstRun.ExitStatus" enum="FirstRunExitStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dgn@chromium.org</owner> <owner>for-you-fre@google.com</owner> <summary> @@ -985,7 +985,7 @@ </histogram> <histogram name="ProfilePicker.StartupTime.FirstPaint" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -997,7 +997,7 @@ <histogram name="ProfilePicker.StartupTime.FirstPaint.FromApplicationStart{StartupTemperatureSuffix}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/quota/histograms.xml b/tools/metrics/histograms/metadata/quota/histograms.xml index 248e09b..a9ab05d 100644 --- a/tools/metrics/histograms/metadata/quota/histograms.xml +++ b/tools/metrics/histograms/metadata/quota/histograms.xml
@@ -358,7 +358,7 @@ </summary> </histogram> -<histogram name="Quota.TotalDiskSpace" units="MB" expires_after="2026-03-22"> +<histogram name="Quota.TotalDiskSpace" units="MB" expires_after="2026-05-24"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml index 4a04fbd..83b7d7f 100644 --- a/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml +++ b/tools/metrics/histograms/metadata/regional_capabilities/histograms.xml
@@ -123,7 +123,7 @@ <!-- LINT.IfChange(RegionalCapabilities.FunnelStage.Reported) --> <histogram name="RegionalCapabilities.FunnelStage.Reported" - enum="RegionalCapabilitiesFunnelStage" expires_after="2026-03-22"> + enum="RegionalCapabilitiesFunnelStage" expires_after="2026-05-24"> <owner>dgn@chromium.org</owner> <owner>chrome-regionalcapabilities@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/renderer/histograms.xml b/tools/metrics/histograms/metadata/renderer/histograms.xml index 1dffdc7..7718421 100644 --- a/tools/metrics/histograms/metadata/renderer/histograms.xml +++ b/tools/metrics/histograms/metadata/renderer/histograms.xml
@@ -51,7 +51,7 @@ </variants> <histogram name="Renderer.BrowserLaunchToRunLoopStart" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sky@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -280,7 +280,7 @@ </histogram> <histogram name="Renderer.Font.PrimaryFont.DomContentLoaded" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kojii@chromium.org</owner> <owner>tkent@chromium.org</owner> <owner>layout-dev@chromium.org</owner> @@ -304,7 +304,7 @@ </histogram> <histogram name="Renderer.Font.PrimaryFont.FCP" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kojii@chromium.org</owner> <owner>tkent@chromium.org</owner> <owner>layout-dev@chromium.org</owner> @@ -328,7 +328,7 @@ </histogram> <histogram name="Renderer.Font.SystemFallback.DomContentLoaded" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kojii@chromium.org</owner> <owner>tkent@chromium.org</owner> <owner>layout-dev@chromium.org</owner> @@ -343,7 +343,7 @@ </histogram> <histogram name="Renderer.Font.SystemFallback.FCP" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kojii@chromium.org</owner> <owner>tkent@chromium.org</owner> <owner>layout-dev@chromium.org</owner> @@ -662,7 +662,7 @@ </histogram> <histogram name="RendererScheduler.QueueingDuration.{Priority}Priority" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>szager@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/renderer4/histograms.xml b/tools/metrics/histograms/metadata/renderer4/histograms.xml index 23f5a5ef..039d1d4 100644 --- a/tools/metrics/histograms/metadata/renderer4/histograms.xml +++ b/tools/metrics/histograms/metadata/renderer4/histograms.xml
@@ -166,7 +166,7 @@ </histogram> <histogram name="Renderer4.MainThreadGestureScrollReason2" - enum="MainThreadScrollingReason2" expires_after="2026-03-22"> + enum="MainThreadScrollingReason2" expires_after="2026-05-24"> <owner>flackr@chromium.org</owner> <owner>pdr@chromium.org</owner> <owner>input-dev@chromium.org</owner> @@ -185,7 +185,7 @@ </histogram> <histogram name="Renderer4.MainThreadWheelScrollReason2" - enum="MainThreadScrollingReason2" expires_after="2026-03-22"> + enum="MainThreadScrollingReason2" expires_after="2026-05-24"> <owner>flackr@chromium.org</owner> <owner>pdr@chromium.org</owner> <owner>input-dev@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml index d566a873..3caa865 100644 --- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -243,7 +243,7 @@ </histogram> <histogram name="SafeBrowsing.AndroidTelemetry.ApkDownload.Outcome" - enum="ApkDownloadTelemetryOutcome" expires_after="2026-03-22"> + enum="ApkDownloadTelemetryOutcome" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -388,7 +388,7 @@ <histogram name="SafeBrowsing.BrowserThrottle.IsCheckCompletedOnProcessResponse" - enum="BooleanCompleted" expires_after="2026-03-22"> + enum="BooleanCompleted" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -403,7 +403,7 @@ <histogram name="SafeBrowsing.BrowserThrottle.RequestDestination{RequestedSkippedOrChecked}" - enum="RequestDestination" expires_after="2026-02-09"> + enum="RequestDestination" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -601,7 +601,7 @@ <histogram name="SafeBrowsing.ClientSafeBrowsingReport.NetworkResult{IsAccessTokenIncluded}" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <!-- Note to owner: This histogram can be renewed 1 full year if it is still useful for Chirp alerts (go/crca-alerts). --> @@ -1356,7 +1356,7 @@ </histogram> <histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateVersion" - units="FileTypePolicies Version" expires_after="2026-03-22"> + units="FileTypePolicies Version" expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1614,7 +1614,7 @@ </histogram> <histogram name="SafeBrowsing.HitReport.NetworkResult" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <!-- Note to owner: This histogram can be renewed 1 full year if it is still useful for Chirp alerts (go/crca-alerts). --> @@ -1660,7 +1660,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.BackoffState" enum="BooleanBackoff" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1890,7 +1890,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.Network.{ResponseSource}Result" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-22"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1958,7 +1958,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.OhttpKeyService.Network.Result" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-22"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1968,7 +1968,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.OhttpKeyService.Network.Time" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2113,7 +2113,7 @@ <histogram name="SafeBrowsing.MultipartUploader.NetworkResult.{UploaderConsumer}" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <!-- Note to owner: This histogram can be renewed 1 full year if it is still useful for Chirp alerts (go/crca-alerts). --> @@ -2404,7 +2404,7 @@ </histogram> <histogram name="SafeBrowsing.Pref.Enhanced" enum="BooleanEnabled" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2426,7 +2426,7 @@ </histogram> <histogram name="SafeBrowsing.Pref.Extended{SafeBrowsingScoutOptInLocations}" - enum="BooleanEnabled" expires_after="2026-03-22"> + enum="BooleanEnabled" expires_after="2026-05-24"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2447,7 +2447,7 @@ </histogram> <histogram name="SafeBrowsing.Pref.General" enum="BooleanEnabled" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2520,7 +2520,7 @@ </histogram> <histogram name="SafeBrowsing.ResumableUploader.NetworkResult.EnterpriseUpload" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <!-- Note to owner: This histogram can be renewed 1 full year if it is still useful for Chirp alerts (go/crca-alerts). --> @@ -2624,7 +2624,7 @@ </histogram> <histogram name="SafeBrowsing.RT.ConsumerVersionReason" - enum="SafeBrowsingRTConsumerVersionReason" expires_after="2026-03-22"> + enum="SafeBrowsingRTConsumerVersionReason" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2746,7 +2746,7 @@ </histogram> <histogram name="SafeBrowsing.RT.HasTokenInRequest{UserCategory}" - enum="BooleanHasToken" expires_after="2026-03-22"> + enum="BooleanHasToken" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3006,7 +3006,7 @@ </histogram> <histogram name="SafeBrowsing.Settings.UserAction.{AccessPoint}" - enum="SafeBrowsingSettingsUserAction" expires_after="2026-03-22"> + enum="SafeBrowsingSettingsUserAction" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3240,7 +3240,7 @@ <histogram name="SafeBrowsing.TailoredSecurity.SyncPromptEnabledNotificationResult2" enum="SafeBrowsingTailoredSecurityNotificationResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jacastro@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3253,7 +3253,7 @@ <histogram name="SafeBrowsing.TailoredSecurityConsented{Status}{PromptType}Outcome" - enum="SafeBrowsingTailoredSecurityOutcome" expires_after="2026-03-22"> + enum="SafeBrowsingTailoredSecurityOutcome" expires_after="2026-05-24"> <owner>jacastro@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3294,7 +3294,7 @@ </histogram> <histogram name="SafeBrowsing.TailoredSecurityService.OAuthTokenNetworkResult" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <!-- Note to owner: This histogram can be renewed 1 full year if it is still useful for Chirp alerts (go/crca-alerts). --> @@ -3520,7 +3520,7 @@ </histogram> <histogram name="SafeBrowsing.V4GetHash.Network.Result" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-22"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <owner>vakh@google.com</owner> <owner>kcarattini@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> @@ -4103,7 +4103,7 @@ <histogram name="SafeBrowsing.{CloudOrLocal}DeepScan.{Connector}{Result}.Duration" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>domfc@chromium.org</owner> <owner>drubery@chromium.org</owner> <owner>nancylanxiao@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml index b0fe8ce..b0ce43f 100644 --- a/tools/metrics/histograms/metadata/sb_client/histograms.xml +++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -212,7 +212,7 @@ </histogram> <histogram name="SBClientDownload.DownloadRequestNetworkResult" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <!-- Note to owner: This histogram can be renewed 1 full year if it is still useful for Chirp alerts (go/crca-alerts). --> @@ -420,7 +420,7 @@ </histogram> <histogram name="SBClientDownload.{Encryption}MalwareDeepScanResult2.{trigger}" - enum="SBClientDownloadCheckResult" expires_after="2026-03-22"> + enum="SBClientDownloadCheckResult" expires_after="2026-05-24"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -535,7 +535,7 @@ <histogram name="SBClientPhishing.ClientSideDetection.AsyncCheckTriggerForceRequestResult" - enum="AsyncCheckTriggerForceRequestResult" expires_after="2026-03-22"> + enum="AsyncCheckTriggerForceRequestResult" expires_after="2026-05-24"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -790,7 +790,7 @@ </histogram> <histogram name="SBClientPhishing.LocalModelDetectsPhishing{RequestType}" - enum="BooleanIsPhishing" expires_after="2026-03-22"> + enum="BooleanIsPhishing" expires_after="2026-05-24"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -863,7 +863,7 @@ </histogram> <histogram name="SBClientPhishing.NetworkResult2" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-21"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <!-- Note to owner: This histogram can be renewed 1 full year if it is still useful for Chirp alerts (go/crca-alerts). --> @@ -888,7 +888,7 @@ <histogram name="SBClientPhishing.OnDeviceModelEligibilityReasonAtInquiryFailure" enum="OptimizationGuideOnDeviceModelEligibilityReason" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1203,7 +1203,7 @@ <histogram name="SBClientPhishing.RTLookupForceRequest.HasLlamaForcedTriggerInfo" - enum="BooleanForceRequest" expires_after="2026-03-22"> + enum="BooleanForceRequest" expires_after="2026-05-24"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/search/histograms.xml b/tools/metrics/histograms/metadata/search/histograms.xml index 0ea25814..cb612dce 100644 --- a/tools/metrics/histograms/metadata/search/histograms.xml +++ b/tools/metrics/histograms/metadata/search/histograms.xml
@@ -86,7 +86,7 @@ </variants> <histogram name="Search.Ambient.Query" enum="AmbientSearchEntryPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>juanmojica@google.com</owner> <owner>schechter@google.com</owner> <owner>stanfield@google.com</owner> @@ -163,7 +163,7 @@ <histogram name="Search.AuxiliarySearch.DonationCount.{AuxiliarySearchEntryType}" - units="count" expires_after="2026-03-22"> + units="count" expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>gangwu@chromium.org</owner> <owner>clank-start@google.com</owner> @@ -187,7 +187,7 @@ </histogram> <histogram name="Search.AuxiliarySearch.DonationRequestStatus" - enum="AuxiliarySearchRequestStatus" expires_after="2026-03-22"> + enum="AuxiliarySearchRequestStatus" expires_after="2026-05-24"> <owner>gangwu@chromium.org</owner> <owner>chrome-mobile-search@google.com</owner> <summary> @@ -225,7 +225,7 @@ </histogram> <histogram name="Search.AuxiliarySearch.Module.ClickInfo" enum="ClickInfo" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>gangwu@chromium.org</owner> <owner>clank-start@google.com</owner> @@ -237,7 +237,7 @@ </histogram> <histogram name="Search.AuxiliarySearch.QueryTime.{AuxiliarySearchQueryType}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>gangwu@chromium.org</owner> <owner>clank-start@google.com</owner> @@ -310,7 +310,7 @@ </histogram> <histogram name="Search.AuxiliarySearch.ShareTabsWithOs" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>gangwu@chromium.org</owner> <owner>clank-start@google.com</owner> @@ -1043,7 +1043,7 @@ </histogram> <histogram name="Search.Image.Camera.Open" enum="CameraOpenEntryPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>juanmojica@google.com</owner> <owner>schechter@google.com</owner> <owner>stanfield@google.com</owner> @@ -1092,7 +1092,7 @@ </histogram> <histogram name="Search.KeywordTable.MigrationSuccess.V137" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>wfh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -1119,7 +1119,7 @@ </histogram> <histogram name="Search.OsDefaultsChoice.DelayFromDialogShownToFirstStatus" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>dgn@chromium.org</owner> <owner>triploblastic@google.com</owner> <owner>chrome-waffle-eng@google.com</owner> @@ -1139,7 +1139,7 @@ </histogram> <histogram name="Search.OsDefaultsChoice.DelayFromObservationToFirstStatus" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>dgn@chromium.org</owner> <owner>triploblastic@google.com</owner> <owner>chrome-waffle-eng@google.com</owner> @@ -1176,7 +1176,7 @@ </histogram> <histogram name="Search.OsDefaultsChoice.DialogStatusChange" - enum="OsDefaultsChoiceDialogStatus" expires_after="2026-03-22"> + enum="OsDefaultsChoiceDialogStatus" expires_after="2026-05-24"> <owner>dgn@chromium.org</owner> <owner>triploblastic@google.com</owner> <owner>chrome-waffle-eng@google.com</owner> @@ -1194,7 +1194,7 @@ </histogram> <histogram name="Search.OsDefaultsChoice.DialogStatusOnAppOpen" - enum="OsDefaultsChoiceDialogStatus" expires_after="2026-03-22"> + enum="OsDefaultsChoiceDialogStatus" expires_after="2026-05-24"> <owner>dgn@chromium.org</owner> <owner>triploblastic@google.com</owner> <owner>chrome-waffle-eng@google.com</owner> @@ -1205,7 +1205,7 @@ </histogram> <histogram name="Search.OsDefaultsChoice.DialogSuppressionStatus" - enum="OsDefaultsChoiceDialogSuppressionStatus" expires_after="2026-03-22"> + enum="OsDefaultsChoiceDialogSuppressionStatus" expires_after="2026-05-24"> <owner>dgn@chromium.org</owner> <owner>triploblastic@google.com</owner> <owner>chrome-waffle-eng@google.com</owner> @@ -1405,7 +1405,7 @@ </histogram> <histogram name="Search.RegionSearch.Lens.Result" - enum="LensRegionSearchCaptureResult" expires_after="2026-03-22"> + enum="LensRegionSearchCaptureResult" expires_after="2026-05-24"> <owner>juanmojica@google.com</owner> <owner>benwgold@google.com</owner> <owner>stanfield@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/security/histograms.xml b/tools/metrics/histograms/metadata/security/histograms.xml index a736e921..ef634a0 100644 --- a/tools/metrics/histograms/metadata/security/histograms.xml +++ b/tools/metrics/histograms/metadata/security/histograms.xml
@@ -946,7 +946,7 @@ </histogram> <histogram name="SiteIsolation.IsolatableSandboxedIframes.UniqueSites" - units="processes" expires_after="2026-03-22"> + units="processes" expires_after="2026-05-24"> <owner>wjmaclean@chromium.org</owner> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> @@ -959,7 +959,7 @@ </histogram> <histogram name="SiteIsolation.IsPasswordFormSubmittedInDedicatedProcess" - enum="SiteIsolationIsDedicatedProcess" expires_after="2026-03-22"> + enum="SiteIsolationIsDedicatedProcess" expires_after="2026-05-24"> <owner>alexmos@chromium.org</owner> <owner>lukasza@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml index 7981758..89b06d7 100644 --- a/tools/metrics/histograms/metadata/service/histograms.xml +++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -507,7 +507,7 @@ <histogram name="ServiceWorker.FetchEvent.{Resource}.RaceNetworkRequest.CloneResponseForFetchHandlerCancelled" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>sisidovski@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -528,7 +528,7 @@ <histogram name="ServiceWorker.FetchEvent.{Resource}.RaceNetworkRequest.DataTransferResult" - enum="RaceNetworkRequestDataTransferResult" expires_after="2026-03-22"> + enum="RaceNetworkRequestDataTransferResult" expires_after="2026-05-24"> <owner>sisidovski@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -548,7 +548,7 @@ <histogram name="ServiceWorker.FetchEvent.{Resource}.RaceNetworkRequest.IsCloningDataFinishedBeforeResponseComplete" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>sisidovski@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -655,7 +655,7 @@ </histogram> <histogram name="ServiceWorker.GetClient.SharedWorkerScript.IsBlob" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>yyanagisawa@google.com</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1369,7 +1369,7 @@ </histogram> <histogram name="ServiceWorker.Registration.Delete.Initiator" - enum="ServiceWorkerRegistrationDeleteInitiator" expires_after="2026-01-25"> + enum="ServiceWorkerRegistrationDeleteInitiator" expires_after="2026-05-24"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1564,7 +1564,7 @@ <histogram name="ServiceWorker.StartTiming.ClockConsistency{ServiceWorker_StartSituation2}" - enum="CrossProcessTimeDelta" expires_after="2026-02-22"> + enum="CrossProcessTimeDelta" expires_after="2026-05-24"> <owner>yyanagisawa@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1804,7 +1804,7 @@ </histogram> <histogram name="ServiceWorker.StaticRouter.{Resource}.CacheLookupDuration" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>suzukikeita@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/session/histograms.xml b/tools/metrics/histograms/metadata/session/histograms.xml index ac344319..224c37b 100644 --- a/tools/metrics/histograms/metadata/session/histograms.xml +++ b/tools/metrics/histograms/metadata/session/histograms.xml
@@ -49,7 +49,7 @@ </histogram> <histogram name="Session.BrowserFullscreen.DurationUpTo24H" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>avi@chromium.org</owner> <owner>chrome-mac-dev@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml index d3e91944..b1b857b7 100644 --- a/tools/metrics/histograms/metadata/settings/histograms.xml +++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -219,7 +219,7 @@ </histogram> <histogram name="Settings.ClearBrowsingData.Advanced.TimePeriod" - enum="SettingsClearBrowsingDataTimePeriod" expires_after="2026-03-22"> + enum="SettingsClearBrowsingDataTimePeriod" expires_after="2026-05-24"> <owner>rainhard@chromium.org</owner> <owner>msramek@chromium.org</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -230,7 +230,7 @@ </histogram> <histogram name="Settings.ClearBrowsingData.Basic.TimePeriod" - enum="SettingsClearBrowsingDataTimePeriod" expires_after="2026-03-22"> + enum="SettingsClearBrowsingDataTimePeriod" expires_after="2026-05-24"> <owner>rainhard@chromium.org</owner> <owner>msramek@chromium.org</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -676,7 +676,7 @@ </histogram> <histogram name="Settings.SafetyCheck.Interactions" - enum="SettingsSafetyCheckInteractions" expires_after="2026-03-22"> + enum="SettingsSafetyCheckInteractions" expires_after="2026-05-24"> <owner>rainhard@chromium.org</owner> <owner>msramek@chromium.org</owner> <owner>anaudrey@chromium.org</owner> @@ -792,7 +792,7 @@ <histogram name="Settings.SafetyHub.AbusiveNotificationPermissionRevocation.BlocklistCheckCount" - units="checks" expires_after="2026-03-22"> + units="checks" expires_after="2026-05-24"> <owner>skrakowi@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -875,7 +875,7 @@ </histogram> <histogram name="Settings.SafetyHub.DashboardWarning" - enum="SafetyHubModuleType" expires_after="2026-03-22"> + enum="SafetyHubModuleType" expires_after="2026-05-24"> <owner>sideyilmaz@chromium.org</owner> <owner>chrome-privacy-controls@google.com</owner> <summary> @@ -1372,7 +1372,7 @@ </histogram> <histogram name="Settings.SearchEngines.Interactions" - enum="SettingsSearchEnginesInteractions" expires_after="2026-03-22"> + enum="SettingsSearchEnginesInteractions" expires_after="2026-05-24"> <owner>yoangela@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml index e08bdee..adbaf501 100644 --- a/tools/metrics/histograms/metadata/sharing/histograms.xml +++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -173,7 +173,7 @@ </histogram> <histogram name="Sharing.Android.Origin" enum="ShareOrigin" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jinsukkim@chromium.org</owner> <owner>clank-app-team@google.com</owner> <summary> @@ -243,7 +243,7 @@ </histogram> <histogram name="Sharing.MessageReceivedType" enum="SharingMessageType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mvanouwerkerk@chromium.org</owner> <owner>peter@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml index 4471b23..11bbe25 100644 --- a/tools/metrics/histograms/metadata/signin/histograms.xml +++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -161,7 +161,7 @@ </histogram> <histogram name="Signin.AccountCapabilities.FetchLatency" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tju@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -182,7 +182,7 @@ <histogram name="Signin.AccountCapabilities.GetFromSystemLibraryDuration{Caller}" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>fernandex@google.com</owner> <owner>msarda@chromium.org</owner> <owner>triploblastic@chromium.org</owner> @@ -214,7 +214,7 @@ </histogram> <histogram name="Signin.AccountCapabilities.ImmediatelyAvailable" - enum="BooleanAvailable" expires_after="2026-03-22"> + enum="BooleanAvailable" expires_after="2026-05-24"> <owner>tju@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -233,7 +233,7 @@ </histogram> <histogram name="Signin.AccountCapabilities.UserVisibleLatency" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tju@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -287,7 +287,7 @@ </histogram> <histogram name="Signin.AccountCapabilities.{Priority}.FetchResult" - enum="AccountCapabilitiesFetchResult" expires_after="2026-03-22"> + enum="AccountCapabilitiesFetchResult" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>msarda@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -307,7 +307,7 @@ </histogram> <histogram name="Signin.AccountConsistencyPromoAction" - enum="AccountConsistencyPromoAction" expires_after="2026-03-22"> + enum="AccountConsistencyPromoAction" expires_after="2026-05-24"> <owner>bsazonov@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -317,7 +317,7 @@ </histogram> <histogram name="Signin.AccountConsistencyPromoAction.{PromoEvent}" - enum="SigninAccessPoint" expires_after="2026-03-22"> + enum="SigninAccessPoint" expires_after="2026-05-24"> <owner>bsazonov@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -547,7 +547,7 @@ </histogram> <histogram name="Signin.AccountTracker.GaiaIdMigrationState" - enum="OAuth2LoginAccountRevokedMigrationState" expires_after="2026-03-22"> + enum="OAuth2LoginAccountRevokedMigrationState" expires_after="2026-05-24"> <owner>msarda@chromium.org</owner> <owner>sdefresne@chromium.org</owner> <summary> @@ -594,7 +594,7 @@ </histogram> <histogram name="Signin.AccountType.SigninConsent" enum="SigninAccountType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jlebel@chromium.org</owner> <owner>chrome-signin-team@chromium.org</owner> <summary> @@ -650,7 +650,7 @@ </histogram> <histogram name="Signin.AddAccountToDevice.Result" - enum="SigninAddAccountToDeviceResult" expires_after="2026-03-22"> + enum="SigninAddAccountToDeviceResult" expires_after="2026-05-24"> <owner>jlebel@google.com</owner> <owner>msarda@google.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -671,7 +671,7 @@ </histogram> <histogram name="Signin.AddAccountToDevice.{Result}.Duration" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jlebel@google.com</owner> <owner>msarda@google.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -699,7 +699,7 @@ </histogram> <histogram name="Signin.Android.FRESigninEvents" enum="FRESigninEvents" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mthiesse@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -1128,7 +1128,7 @@ <histogram name="Signin.BoundSessionCredentials.SessionRegistrationTotalDuration" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1577,7 +1577,7 @@ </histogram> <histogram name="Signin.Extensions.GetAuthTokenResult{GetAuthTokenType}" - enum="GetAuthTokenResult" expires_after="2026-03-22"> + enum="GetAuthTokenResult" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>droger@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -1665,7 +1665,7 @@ </histogram> <histogram name="Signin.GetAccessTokenFinished" enum="GoogleServiceAuthError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>droger@chromium.org</owner> <owner>msarda@chromium.org</owner> <summary> @@ -1924,7 +1924,7 @@ </histogram> <histogram name="Signin.Intercept.Heuristic.SupervisionState.{InterceptType}" - enum="SinginInterceptSupervisionState" expires_after="2026-03-22"> + enum="SinginInterceptSupervisionState" expires_after="2026-05-24"> <owner>anthie@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -1947,7 +1947,7 @@ </histogram> <histogram name="Signin.Intercept.HeuristicOutcome" - enum="SigninInterceptHeuristicOutcome" expires_after="2026-03-22"> + enum="SigninInterceptHeuristicOutcome" expires_after="2026-05-24"> <owner>droger@chromium.org</owner> <owner>alexilin@chromium.org</owner> <summary> @@ -1957,7 +1957,7 @@ </histogram> <histogram name="Signin.InterceptResult.ChromeSignin{State}" - enum="SigninInterceptResult" expires_after="2026-03-22"> + enum="SigninInterceptResult" expires_after="2026-05-24"> <owner>rsult@google.com</owner> <owner>droger@chromium.org</owner> <summary> @@ -1977,7 +1977,7 @@ </histogram> <histogram name="Signin.InterceptResult.Enterprise{Mode}.{Status}" - enum="SigninInterceptResult" expires_after="2026-03-22"> + enum="SigninInterceptResult" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>droger@chromium.org</owner> <summary> @@ -2000,7 +2000,7 @@ </histogram> <histogram name="Signin.InterceptResult.{InterceptType}{SigninState}" - enum="SigninInterceptResult" expires_after="2026-03-22"> + enum="SigninInterceptResult" expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>droger@chromium.org</owner> <summary> @@ -2760,7 +2760,7 @@ </histogram> <histogram name="Signin.Reconciler.Operation" enum="SigninReconcilerOperation" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>msarda@chromium.org</owner> <owner>droger@chromium.org</owner> <summary> @@ -2871,7 +2871,7 @@ </histogram> <histogram name="Signin.ScopeLimitedErrorSuppressed" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>triploblastic@google.com</owner> <owner>chrome-signin-mobile-team@google.com</owner> <summary> @@ -2949,7 +2949,7 @@ <histogram name="Signin.ShowSigninCoordinatorWhenAlreadyPresent.DurationBetweenTwoSigninCoordinatorCreation" - units="ms" expires_after="2026-03-08"> + units="ms" expires_after="2026-05-24"> <owner>arthurmilchior@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <owner>msarda@chromium.org</owner> @@ -2962,7 +2962,7 @@ <histogram name="Signin.ShowSigninCoordinatorWhenAlreadyPresent.{View}AccessPoint" - enum="SigninAccessPoint" expires_after="2026-03-08"> + enum="SigninAccessPoint" expires_after="2026-05-24"> <owner>arthurmilchior@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <owner>msarda@chromium.org</owner> @@ -3018,7 +3018,7 @@ </histogram> <histogram name="Signin.SignIn.Started" enum="SigninAccessPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bsazonov@chromium.org</owner> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -3095,7 +3095,7 @@ </histogram> <histogram name="Signin.SigninCompletedAccessPoint{SigninAccountStatus}" - enum="SigninAccessPoint" expires_after="2026-03-22"> + enum="SigninAccessPoint" expires_after="2026-05-24"> <owner>msarda@chromium.org</owner> <owner>bsazonov@chromium.org</owner> <owner>droger@chromium.org</owner> @@ -3304,7 +3304,7 @@ </histogram> <histogram name="Signin.SigninStartedAccessPoint{SigninAccountStatus}" - enum="SigninAccessPoint" expires_after="2026-03-22"> + enum="SigninAccessPoint" expires_after="2026-05-24"> <owner>msarda@chromium.org</owner> <owner>bsazonov@chromium.org</owner> <owner>droger@chromium.org</owner> @@ -3513,7 +3513,7 @@ </histogram> <histogram name="Signin.SyncOptIn.Completed" enum="SigninAccessPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bsazonov@chromium.org</owner> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -3586,7 +3586,7 @@ </histogram> <histogram name="Signin.SyncOptIn.Started" enum="SigninAccessPoint" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bsazonov@chromium.org</owner> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -3628,7 +3628,7 @@ </histogram> <histogram name="Signin.SyncTurnOff.Completed" enum="SigninSignoutProfile" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>bsazonov@chromium.org</owner> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> @@ -3734,7 +3734,7 @@ </histogram> <histogram name="Signin.TokenTable.RemoveOtherTokensCount" units="tokens" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>alexilin@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -3746,7 +3746,7 @@ </histogram> <histogram name="Signin.TokenTable.SetTokenResult" - enum="SigninTokenTableWriteTokenToDBResult" expires_after="2026-03-22"> + enum="SigninTokenTableWriteTokenToDBResult" expires_after="2026-05-24"> <owner>wfh@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/simple/histograms.xml b/tools/metrics/histograms/metadata/simple/histograms.xml index eda36a0..4c3ad81 100644 --- a/tools/metrics/histograms/metadata/simple/histograms.xml +++ b/tools/metrics/histograms/metadata/simple/histograms.xml
@@ -57,7 +57,7 @@ </histogram> <histogram name="SimpleGeolocation.Provider.WizardControllerRequestInterval" - units="hours" expires_after="2026-03-22"> + units="hours" expires_after="2026-05-24"> <owner>alvinji@chromium.org</owner> <owner>deviceapi-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sql/histograms.xml b/tools/metrics/histograms/metadata/sql/histograms.xml index de0913f4..4be21c63 100644 --- a/tools/metrics/histograms/metadata/sql/histograms.xml +++ b/tools/metrics/histograms/metadata/sql/histograms.xml
@@ -158,7 +158,7 @@ </histogram> <histogram name="Sql.Database.Success.OpenInternalTime.{DatabaseTag}" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>etienneb@chromium.org</owner> <summary> @@ -171,7 +171,7 @@ </histogram> <histogram name="Sql.Database.Success.SqliteOpenTime.{DatabaseTag}" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>etienneb@chromium.org</owner> <summary> @@ -231,7 +231,7 @@ </histogram> <histogram name="Sql.Statement.ExecutionTime.{DatabaseTag}" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>etienneb@chromium.org</owner> <summary> @@ -246,7 +246,7 @@ </histogram> <histogram name="Sql.Statement.StepTime.{DatabaseTag}" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>anthonyvd@chromium.org</owner> <owner>etienneb@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/stability/histograms.xml b/tools/metrics/histograms/metadata/stability/histograms.xml index 110a69a..e20ef9f 100644 --- a/tools/metrics/histograms/metadata/stability/histograms.xml +++ b/tools/metrics/histograms/metadata/stability/histograms.xml
@@ -211,7 +211,7 @@ </histogram> <histogram name="Stability.Android.SystemExitReason{AndroidProcessExitReasons}" - enum="AndroidProcessExitReason" expires_after="2026-03-22"> + enum="AndroidProcessExitReason" expires_after="2026-05-24"> <owner>boliu@chromium.org</owner> <owner>ssid@chromium.org</owner> <owner>wnwen@chromium.org</owner> @@ -635,7 +635,7 @@ </histogram> <histogram name="Stability.Media.{ProcessType}.Crash.ExitCode" - enum="WindowsExitCode" expires_after="2026-03-22"> + enum="WindowsExitCode" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -646,7 +646,7 @@ </histogram> <histogram name="Stability.Media.{ProcessType}.Launch" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -656,7 +656,7 @@ </histogram> <histogram name="Stability.Media.{ProcessType}.Launch.LaunchErrorCode" - enum="LaunchErrorCodes" expires_after="2026-03-22"> + enum="LaunchErrorCodes" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -667,7 +667,7 @@ </histogram> <histogram name="Stability.Media.{ProcessType}.Launch.WinLastError" - enum="WinGetLastError" expires_after="2026-03-22"> + enum="WinGetLastError" expires_after="2026-05-24"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -713,7 +713,7 @@ </histogram> <histogram name="Stability.RendererAbnormalTermination2.HostedContentType" - enum="RendererHostedContentType" expires_after="2026-03-22"> + enum="RendererHostedContentType" expires_after="2026-05-24"> <owner>fdoray@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -723,7 +723,7 @@ </histogram> <histogram name="Stability.RendererAbnormalTermination2.{HostedContentType}" - enum="TerminationStatus" expires_after="2026-03-22"> + enum="TerminationStatus" expires_after="2026-05-24"> <owner>fdoray@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml index 4bfe5f0..95f0b89 100644 --- a/tools/metrics/histograms/metadata/startup/histograms.xml +++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -72,7 +72,7 @@ </histogram> <histogram name="Startup.Android.Cold.FirstPaintOccurredPreForeground" - enum="Boolean" expires_after="2026-03-22"> + enum="Boolean" expires_after="2026-05-24"> <owner>blundell@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -359,7 +359,7 @@ </histogram> <histogram name="Startup.Android.Cold.TimeToVisibleContent" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ckitagawa@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> <summary> @@ -378,7 +378,7 @@ </histogram> <histogram name="Startup.Android.Cold.{FirstDrawSurface}.TimeToFirstDraw" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>nafisabedin@google.com</owner> <owner>yfriedman@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -425,7 +425,7 @@ </histogram> <histogram name="Startup.Android.DurationSinceLastBackgroundTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>xinyiji@chromium.org</owner> <summary> @@ -493,7 +493,7 @@ </histogram> <histogram name="Startup.Android.IsLastBackgroundTimeLogged" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hanxi@chromium.org</owner> <owner>xinyiji@chromium.org</owner> <summary> @@ -514,7 +514,7 @@ </histogram> <histogram name="Startup.Android.MainIconLaunchTotalWaitTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>nafisabedin@google.com</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -593,7 +593,7 @@ </histogram> <histogram name="Startup.BringToForegroundReason" - enum="BooleanBringToForegroundReason" expires_after="2026-03-22"> + enum="BooleanBringToForegroundReason" expires_after="2026-05-24"> <owner>peter@chromium.org</owner> <summary> Records the cause, each time Chrome is brought to the foreground. Currently @@ -1105,7 +1105,7 @@ </histogram> <histogram name="Startup.MobileSessionStartAction" - enum="MobileSessionStartAction" expires_after="2026-03-22"> + enum="MobileSessionStartAction" expires_after="2026-05-24"> <owner>thegreenfrog@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> <summary> @@ -1115,7 +1115,7 @@ </histogram> <histogram name="Startup.MobileSessionStartFromApps" - enum="MobileSessionCallerApp" expires_after="2026-03-22"> + enum="MobileSessionCallerApp" expires_after="2026-05-24"> <owner>thegreenfrog@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> <summary>The calling application (if any).</summary> @@ -1148,7 +1148,7 @@ <histogram name="Startup.Renderer.LoadTime.ApplicationStartToRendererStartRunLoop" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>spvm@chromium.org</owner> <owner>etienneb@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1166,7 +1166,7 @@ </histogram> <histogram name="Startup.Renderer.LoadTime.ChromeMainToRendererStartRunLoop" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>spvm@chromium.org</owner> <owner>etienneb@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1182,7 +1182,7 @@ <histogram name="Startup.Renderer.LoadTime.ProcessCreationToRendererStartRunLoop" - units="ms" expires_after="2026-03-22"> + units="ms" expires_after="2026-05-24"> <owner>spvm@chromium.org</owner> <owner>etienneb@chromium.org</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -1272,7 +1272,7 @@ </histogram> <histogram name="Startup.{Process}.LoadTime.PreReadFile" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>spvm@chromium.org</owner> <owner>fdoray@chromium.org</owner> <owner>etienneb@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml index 4287b92..229a94fb 100644 --- a/tools/metrics/histograms/metadata/storage/histograms.xml +++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -136,7 +136,7 @@ </histogram> <histogram name="API.StorageAccess.RequestOutcome" - enum="StorageAccessAPIRequestOutcome" expires_after="2026-03-22"> + enum="StorageAccessAPIRequestOutcome" expires_after="2026-05-24"> <owner>cfredric@chromium.org</owner> <owner>brandm@microsoft.com</owner> <summary> @@ -206,7 +206,7 @@ </histogram> <histogram name="API.StorageAccessHeader.StorageAccessStatusOutcome" - enum="StorageAccessStatusOutcome" expires_after="2026-03-22"> + enum="StorageAccessStatusOutcome" expires_after="2026-05-24"> <owner>sledoux@chromium.org</owner> <owner>cfredric@chromium.org</owner> <summary> @@ -244,7 +244,7 @@ </histogram> <histogram name="Clipboard.Read" enum="ClipboardFormatRead" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>huangdarwin@chromium.org</owner> <owner>src/ui/base/clipboard/OWNERS</owner> <summary> @@ -271,7 +271,7 @@ </histogram> <histogram name="Clipboard.Write" enum="ClipboardFormatWrite" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>huangdarwin@chromium.org</owner> <owner>src/ui/base/clipboard/OWNERS</owner> <summary> @@ -490,7 +490,7 @@ </histogram> <histogram name="IndexedDB.LargeValueReadResult" enum="FileErrorCode" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>leimy@chromium.org</owner> <owner>evanstade@microsoft.com</owner> <owner>chrome-owp-storage@google.com</owner> @@ -1219,7 +1219,7 @@ </histogram> <histogram name="Storage.DomStorage.IterationsToReach{Size}MB2" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>annasato@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -1593,7 +1593,7 @@ </histogram> <histogram name="Storage.InterestGroup.DBSize" units="KB" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <summary> @@ -1679,7 +1679,7 @@ </histogram> <histogram name="Storage.InterestGroup.PerInterestGroup.NumAds" units="ads" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <summary> @@ -1690,7 +1690,7 @@ </histogram> <histogram name="Storage.InterestGroup.PerSiteCount" units="groups" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <summary> @@ -2396,7 +2396,7 @@ <histogram name="Storage.SharedStorage.PrivateAggregationConfig.HasMaxContributions" - enum="Boolean" expires_after="2026-03-19"> + enum="Boolean" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/subresource/histograms.xml b/tools/metrics/histograms/metadata/subresource/histograms.xml index f8979fb..330c68c 100644 --- a/tools/metrics/histograms/metadata/subresource/histograms.xml +++ b/tools/metrics/histograms/metadata/subresource/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="SubresourceFilter.Actions2" enum="SubresourceFilterActions2" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -47,7 +47,7 @@ </histogram> <histogram name="SubresourceFilter.DocumentLoad.SubframeFilteringDelay.Allowed" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -189,7 +189,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.ActivationList" - enum="ActivationList" expires_after="2026-03-22"> + enum="ActivationList" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -199,7 +199,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.ActivationState" - enum="SubresourceFilterActivationState" expires_after="2026-03-22"> + enum="SubresourceFilterActivationState" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -307,7 +307,7 @@ <histogram name="SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -325,7 +325,7 @@ <histogram name="SubresourceFilter.PageLoad.SubresourceEvaluation.TotalWallDuration" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -357,7 +357,7 @@ </histogram> <histogram name="SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -398,7 +398,7 @@ <histogram name="SubresourceFilter.SubresourceLoad.Evaluation.WallDuration.FirstRun" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>alexmt@chromium.org</owner> <owner>csharrison@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml index 065a0bc..4e73aa8a 100644 --- a/tools/metrics/histograms/metadata/sync/histograms.xml +++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -444,7 +444,7 @@ </histogram> <histogram name="Sync.BookmarkModelMergerTime{UpdatesCount}" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -889,7 +889,7 @@ </histogram> <histogram name="Sync.DataTypeErrorSite{SyncDataType}" - enum="SyncDataTypeErrorSite" expires_after="2026-03-22"> + enum="SyncDataTypeErrorSite" expires_after="2026-05-24"> <owner>treib@chromium.org</owner> <owner>rushans@google.com</owner> <summary> @@ -1113,7 +1113,7 @@ </histogram> <histogram name="Sync.DeviceCount2.{DeviceType}" units="devices" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ssid@chromium.org</owner> <owner>mastiz@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> @@ -1152,7 +1152,7 @@ </histogram> <histogram name="Sync.EntityEncryptionSucceeded{SyncDataType}" - enum="BooleanSuccess" expires_after="2026-03-22"> + enum="BooleanSuccess" expires_after="2026-05-24"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <summary> @@ -1178,7 +1178,7 @@ </histogram> <histogram name="Sync.EntitySizeOnCommit.Entity.WithMetadata{SyncDataType}" - units="bytes" expires_after="2026-03-01"> + units="bytes" expires_after="2026-05-24"> <owner>ankushkush@google.com</owner> <owner>treib@chromium.org</owner> <summary> @@ -1359,7 +1359,7 @@ </histogram> <histogram name="Sync.InvalidBookmarkSpecifics" - enum="InvalidBookmarkSpecificsError" expires_after="2026-02-16"> + enum="InvalidBookmarkSpecificsError" expires_after="2026-05-24"> <owner>mastiz@chromium.org</owner> <owner>rushans@google.com</owner> <summary> @@ -1751,7 +1751,7 @@ </histogram> <histogram name="Sync.PostedGetUpdatesOrigin" enum="SyncGetUpdatesOrigin" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mastiz@chromium.org</owner> <owner>rushans@google.com</owner> <summary> @@ -2159,7 +2159,7 @@ </histogram> <histogram name="Sync.SyncStoppedReported" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <summary> @@ -2465,7 +2465,7 @@ </histogram> <histogram name="Sync.TrustedVaultKeyRetrievalTrigger" - enum="TrustedVaultUserActionTrigger" expires_after="2026-03-22"> + enum="TrustedVaultUserActionTrigger" expires_after="2026-05-24"> <owner>mmoskvitin@google.com</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -2569,7 +2569,7 @@ </histogram> <histogram name="Sync.UserActionableError" enum="UserActionableError" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mmrashad@google.com</owner> <owner>chrome-signin-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml index b8b884d..e9bdd994 100644 --- a/tools/metrics/histograms/metadata/tab/histograms.xml +++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -136,7 +136,7 @@ </histogram> <histogram name="Discarding.DailyDiscards{TabDiscardReason}" units="tabs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vovoy@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -148,7 +148,7 @@ </histogram> <histogram name="Discarding.DailyReloads{TabDiscardReason}" units="tabs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>vovoy@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -221,7 +221,7 @@ </histogram> <histogram name="Discarding.DiscardPageOnUIThreadOutcome" - enum="DiscardPageOnUIThreadOutcome" expires_after="2026-03-22"> + enum="DiscardPageOnUIThreadOutcome" expires_after="2026-05-24"> <owner>fdoray@chromium.org</owner> <owner>joenotcharles@chromium.org</owner> <summary> @@ -498,7 +498,7 @@ </summary> </histogram> -<histogram name="Tab.NewTab" enum="NewTabType" expires_after="2026-03-22"> +<histogram name="Tab.NewTab" enum="NewTabType" expires_after="2026-05-24"> <owner>bsep@chromium.org</owner> <summary> Recorded when a new tab is opened. Tracks the method in which the tab was @@ -1285,7 +1285,7 @@ </histogram> <histogram name="TabGroups.SavedTabGroupTabCount" units="tabs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dljames@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -2098,7 +2098,7 @@ </histogram> <histogram name="TabManager.Discarding.DiscardToReloadTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>fdoray@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -2878,7 +2878,7 @@ </histogram> <histogram name="Tabs.RestoreTabStateException" enum="RestoreTabStateException" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <summary> @@ -3263,7 +3263,7 @@ </histogram> <histogram name="Tabs.TabRestoreUrlMatch" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ckitagawa@chromium.org</owner> <owner>dtrainor@chromium.org</owner> <summary> @@ -3405,7 +3405,7 @@ </histogram> <histogram name="Tabs.TabSearch.NumTabsOnOpen" units="tabs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>tluk@chromium.org</owner> <owner>robliao@chromium.org</owner> <summary> @@ -4028,7 +4028,7 @@ </histogram> <histogram name="TabStrip.Dragging.TimeFromLastDrag" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>kerenzhu@chromium.org</owner> <owner>yuhengh@chromium.org</owner> <owner>temao@chromium.org</owner> @@ -4053,7 +4053,7 @@ </histogram> <histogram name="TabStrip.SplitView.Created" enum="SplitTabCreatedSource" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>agale@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -4063,7 +4063,7 @@ </histogram> <histogram name="TabStrip.Tab.ContextMenuReloadCount" units="tabs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>agale@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -4083,7 +4083,7 @@ </histogram> <histogram name="TabStrip.Tab.ReloadCount" units="tabs" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>agale@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary> @@ -4093,7 +4093,7 @@ </histogram> <histogram name="TabStrip.Tab.{Framework}.ActivationAction" - enum="TabActivationTypes" expires_after="2026-03-22"> + enum="TabActivationTypes" expires_after="2026-05-24"> <owner>yuhengh@chromium.org</owner> <owner>tluk@chromium.org</owner> <owner>romanarora@chromium.org</owner> @@ -4129,7 +4129,7 @@ </summary> </histogram> -<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2026-03-22"> +<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2026-05-24"> <owner>dpenning@chromium.org</owner> <owner>top-chrome-desktop-ui@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/translate/histograms.xml b/tools/metrics/histograms/metadata/translate/histograms.xml index 7929c67..a3e58bd 100644 --- a/tools/metrics/histograms/metadata/translate/histograms.xml +++ b/tools/metrics/histograms/metadata/translate/histograms.xml
@@ -277,7 +277,7 @@ </histogram> <histogram name="Translate.OnDeviceTranslation.CharacterCount" units="int" - expires_after="2026-03-24"> + expires_after="2026-05-24"> <owner>gjc@google.com</owner> <owner>chrome-builtin-ai@google.com</owner> <summary> @@ -287,7 +287,7 @@ </histogram> <histogram name="Translate.OnDeviceTranslation.Download.LanguagePair" - units="int" expires_after="2026-03-22"> + units="int" expires_after="2026-05-24"> <owner>gjc@google.com</owner> <owner>chrome-builtin-ai@google.com</owner> <summary> @@ -421,7 +421,7 @@ </histogram> <histogram name="Translate.PageLoad.InitialState" enum="TranslateState" - expires_after="2026-03-24"> + expires_after="2026-05-24"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ui/histograms.xml b/tools/metrics/histograms/metadata/ui/histograms.xml index 2a83f59f..bf2193c9 100644 --- a/tools/metrics/histograms/metadata/ui/histograms.xml +++ b/tools/metrics/histograms/metadata/ui/histograms.xml
@@ -179,7 +179,7 @@ </histogram> <histogram name="ContextMenu.LensSupportStatus" enum="LensSupportStatus" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>benwgold@google.com</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -208,7 +208,7 @@ </histogram> <histogram name="ContextMenu.SelectedOptionDesktop{ContextMenuTypeDesktop}" - enum="ContextMenuOptionDesktop" expires_after="2026-03-22"> + enum="ContextMenuOptionDesktop" expires_after="2026-05-24"> <owner>avi@chromium.org</owner> <owner>mpearson@chromium.org</owner> <summary> @@ -285,7 +285,7 @@ </histogram> <histogram name="DefaultBrowser.InfoBar.UserInteraction" - enum="DefaultBrowserInfoBarUserInteraction" expires_after="2026-03-22"> + enum="DefaultBrowserInfoBarUserInteraction" expires_after="2026-05-24"> <owner>pmonette@chromium.org</owner> <owner>robliao@chromium.org</owner> <summary> @@ -607,7 +607,7 @@ </histogram> <histogram name="RenderTextHarfBuzz.ShapeRunsFallback" enum="ShapeRunFallback" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dayeung@chromium.org</owner> <owner>etienneb@chromium.org</owner> <summary> @@ -640,7 +640,7 @@ </histogram> <histogram name="RenderViewContextMenu.Shown" enum="RenderViewContextMenuItem" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>avi@chromium.org</owner> <owner>edwardjung@chromium.org</owner> <owner>mpearson@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/uma/histograms.xml b/tools/metrics/histograms/metadata/uma/histograms.xml index f0e9429..a1702b7 100644 --- a/tools/metrics/histograms/metadata/uma/histograms.xml +++ b/tools/metrics/histograms/metadata/uma/histograms.xml
@@ -714,7 +714,7 @@ </histogram> <histogram name="UMA.PrimaryUserType" enum="UserType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>michaelpg@chromium.org</owner> <owner>yilkal@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -962,7 +962,7 @@ </histogram> <histogram name="UMA.StructuredMetrics.NumEventsInUpload" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>troywang@google.com</owner> <owner>tby@chromium.org</owner> <owner>rkaplow@chromium.org</owner> @@ -997,7 +997,7 @@ </histogram> <histogram name="UMA.TPMMetricsProvider.ReadSuccess" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>psarouthakis@google.com</owner> <owner>kristianm@google.com</owner> <summary> @@ -1007,7 +1007,7 @@ </histogram> <histogram name="UMA.TPMMetricsProvider.UnknownID" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>psarouthakis@google.com</owner> <owner>kristianm@google.com</owner> <summary> @@ -1019,7 +1019,7 @@ </histogram> <histogram name="UMA.TruncatedEvents.UserAction" units="events" - expires_after="2026-05-17"> + expires_after="2026-05-24"> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/user_education/histograms.xml b/tools/metrics/histograms/metadata/user_education/histograms.xml index 713fadc4..6b32fa7 100644 --- a/tools/metrics/histograms/metadata/user_education/histograms.xml +++ b/tools/metrics/histograms/metadata/user_education/histograms.xml
@@ -435,7 +435,7 @@ </histogram> <histogram name="UserEducation.Session.MonthlyActiveDays" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dfried@chromium.org</owner> <owner>frizzle-team@google.com</owner> <summary> @@ -447,7 +447,7 @@ </histogram> <histogram name="UserEducation.Session.RecentActiveDays" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dfried@chromium.org</owner> <owner>frizzle-team@google.com</owner> <summary> @@ -459,7 +459,7 @@ </histogram> <histogram name="UserEducation.Session.RecentActiveWeeks" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dfried@chromium.org</owner> <owner>frizzle-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml index 86d658b..abfdbe4 100644 --- a/tools/metrics/histograms/metadata/v8/histograms.xml +++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -1988,7 +1988,7 @@ </histogram> <histogram name="V8.WasmCompilationMethod" enum="WasmCompilationMethod" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>wasm-runtime@google.com</owner> <summary> @@ -1999,7 +1999,7 @@ </histogram> <histogram name="V8.WasmCompileFunctionMicroSeconds{V8WasmSeparateAsmAndWasm}" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2043,7 +2043,7 @@ </histogram> <histogram name="V8.WasmCompileModuleAsyncMicroSeconds" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2055,7 +2055,7 @@ </histogram> <histogram name="V8.WasmCompileModuleMicroSeconds{V8WasmSeparateAsmAndWasm}" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2075,7 +2075,7 @@ </histogram> <histogram name="V8.WasmCompileModuleStreamingMicroSeconds" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2143,7 +2143,7 @@ </histogram> <histogram name="V8.WasmFinishModuleStreamingMicroSeconds" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> <summary> @@ -2157,7 +2157,7 @@ </histogram> <histogram name="V8.WasmFunctionsPerModule{V8WasmSeparateAsmAndWasm}" - units="functions" expires_after="2026-03-22"> + units="functions" expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2189,7 +2189,7 @@ <histogram name="V8.WasmInstantiateModuleMicroSeconds{V8WasmSeparateAsmAndWasm}" - units="microseconds" expires_after="2026-03-22"> + units="microseconds" expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2232,7 +2232,7 @@ </histogram> <histogram name="V8.WasmMemoryProtectionKeysSupport" enum="BooleanSupported" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>clemensb@chromium.org</owner> <owner>jkummerow@chromium.org</owner> <owner>ecmziegler@chromium.org</owner> @@ -2270,7 +2270,7 @@ </histogram> <histogram name="V8.WasmModuleCodeSizePercentFreed" units="%" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2304,7 +2304,7 @@ </histogram> <histogram name="V8.WasmModuleNumberOfCodeSpaces" units="spaces" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ecmziegler@chromium.org</owner> <owner>clemensb@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2329,7 +2329,7 @@ </histogram> <histogram name="V8.WasmModulesPerEngine" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>clemensb@chromium.org</owner> <owner>ecmziegler@chromium.org</owner> <owner>wasm-runtime@google.com</owner> @@ -2340,7 +2340,7 @@ </histogram> <histogram name="V8.WasmModulesPerIsolate" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>clemensb@chromium.org</owner> <owner>ecmziegler@chromium.org</owner> <owner>wasm-runtime@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/variations/histograms.xml b/tools/metrics/histograms/metadata/variations/histograms.xml index 3cbebf0..7f968c6 100644 --- a/tools/metrics/histograms/metadata/variations/histograms.xml +++ b/tools/metrics/histograms/metadata/variations/histograms.xml
@@ -397,7 +397,7 @@ </histogram> <histogram name="Variations.SafeMode.LoadSafeSeed.Result" - enum="VariationsSeedLoadResult" expires_after="2026-03-22"> + enum="VariationsSeedLoadResult" expires_after="2026-05-24"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -520,7 +520,7 @@ </histogram> <histogram name="Variations.SeedDateChange" enum="VariationsSeedDateChange" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>jwd@chromium.org</owner> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -534,7 +534,7 @@ </histogram> <histogram name="Variations.SeedFetchResponseOrErrorCode{ConnectionType}" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-03-22"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-05-24"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -675,7 +675,7 @@ </histogram> <histogram name="Variations.SeedLoadResult" enum="VariationsSeedLoadResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -687,7 +687,7 @@ </histogram> <histogram name="Variations.SeedProcessingTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -712,7 +712,7 @@ </histogram> <histogram name="Variations.SeedStoreResult" enum="VariationsSeedStoreResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -782,7 +782,7 @@ </histogram> <histogram name="Variations.UserChannel" enum="UserChannels" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -823,7 +823,7 @@ </histogram> <histogram name="Variations.{Mode}CreateTrials.SeedExpiry" - enum="VariationsSeedExpiry" expires_after="2026-03-22"> + enum="VariationsSeedExpiry" expires_after="2026-05-24"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/web_apk/histograms.xml b/tools/metrics/histograms/metadata/web_apk/histograms.xml index 835c9de..cb7897a 100644 --- a/tools/metrics/histograms/metadata/web_apk/histograms.xml +++ b/tools/metrics/histograms/metadata/web_apk/histograms.xml
@@ -72,7 +72,7 @@ </histogram> <histogram name="WebApk.Install.GooglePlayInstallResult" - enum="WebApkGooglePlayInstallResult" expires_after="2026-03-22"> + enum="WebApkGooglePlayInstallResult" expires_after="2026-05-24"> <owner>hartmanng@chromium.org</owner> <owner>src/chrome/android/webapk/OWNERS</owner> <summary> @@ -104,7 +104,7 @@ </histogram> <histogram name="WebApk.Install.InstallResult" enum="WebApkInstallResult" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>eirage@chromium.org</owner> <owner>hartmanng@chromium.org</owner> <owner>src/chrome/android/webapk/OWNERS</owner> @@ -207,7 +207,7 @@ </histogram> <histogram name="WebApk.ShellApkVersion2{WebApkDistributorType}" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>hartmanng@chromium.org</owner> <owner>src/chrome/android/webapk/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_audio/histograms.xml b/tools/metrics/histograms/metadata/web_audio/histograms.xml index c47154f..3975647 100644 --- a/tools/metrics/histograms/metadata/web_audio/histograms.xml +++ b/tools/metrics/histograms/metadata/web_audio/histograms.xml
@@ -145,7 +145,7 @@ </histogram> <histogram name="WebAudio.AudioContext.CreateTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>cduvall@chromium.org</owner> @@ -182,7 +182,7 @@ </histogram> <histogram name="WebAudio.AudioContext.latencyHintCategory" units="units" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -234,7 +234,7 @@ </histogram> <histogram name="WebAudio.AudioContext.Operation" - enum="WebAudioContextOperation" expires_after="2026-03-22"> + enum="WebAudioContextOperation" expires_after="2026-05-24"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>fdoray@chromium.org</owner> @@ -294,7 +294,7 @@ </histogram> <histogram name="WebAudio.AudioDestination.HardwareOutputLatency" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> @@ -524,7 +524,7 @@ </histogram> <histogram name="WebAudio.OfflineAudioContext.CreateTime" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>mjwilson@chromium.org</owner> <owner>hongchan@chromium.org</owner> <owner>cduvall@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml index 3148bab..d0fa4693 100644 --- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml +++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -757,7 +757,7 @@ </histogram> <histogram name="WebRTC.BWE.InitialBandwidthEstimate" units="kbps" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>holmer@chromium.org</owner> <summary>The bandwidth estimate 2 seconds into a WebRTC call.</summary> </histogram> @@ -797,7 +797,7 @@ </histogram> <histogram name="WebRTC.BWE.RampUpTimeTo2000kbpsInMs" units="ms" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>holmer@chromium.org</owner> <summary> The time it takes the estimated bandwidth to reach 2000 kbps from the first @@ -912,7 +912,7 @@ </histogram> <histogram name="WebRTC.Call.BitrateReceivedInKbps" units="kbps" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>holmer@chromium.org</owner> <summary> Average total bitrate received during a call (audio + video + RTCP), counted @@ -986,7 +986,7 @@ </histogram> <histogram name="WebRTC.Call.VideoBitrateReceivedInKbps" units="kbps" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>holmer@chromium.org</owner> <summary> Average video bitrate received during a call, counted from first packet @@ -1102,7 +1102,7 @@ </histogram> <histogram name="WebRTC.DesktopCapture.Win.DirectXCapturerResult" - enum="WebRtcDirectXCapturerResult" expires_after="2026-03-22"> + enum="WebRtcDirectXCapturerResult" expires_after="2026-05-24"> <owner>henrika@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -1134,7 +1134,7 @@ </histogram> <histogram name="WebRTC.DesktopCapture.Win.WgcCaptureSessionStartResult" - enum="WebRtcWgcCaptureSessionStartResult" expires_after="2026-03-22"> + enum="WebRtcWgcCaptureSessionStartResult" expires_after="2026-05-24"> <owner>alcooper@chromium.org</owner> <owner>henrika@chromium.org</owner> <owner>edgecapabilitiesdev@microsoft.com</owner> @@ -1362,7 +1362,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.Duration.Signaling" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>handellm@google.com</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -1458,7 +1458,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.Latency.Signaling" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>handellm@google.com</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -1474,7 +1474,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.Latency.Worker" units="microseconds" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>handellm@google.com</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -3265,7 +3265,7 @@ </histogram> <histogram name="WebRTC.Video.Screenshare.HarmonicFrameRate" units="fps" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>ssilkin@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/webapps/histograms.xml b/tools/metrics/histograms/metadata/webapps/histograms.xml index 5c8e7718..adf1c6c 100644 --- a/tools/metrics/histograms/metadata/webapps/histograms.xml +++ b/tools/metrics/histograms/metadata/webapps/histograms.xml
@@ -94,7 +94,7 @@ </histogram> <histogram name="AppBanners.DisplayEvent" enum="AppBannersDisplayEvent" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>pjmclachlan@google.com</owner> <owner>pcovell@google.com</owner> <summary> @@ -214,7 +214,7 @@ </histogram> <histogram name="Launch.WebApp.DiyOrCrafted" enum="LaunchedAppType" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dibyapal@chromium.org</owner> <owner>pwa-team@google.com</owner> <summary> @@ -224,7 +224,7 @@ </histogram> <histogram name="Launch.WebAppDisplayMode" enum="WebAppDisplayMode" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>peter@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -813,7 +813,7 @@ </histogram> <histogram name="WebApp.Icon.AppsWithEmptyDownloadedIconSizes" units="web apps" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>alancutter@chromium.org</owner> <owner>pwa-team@google.com</owner> <summary> @@ -1037,7 +1037,7 @@ </histogram> <histogram name="Webapp.Install.DisplayMode2" enum="WebAppDisplayMode" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>peter@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -1195,7 +1195,7 @@ </histogram> <histogram name="WebApp.InstalledCount.ByUserNotLocallyInstalled" units="count" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dmurph@chromium.org</owner> <owner>pwa-team@google.com</owner> <summary> @@ -2598,14 +2598,14 @@ </histogram> <histogram name="WebApp.Shortcuts.Creation.Result" - enum="ShortcutsCreationResult" expires_after="2026-03-22"> + enum="ShortcutsCreationResult" expires_after="2026-05-24"> <owner>phillis@chromium.org</owner> <owner>dmurph@chromium.org</owner> <summary>Records the result of shortcut creation for PWA.</summary> </histogram> <histogram name="WebApp.Shortcuts.Delete.Result" enum="BooleanSuccess" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>dmurph@google.com</owner> <owner>pwa-team@google.com</owner> <summary> @@ -2619,7 +2619,7 @@ </histogram> <histogram name="WebApp.Shortcuts.Update.Result" enum="BooleanSuccess" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>camdenking@google.com</owner> <owner>pwa-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/webauthn/histograms.xml b/tools/metrics/histograms/metadata/webauthn/histograms.xml index cb7bf659..530568b 100644 --- a/tools/metrics/histograms/metadata/webauthn/histograms.xml +++ b/tools/metrics/histograms/metadata/webauthn/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="WebAuthentication.Android.CredManAvailability" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>derinel@google.com</owner> <owner>kenrb@chromium.org</owner> <summary> @@ -53,7 +53,7 @@ </histogram> <histogram name="WebAuthentication.Android.CredManModalRequests" - enum="CredManGetRequestEnum" expires_after="2026-03-22"> + enum="CredManGetRequestEnum" expires_after="2026-05-24"> <owner>derinel@google.com</owner> <owner>kenrb@chromium.org</owner> <summary> @@ -360,7 +360,7 @@ </histogram> <histogram name="WebAuthentication.GPM.GetAssertion" - enum="GPMGetAssertionEvents" expires_after="2026-03-22"> + enum="GPMGetAssertionEvents" expires_after="2026-05-24"> <owner>natiahlyi@google.com</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -387,7 +387,7 @@ </histogram> <histogram name="WebAuthentication.GPM.MakeCredential" - enum="GPMMakeCredentialEvents" expires_after="2026-03-22"> + enum="GPMMakeCredentialEvents" expires_after="2026-05-24"> <owner>natiahlyi@google.com</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -520,7 +520,7 @@ </histogram> <histogram name="WebAuthentication.OnboardingEvents" enum="OnboardingEvents" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>natiahlyi@google.com</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -567,7 +567,7 @@ </histogram> <histogram name="WebAuthentication.PinRenewalEvent" - enum="WebAuthenticationPinRenewalEvent" expires_after="2026-03-22"> + enum="WebAuthenticationPinRenewalEvent" expires_after="2026-05-24"> <owner>agl@google.com</owner> <owner>kenrb@chromium.org</owner> <summary>Records events related to GPM PIN renewals</summary> @@ -586,7 +586,7 @@ <histogram name="WebAuthentication.SignalAllAcceptedCredentialsRemovedGPMPasskey" - enum="SignalAllAcceptedCredentialsResult" expires_after="2026-03-22"> + enum="SignalAllAcceptedCredentialsResult" expires_after="2026-05-24"> <owner>nsatragno@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -597,7 +597,7 @@ </histogram> <histogram name="WebAuthentication.SignalCurrentUserDetailsUpdatedGPMPasskey" - enum="SignalCurrentUserDetailsResult" expires_after="2026-03-22"> + enum="SignalCurrentUserDetailsResult" expires_after="2026-05-24"> <owner>nsatragno@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -608,7 +608,7 @@ </histogram> <histogram name="WebAuthentication.SignalUnknownCredentialRemovedGPMPasskey" - enum="SignalUnknownCredentialResult" expires_after="2026-01-18"> + enum="SignalUnknownCredentialResult" expires_after="2026-05-24"> <owner>nsatragno@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/windows/histograms.xml b/tools/metrics/histograms/metadata/windows/histograms.xml index 6dad5a5..4bb064c 100644 --- a/tools/metrics/histograms/metadata/windows/histograms.xml +++ b/tools/metrics/histograms/metadata/windows/histograms.xml
@@ -140,7 +140,7 @@ </histogram> <histogram name="Windows.HasHighResolutionTimeTicks" enum="Boolean" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>brucedawson@chromium.org</owner> <owner>gab@chromium.org</owner> <summary> @@ -380,7 +380,7 @@ </histogram> <histogram name="Windows.ProcessorFamily" enum="ProcessorFamily" - expires_after="2026-03-22"> + expires_after="2026-05-24"> <owner>rkc@chromium.org</owner> <owner>vnagarnaik@google.com</owner> <owner>rockot@chromium.org</owner>
diff --git a/ui/ozone/platform/flatland/flatland_surface_factory.cc b/ui/ozone/platform/flatland/flatland_surface_factory.cc index 54c32b7..8e98a5f 100644 --- a/ui/ozone/platform/flatland/flatland_surface_factory.cc +++ b/ui/ozone/platform/flatland/flatland_surface_factory.cc
@@ -178,8 +178,7 @@ NativePixmapUsageSet native_pixmap_usage = BufferUsageToNativePixmapUsage(usage); return flatland_sysmem_buffer_manager_.CreateNativePixmap( - vk_device, size, viz::SharedImageFormatToBufferFormat(format), - native_pixmap_usage); + vk_device, size, format, native_pixmap_usage); } scoped_refptr<gfx::NativePixmap>
diff --git a/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.cc b/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.cc index b615020..11353e38 100644 --- a/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.cc +++ b/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.cc
@@ -63,7 +63,7 @@ scoped_refptr<gfx::NativePixmap> FlatlandSysmemBufferManager::CreateNativePixmap(VkDevice vk_device, gfx::Size size, - gfx::BufferFormat buffer_format, + viz::SharedImageFormat format, NativePixmapUsageSet usage) { gfx::NativePixmapHandle pixmap_handle; zx::eventpair service_handle; @@ -73,7 +73,6 @@ auto collection = base::MakeRefCounted<FlatlandSysmemBufferCollection>(); // Scanout images must be registered with flatland. - auto format = viz::GetSharedImageFormat(buffer_format); if (!collection->Initialize( sysmem_allocator_.get(), flatland_allocator_.get(), flatland_surface_factory_, std::move(service_handle),
diff --git a/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.h b/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.h index ca4594d5..3614e794 100644 --- a/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.h +++ b/ui/ozone/platform/flatland/flatland_sysmem_buffer_manager.h
@@ -50,7 +50,7 @@ scoped_refptr<gfx::NativePixmap> CreateNativePixmap( VkDevice vk_device, gfx::Size size, - gfx::BufferFormat format, + viz::SharedImageFormat format, NativePixmapUsageSet usage); // TODO(crbug.com/42050538): Instead of an additional
diff --git a/v8 b/v8 index 892149b..209d7cd 160000 --- a/v8 +++ b/v8
@@ -1 +1 @@ -Subproject commit 892149b3c1b4db88636943e09e4d4d2f43495e9a +Subproject commit 209d7cd983a57b82e8dfb375240d38869e6ede7e