diff --git a/DEPS b/DEPS index 53286b0..bcd4453 100644 --- a/DEPS +++ b/DEPS
@@ -298,11 +298,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'c59f2d912981432362352d6ae5620726d41a85cb', + 'v8_revision': 'c319a15e697a26b8b2b31e2b8a3733ce82c6bb86', # 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': '3b7528e1c70f8cbe5643d91e3647a502a348e29f', + 'angle_revision': '5220e634850ec26f4b4b0f305ba2a69cf0bc55df', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -378,7 +378,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': 'b0196172485ea5c6606d909d19a4e066ee32c004', + 'devtools_frontend_revision': 'ea58b6707370f3b440b362fe178e7f6cd4a9170b', # 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. @@ -402,7 +402,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': '56724d23899220ea9a775b4ab4458e6ebc53ad52', + 'dawn_revision': 'd03fe7eda12dfce1578bf69da2814f89fd78c1e9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -510,7 +510,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. - 'compiler_rt_revision': '3b1c4b0e4fee85b10a2272117315d520c607a328', + 'compiler_rt_revision': 'b60a6cce655fa5ac36110d02f426640debad969b', # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. @@ -1563,7 +1563,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - '4730f3cb56f9907131c3de8b318b4300b39d3e3d', + 'd359660aab561909da606d2e9c3d4f688747b621', 'condition': 'checkout_android and checkout_src_internal', }, @@ -1717,7 +1717,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'paQ7h7FTQKWOd-p_4_zJ-R9frQx5tWzXg05pnk8rlOgC', + 'version': 'Idva3biQJIG3lmYI64UgBzmsPGxUkw5HLWvhrUuSzw8C', }, ], 'condition': 'checkout_android and non_git_source', @@ -2053,7 +2053,7 @@ 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '9a172103022289fcd1374c4d12d0192204343f59', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'ae917185501cda874f12f3e1d870de8505b0807c', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -2912,7 +2912,7 @@ 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@49cfa5309d365d4ea40bd92b399595c30d8dc96e', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@317a1e4780ef130e7b92fc287cf390ac2aff0c22', 'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@21b4e37133868b3a50ef15fc027ecd6d3a52c875', '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@2a611a970fdbc41ac2e3e328802aed9985352dca', @@ -2921,7 +2921,7 @@ 'src/third_party/vulkan-loader/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Loader@c8a2c8c9164a58ce71c1c77104e28e8de724539e', 'src/third_party/vulkan-tools/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Tools@e3fc64396755191b3c51e5c57d0454872e7fa487', 'src/third_party/vulkan-utility-libraries/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Utility-Libraries@0f0babb553a60da5971d9f4d40cf720ce01602f1', - 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@d9c0a0baa0d2c7357d464d73a6fcee76f970c39b', + 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@89c6a9b6500e2e0bda127113bbfe1d70f1ab2d20', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + '56300b29fbfcc693ee6609ddad3fdd5b7a449a21', @@ -3099,7 +3099,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'X0OvKJ4hTgwGhoHFfwpOP6nzXL0HNoNKioTe7Tq4CykC', + 'version': 'Sbmo1ctvdBs5hWFme-ZL7NnQlD85co3w6pqV5bsPJPUC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -3110,7 +3110,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'b8W8bh4rI2sAAObZO4i-kD1gZ2_CeelZ2RyB1vHD0dwC', + 'version': 'rmnTi3AigSdTiJQQgHn06DImPMx9DaUTDYOyxUOYjfsC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -3143,7 +3143,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'VNF9U-WSYuKJG4kz1UxRus76LZKARhvtz16JMDEIF4sC', + 'version': '54dSNsJbsF7eoqYZi8q8ljr9QyfDUE8u7BCQKCv3JBQC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -4686,7 +4686,7 @@ 'src/components/optimization_guide/internal': { 'url': Var('chrome_git') + '/chrome/components/optimization_guide.git' + '@' + - '3c89dd68e24fda4ce1dad3c9ee0c9441059f7fb0', + 'bfac225ad8bb6ed5d309fe020838c6daa4d2f032', 'condition': 'checkout_src_internal', }, @@ -4752,7 +4752,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - 'b8a110660c3ff24ecb3358f24baf562ceca2b41c', + '387b9826cd0a115bfb093a4057895a3a84123f01', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt index 16c8f29..6311f487 100644 --- a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt +++ b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
@@ -9196,6 +9196,8 @@ method constructor interface SoftNavigationEntry : PerformanceEntry attribute @@toStringTag + getter paintTime + getter presentationTime method constructor interface SourceBuffer : EventTarget attribute @@toStringTag
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index f6c43f0..d4c18499 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -300,7 +300,7 @@ <translation id="1957958912175573503">ตั้งค่าภาษา</translation> <translation id="1961239773406905488">การแสดงตัวอย่างจากกล้องถ่ายรูปซ่อนอยู่</translation> <translation id="1961832440516943645"><ph name="DATE" />, <ph name="TIME" /></translation> -<translation id="1962969542251276847">ล็อกหน้าจอ</translation> +<translation id="1962969542251276847">หน้าจอล็อก</translation> <translation id="1967970931040389207">เปิดฮอตสปอต</translation> <translation id="1969011864782743497"><ph name="DEVICE_NAME" /> (USB)</translation> <translation id="1971815855639997522">นำเดสก์และหน้าต่างออกแล้ว กด Control + Z เพื่อเลิกทำการดำเนินการ</translation>
diff --git a/ash/system/mahi/mahi_constants.h b/ash/system/mahi/mahi_constants.h index 0687411..acd3717a 100644 --- a/ash/system/mahi/mahi_constants.h +++ b/ash/system/mahi/mahi_constants.h
@@ -24,7 +24,6 @@ kThumbsUpButton, kThumbsDownButton, kFooterLabel, - kLearnMoreLink, kRefreshView, kMahiPanelView, kSummaryOutlinesSection,
diff --git a/ash/system/mahi/mahi_panel_view_unittest.cc b/ash/system/mahi/mahi_panel_view_unittest.cc index 7135ecad..42b714a 100644 --- a/ash/system/mahi/mahi_panel_view_unittest.cc +++ b/ash/system/mahi/mahi_panel_view_unittest.cc
@@ -1754,15 +1754,16 @@ EXPECT_TRUE(question_answer_view->children().empty()); } -// TODO(crbug.com/333800096): Re-enable this test -TEST_F(MahiPanelViewTest, DISABLED_ClickMetrics) { +TEST_F(MahiPanelViewTest, ClickMetrics) { base::HistogramTester histogram; // Learn more button. histogram.ExpectBucketCount(mahi_constants::kMahiButtonClickHistogramName, mahi_constants::PanelButton::kLearnMoreLink, 0); - LeftClickOn( - panel_view()->GetViewByID(mahi_constants::ViewId::kLearnMoreLink)); + views::test::RunScheduledLayout(widget()); + views::AsViewClass<views::StyledLabel>( + panel_view()->GetViewByID(mahi_constants::ViewId::kFooterLabel)) + ->ClickFirstLinkForTesting(); histogram.ExpectBucketCount(mahi_constants::kMahiButtonClickHistogramName, mahi_constants::PanelButton::kLearnMoreLink, 1); histogram.ExpectTotalCount(mahi_constants::kMahiButtonClickHistogramName, 1); @@ -1815,6 +1816,7 @@ histogram.ExpectBucketCount( mahi_constants::kMahiButtonClickHistogramName, mahi_constants::PanelButton::kGoToQuestionAndAnswerButton, 1); + histogram.ExpectTotalCount(mahi_constants::kMahiButtonClickHistogramName, 4); // Close button. views::test::RunScheduledLayout(widget());
diff --git a/ash/system/unified/screen_capture_tray_item_view.cc b/ash/system/unified/screen_capture_tray_item_view.cc index eb9120e8..06aba6ca 100644 --- a/ash/system/unified/screen_capture_tray_item_view.cc +++ b/ash/system/unified/screen_capture_tray_item_view.cc
@@ -83,12 +83,13 @@ void ScreenCaptureTrayItemView::MultiCaptureStarted(const std::string& label, const url::Origin& origin) { - if (!base::Contains(web_app::IwaKeyDistributionInfoProvider::GetInstance() - .GetSkipMultiCaptureNotificationBundleIds(), - origin.host())) { - requests_.emplace(label, ScreenCaptureTrayItemMetadata()); - Refresh(); + if (base::FeatureList::IsEnabled( + chromeos::features::kMultiCaptureReworkedUsageIndicators)) { + return; } + + requests_.emplace(label, ScreenCaptureTrayItemMetadata()); + Refresh(); } void ScreenCaptureTrayItemView::MultiCaptureStartedFromApp(
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc index f436bbf..45835b8 100644 --- a/cc/layers/picture_layer_impl.cc +++ b/cc/layers/picture_layer_impl.cc
@@ -299,9 +299,9 @@ auto* quad = render_pass->CreateAndAppendDrawQuad<viz::PictureDrawQuad>(); quad->SetNew( shared_quad_state, geometry_rect, visible_geometry_rect, needs_blending, - texture_rect, texture_size, nearest_neighbor_, quad_content_rect, - max_contents_scale, std::move(image_animation_map), - raster_source_->GetDisplayItemList(), GetRasterInducingScrollOffsets()); + texture_rect, nearest_neighbor_, quad_content_rect, max_contents_scale, + std::move(image_animation_map), raster_source_->GetDisplayItemList(), + GetRasterInducingScrollOffsets()); ValidateQuadResources(quad); return; } @@ -491,7 +491,7 @@ shared_quad_state, offset_geometry_rect, offset_visible_geometry_rect, needs_blending, draw_info.resource_id_for_export(), texture_rect, - draw_info.resource_size(), nearest_neighbor_, + nearest_neighbor_, !layer_tree_impl()->settings().enable_edge_anti_aliasing); ValidateQuadResources(quad); has_draw_quad = true;
diff --git a/cc/layers/render_surface_unittest.cc b/cc/layers/render_surface_unittest.cc index d10cd8d9..d5b962a 100644 --- a/cc/layers/render_surface_unittest.cc +++ b/cc/layers/render_surface_unittest.cc
@@ -70,8 +70,7 @@ for (const auto& rect : quad_rects_) { auto* quad = render_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); quad->SetNew(shared_quad_state, rect, rect, needs_blending, - viz::kInvalidResourceId, gfx::RectF(rect), bounds(), false, - false); + viz::kInvalidResourceId, gfx::RectF(rect), false, false); } }
diff --git a/cc/layers/tile_display_layer_impl.cc b/cc/layers/tile_display_layer_impl.cc index 4ecb4f5..f9bb106 100644 --- a/cc/layers/tile_display_layer_impl.cc +++ b/cc/layers/tile_display_layer_impl.cc
@@ -274,7 +274,6 @@ quad->SetNew(shared_quad_state, offset_geometry_rect, offset_visible_geometry_rect, needs_blending, resource->resource_id, texture_rect, - iter.CurrentTiling()->tile_size(), /*nearest_neighbor=*/false, !layer_tree_impl()->settings().enable_edge_anti_aliasing); has_draw_quad = true;
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc index 9141b9d..d626f88 100644 --- a/cc/test/render_pass_test_utils.cc +++ b/cc/test/render_pass_test_utils.cc
@@ -258,8 +258,7 @@ auto* scaled_tile_quad = to_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); scaled_tile_quad->SetNew(shared_state, rect, visible_rect, needs_blending, - resource2, gfx::RectF(0, 0, 50, 50), - gfx::Size(50, 50), false, false); + resource2, gfx::RectF(0, 0, 50, 50), false, false); viz::SharedQuadState* transformed_state = to_pass->CreateAndAppendSharedQuadState(); @@ -270,9 +269,9 @@ transformed_state->quad_to_target_transform * rotation; auto* transformed_tile_quad = to_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); - transformed_tile_quad->SetNew( - transformed_state, rect, visible_rect, needs_blending, resource3, - gfx::RectF(0, 0, 100, 100), gfx::Size(100, 100), false, false); + transformed_tile_quad->SetNew(transformed_state, rect, visible_rect, + needs_blending, resource3, + gfx::RectF(0, 0, 100, 100), false, false); viz::SharedQuadState* shared_state2 = to_pass->CreateAndAppendSharedQuadState(); @@ -284,8 +283,7 @@ auto* tile_quad = to_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); tile_quad->SetNew(shared_state2, rect, visible_rect, needs_blending, - resource4, gfx::RectF(0, 0, 100, 100), gfx::Size(100, 100), - false, false); + resource4, gfx::RectF(0, 0, 100, 100), false, false); return {resource1, resource2, resource3, resource4, resource5, resource6, resource8}; @@ -405,8 +403,8 @@ viz::TileDrawQuad* scaled_tile_quad = to_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); scaled_tile_quad->SetNew(shared_state, rect, visible_rect, needs_blending, - mapped_resource2, gfx::RectF(0, 0, 50, 50), - gfx::Size(50, 50), false, false); + mapped_resource2, gfx::RectF(0, 0, 50, 50), false, + false); viz::SharedQuadState* transformed_state = to_pass->CreateAndAppendSharedQuadState(); @@ -417,9 +415,9 @@ transformed_state->quad_to_target_transform * rotation; viz::TileDrawQuad* transformed_tile_quad = to_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); - transformed_tile_quad->SetNew( - transformed_state, rect, visible_rect, needs_blending, mapped_resource3, - gfx::RectF(0, 0, 100, 100), gfx::Size(100, 100), false, false); + transformed_tile_quad->SetNew(transformed_state, rect, visible_rect, + needs_blending, mapped_resource3, + gfx::RectF(0, 0, 100, 100), false, false); viz::SharedQuadState* shared_state2 = to_pass->CreateAndAppendSharedQuadState(); @@ -432,8 +430,7 @@ viz::TileDrawQuad* tile_quad = to_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); tile_quad->SetNew(shared_state2, rect, visible_rect, needs_blending, - mapped_resource4, gfx::RectF(0, 0, 100, 100), - gfx::Size(100, 100), false, false); + mapped_resource4, gfx::RectF(0, 0, 100, 100), false, false); } std::unique_ptr<viz::AggregatedRenderPass> CopyToAggregatedRenderPass(
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc index d29b6c4..122a907 100644 --- a/cc/tiles/tile_manager.cc +++ b/cc/tiles/tile_manager.cc
@@ -1079,20 +1079,16 @@ did_oom_on_last_assign_ = !had_enough_memory_to_schedule_tiles_needed_now; // Since this is recorded once per frame, subsample these metrics. if (metrics_sub_sampler_.ShouldSample(metrics_sampling_rate_)) { - if (running_on_renderer_process_) { - UMA_HISTOGRAM_BOOLEAN("Compositing.TileManager.EnoughMemory.Renderer", - had_enough_memory_to_schedule_tiles_needed_now); - } else { + if (!running_on_renderer_process_) { UMA_HISTOGRAM_BOOLEAN("Compositing.TileManager.EnoughMemory.Browser", had_enough_memory_to_schedule_tiles_needed_now); - } - if (did_oom_on_last_assign_) { - auto memory_limit = hard_memory_limit.memory_bytes() / (1024 * 1024); - if (running_on_renderer_process_) { + if (had_enough_memory_to_schedule_tiles_needed_now) { UMA_HISTOGRAM_MEMORY_MEDIUM_MB( - "Compositing.TileManager.LimitWhenNotEnoughMemory.Renderer", - memory_limit); - } else { + "Compositing.TileManager.MemoryUsageWhenEnoughMemory", + memory_usage.memory_bytes() / (1024 * 1024)); + } + if (did_oom_on_last_assign_) { + auto memory_limit = hard_memory_limit.memory_bytes() / (1024 * 1024); UMA_HISTOGRAM_MEMORY_MEDIUM_MB( "Compositing.TileManager.LimitWhenNotEnoughMemory.Browser", memory_limit);
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 2f4e0d1..f6a1303 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -10756,7 +10756,7 @@ render_pass->CreateAndAppendDrawQuad<viz::TileDrawQuad>(); test_blending_draw_quad->SetNew( shared_quad_state, quad_rect_, visible_quad_rect, needs_blending, - resource_id_, gfx::RectF(0, 0, 1, 1), gfx::Size(1, 1), false, false); + resource_id_, gfx::RectF(0, 0, 1, 1), false, false); EXPECT_EQ(blend_, test_blending_draw_quad->ShouldDrawWithBlending()); EXPECT_EQ(has_render_surface_,
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index 86007c8..e294991 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn
@@ -21,7 +21,6 @@ import("//chrome/chrome_paks.gni") import("//chrome/common/features.gni") import("//chrome/process_version_rc_template.gni") -import("//components/nacl/features.gni") import("//components/optimization_guide/features.gni") import("//extensions/buildflags/buildflags.gni") import("//media/media_options.gni") @@ -972,27 +971,6 @@ } } - if (enable_nacl) { - bundle_data("chrome_framework_plugins") { - sources = [] - outputs = - [ "{{bundle_contents_dir}}/Internet Plug-Ins/{{source_file_part}}" ] - public_deps = [] - - if (enable_nacl) { - if (current_cpu == "x86") { - sources += [ "$root_out_dir/nacl_irt_x86_32.nexe" ] - } else if (current_cpu == "x64") { - sources += [ "$root_out_dir/nacl_irt_x86_64.nexe" ] - } - public_deps += [ "//ppapi/native_client:irt" ] - } - } - } else { - group("chrome_framework_plugins") { - } - } - # Add the ANGLE .dylibs in the MODULE_DIR of Chromium.app if (!use_static_angle) { bundle_data("angle_binaries") { @@ -1184,10 +1162,6 @@ framework_contents += [ "Default Apps" ] } - if (enable_nacl) { - framework_contents += [ "Internet Plug-Ins" ] - } - configs += [ "//build/config/compiler:wexit_time_destructors" ] configs -= [ "//build/config/compiler:thinlto_optimize_default" ] configs += [ "//build/config/compiler:thinlto_optimize_max" ] @@ -1202,7 +1176,6 @@ bundle_deps = [ ":chrome_framework_helpers", - ":chrome_framework_plugins", ":chrome_framework_resources", ":optimization_guide_library", ":swiftshader_binaries", @@ -1462,13 +1435,6 @@ public_deps += [ "//printing" ] } - if (enable_nacl) { - public_deps += [ - "//components/nacl/browser", - "//components/nacl/renderer/plugin:nacl_trusted_plugin", - ] - } - if (is_chromeos) { public_deps += [ "//ash/constants",
diff --git a/chrome/VERSION b/chrome/VERSION index 661621111..6de144ee 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=139 MINOR=0 -BUILD=7252 +BUILD=7254 PATCH=0
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb index 90045ae..f93c47fb 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{<ph name="NUM_MINS_ONE" /> মিনিট আগে তৈরি করা হয়েছে}one{<ph name="NUM_MINS_MANY" /> মিনিট আগে তৈরি করা হয়েছে}other{<ph name="NUM_MINS_MANY" /> মিনিট আগে তৈরি করা হয়েছে}}</translation> <translation id="1499635324672558517">সবকটি ছদ্মবেশী ট্যাব বন্ধ করবেন?</translation> <translation id="1501480321619201731">আইটেমের গ্রুপ মুছুন</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" />টি ইনঅ্যাক্টিভ আইটেম}one{<ph name="TABS_COUNT_MANY" />টি ইনঅ্যাক্টিভ আইটেম}other{<ph name="TABS_COUNT_MANY" />টি ইনঅ্যাক্টিভ আইটেম}}</translation> <translation id="1555130319947370107">নীল</translation> <translation id="161042844686301425">নীলাভ</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" />টি ট্যাব, গ্রুপ করা হয়েছে</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" />টি নতুন ট্যাব}one{<ph name="MANY_ADDED" />টি নতুন ট্যাব}other{<ph name="MANY_ADDED" />টি নতুন ট্যাব}}</translation> <translation id="3613492231657284463">অ্যাক্টিভ না থাকা ট্যাবের ডায়ালগ লুকান</translation> <translation id="3619255692378312441">অ্যাক্সেস ম্যানেজ করুন</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{আইটেম বন্ধ করুন}one{আইটেম বন্ধ করুন}other{আইটেমগুলি বন্ধ করুন}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">শিট শেয়ার করার প্রিভিউয়ের জন্য থাম্বনেল।</translation> <translation id="3810973564298564668">পরিচালনা করুন</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">বেগুনি</translation> <translation id="427987768447457592">নতুন ট্যাব গ্রুপ</translation> <translation id="4371591986692297148">চালু নেই</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{আইটেম ফিরিয়ে আনুন}one{আইটেম ফিরিয়ে আনুন}other{আইটেমগুলি ফিরিয়ে আনুন}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{<ph name="NUM_DAYS_ONE" /> দিন আগে আপডেট করা হয়েছে}one{<ph name="NUM_DAYS_MANY" /> দিন আগে আপডেট করা হয়েছে}other{<ph name="NUM_DAYS_MANY" /> দিন আগে আপডেট করা হয়েছে}}</translation> <translation id="4686942373615810936">এইমাত্র তৈরি করা হয়েছে</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{১ দিন পরে বন্ধ হয়ে যাবে}one{<ph name="DAY_COUNT_MANY" /> দিন পরে বন্ধ হয়ে যাবে}other{<ph name="DAY_COUNT_MANY" /> দিন পরে বন্ধ হয়ে যাবে}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{<ph name="TABS_COUNT_ONE" />টি ট্যাব, <ph name="COLOR_NAME" /> কালার সহ, ট্যাব গ্রুপ বড় করুন।}one{<ph name="TABS_COUNT_MANY" />টি ট্যাব, <ph name="COLOR_NAME" /> কালার সহ, ট্যাব গ্রুপ বড় করুন।}other{<ph name="TABS_COUNT_MANY" />টি ট্যাব, <ph name="COLOR_NAME" /> কালার সহ, ট্যাব গ্রুপ বড় করুন।}}</translation> <translation id="945522503751344254">মতামত জানান</translation> <translation id="992256792861109788">গোলাপী</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{১টি ইনঅ্যাক্টিভ আইটেম বন্ধ করবেন?}one{<ph name="TAB_COUNT_MANY" />টি ইনঅ্যাক্টিভ আইটেম বন্ধ করবেন?}other{<ph name="TAB_COUNT_MANY" />টি ইনঅ্যাক্টিভ আইটেম বন্ধ করবেন?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb index 9235b2e..87ad427 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{Δημιουργήθηκε πριν από <ph name="NUM_MINS_ONE" /> λεπτό}other{Δημιουργήθηκε πριν από <ph name="NUM_MINS_MANY" /> λεπτά}}</translation> <translation id="1499635324672558517">Θέλετε να κλείσετε όλες τις καρτέλες ανώνυμης περιήγησης;</translation> <translation id="1501480321619201731">Διαγραφή ομάδας</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> ανενεργό στοιχείο}other{<ph name="TABS_COUNT_MANY" /> ανενεργά στοιχεία}}</translation> <translation id="1555130319947370107">Μπλε</translation> <translation id="161042844686301425">Κυανό</translation> <translation id="1645759014353344461">Ομαδοποιήθηκαν <ph name="TABS_COUNT_MANY" /> καρτέλες</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> νέα καρτέλα}other{<ph name="MANY_ADDED" /> νέες καρτέλες}}</translation> <translation id="3613492231657284463">Παράθυρο διαλόγου απόκρυψης ανενεργών καρτελών</translation> <translation id="3619255692378312441">Διαχείριση πρόσβασης</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{Κλείσιμο στοιχείου}other{Κλείσιμο στοιχείων}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">Μικρ. προεπ. φύλλου κοινής χρήσης.</translation> <translation id="3810973564298564668">Διαχείριση</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">Μοβ</translation> <translation id="427987768447457592">Νέα ομάδα καρτελών</translation> <translation id="4371591986692297148">Ανενεργή</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{Επαναφορά στοιχείου}other{Επαναφορά στοιχείων}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{Έγινε ενημέρωση πριν από <ph name="NUM_DAYS_ONE" /> ημέρα}other{Έγινε ενημέρωση πριν από <ph name="NUM_DAYS_MANY" /> ημέρες}}</translation> <translation id="4686942373615810936">Δημιουργήθηκε μόλις τώρα</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{Κλείσιμο μετά από 1 ημέρα}other{Κλείσιμο μετά από <ph name="DAY_COUNT_MANY" /> ημέρες}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{Ανάπτυξη ομάδας καρτελών με <ph name="TABS_COUNT_ONE" /> καρτέλα, χρώμα <ph name="COLOR_NAME" />.}other{Ανάπτυξη ομάδας καρτελών με <ph name="TABS_COUNT_MANY" /> καρτέλες, χρώμα <ph name="COLOR_NAME" />.}}</translation> <translation id="945522503751344254">Αποστολή σχολίων</translation> <translation id="992256792861109788">Ροζ</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{Κλείσιμο 1 ανενεργού στοιχείου;}other{Κλείσιμο <ph name="TAB_COUNT_MANY" /> ανενεργών στοιχείων;}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb index 6016edb..77870154 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{Creado hace <ph name="NUM_MINS_ONE" /> minuto}other{Creado hace <ph name="NUM_MINS_MANY" /> minutos}}</translation> <translation id="1499635324672558517">¿Cerrar todas las pestañas de Incógnito?</translation> <translation id="1501480321619201731">Eliminar grupo</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> elemento inactivo}other{<ph name="TABS_COUNT_MANY" /> elementos inactivos}}</translation> <translation id="1555130319947370107">Azul</translation> <translation id="161042844686301425">Cian</translation> <translation id="1645759014353344461">Se han agrupado <ph name="TABS_COUNT_MANY" /> pestañas</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> pestaña nueva}other{<ph name="MANY_ADDED" /> pestañas nuevas}}</translation> <translation id="3613492231657284463">Ocultar cuadro de diálogo de pestañas inactivas</translation> <translation id="3619255692378312441">Gestionar acceso</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{Cerrar elemento}other{Cerrar elementos}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">Miniatura de hoja para compartir.</translation> <translation id="3810973564298564668">Gestionar</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">Morado</translation> <translation id="427987768447457592">Nuevo grupo de pestañas</translation> <translation id="4371591986692297148">Inactivo</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{Restaurar elemento}other{Restaurar elementos}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{Actualizado hace <ph name="NUM_DAYS_ONE" /> día}other{Actualizado hace <ph name="NUM_DAYS_MANY" /> días}}</translation> <translation id="4686942373615810936">Creado ahora mismo</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{Cerrar después de 1 día}other{Cerrar después de <ph name="DAY_COUNT_MANY" /> días}}</translation> @@ -109,6 +112,7 @@ <translation id="5556417849629758491">Ver información de la tienda, opción disponible cerca de la parte superior de la pantalla</translation> <translation id="5627941783489838464">No hay actualizaciones de pestañas</translation> <translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> enlace de Chrome}other{<ph name="TABS_COUNT_MANY" /> enlaces de Chrome}}</translation> +<translation id="5746204836956568669">¿Agrupar <ph name="NUMBER_OF_TABS" /> pestañas para trabajar más rápido?</translation> <translation id="58326064309361797">Arrastra las pestañas para agruparlas</translation> <translation id="5901630391730855834">Amarillo</translation> <translation id="5972844218283131174">Desmarcar todo</translation> @@ -206,4 +210,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{Desplegar el grupo de pestañas con <ph name="TABS_COUNT_ONE" /> pestaña de color <ph name="COLOR_NAME" />.}other{Desplegar el grupo de pestañas con <ph name="TABS_COUNT_MANY" /> pestañas de color <ph name="COLOR_NAME" />.}}</translation> <translation id="945522503751344254">Enviar comentarios</translation> <translation id="992256792861109788">Rosa</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{¿Cerrar 1 elemento inactivo?}other{¿Cerrar <ph name="TAB_COUNT_MANY" /> elementos inactivos?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb index ffff929..ccca605 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb
@@ -109,6 +109,7 @@ <translation id="5556417849629758491">Poe teabe vaatamine, valik saadaval ekraanikuva ülaosas</translation> <translation id="5627941783489838464">Vahelehtede värskendused puuduvad</translation> <translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link Chrome'ist}other{<ph name="TABS_COUNT_MANY" /> linki Chrome'ist}}</translation> +<translation id="5746204836956568669">Kas grupeerida kiiremaks töötegemiseks <ph name="NUMBER_OF_TABS" /> vahelehte?</translation> <translation id="58326064309361797">Lohistage vahelehti, et neid grupeerida</translation> <translation id="5901630391730855834">Kollane</translation> <translation id="5972844218283131174">Tühista kõik valikud</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb index ae9eae4..c6f2c91 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{<ph name="NUM_MINS_ONE" /> મિનિટ પહેલાં બનાવ્યું}one{<ph name="NUM_MINS_MANY" /> મિનિટ પહેલાં બનાવ્યું}other{<ph name="NUM_MINS_MANY" /> મિનિટ પહેલાં બનાવ્યું}}</translation> <translation id="1499635324672558517">બધી છૂપી ટૅબ બંધ કરીએ?</translation> <translation id="1501480321619201731">જૂથ ડિલીટ કરો</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> નિષ્ક્રિય આઇટમ}one{<ph name="TABS_COUNT_MANY" /> નિષ્ક્રિય આઇટમ}other{<ph name="TABS_COUNT_MANY" /> નિષ્ક્રિય આઇટમ}}</translation> <translation id="1555130319947370107">વાદળી</translation> <translation id="161042844686301425">સ્યાન</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" /> ટૅબનું ગ્રૂપ બનાવ્યું</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> નવું ટૅબ}one{<ph name="MANY_ADDED" /> નવું ટૅબ}other{<ph name="MANY_ADDED" /> નવા ટૅબ}}</translation> <translation id="3613492231657284463">નિષ્ક્રિય ટૅબ સંવાદ છુપાવો</translation> <translation id="3619255692378312441">ઍક્સેસ મેનેજ કરો</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{આઇટમ બંધ કરો}one{આઇટમ બંધ કરો}other{આઇટમ બંધ કરો}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">શેર શીટ પ્રીવ્યૂનો થંબનેલ.</translation> <translation id="3810973564298564668">મેનેજ કરો</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">જાંબલી</translation> <translation id="427987768447457592">ટૅબનું નવું ગ્રૂપ</translation> <translation id="4371591986692297148">નિષ્ક્રિય</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{આઇટમને રિસ્ટોર કરો}one{આઇટમને રિસ્ટોર કરો}other{આઇટમને રિસ્ટોર કરો}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{<ph name="NUM_DAYS_ONE" /> દિવસ પહેલાં અપડેટ કરવામાં આવ્યું}one{<ph name="NUM_DAYS_MANY" /> દિવસ પહેલાં અપડેટ કરવામાં આવ્યું}other{<ph name="NUM_DAYS_MANY" /> દિવસ પહેલાં અપડેટ કરવામાં આવ્યું}}</translation> <translation id="4686942373615810936">હમણાં જ બનાવ્યું</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{1 દિવસ પછી બંધ કરો}one{<ph name="DAY_COUNT_MANY" /> દિવસ પછી બંધ કરો}other{<ph name="DAY_COUNT_MANY" /> દિવસ પછી બંધ કરો}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{<ph name="COLOR_NAME" /> રંગનું <ph name="TABS_COUNT_ONE" /> ટૅબ ધરાવતા ટૅબના ગ્રૂપને મોટું કરો.}one{<ph name="COLOR_NAME" /> રંગનું <ph name="TABS_COUNT_MANY" /> ટૅબ ધરાવતા ટૅબના ગ્રૂપને મોટું કરો.}other{<ph name="COLOR_NAME" /> રંગના <ph name="TABS_COUNT_MANY" /> ટૅબ ધરાવતા ટૅબના ગ્રૂપને મોટું કરો.}}</translation> <translation id="945522503751344254">પ્રતિસાદ મોકલો</translation> <translation id="992256792861109788">ગુલાબી</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{1 નિષ્ક્રિય આઇટમ બંધ કરીએ?}one{<ph name="TAB_COUNT_MANY" /> નિષ્ક્રિય આઇટમ બંધ કરીએ?}other{<ph name="TAB_COUNT_MANY" /> નિષ્ક્રિય આઇટમ બંધ કરીએ?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb index 0eba1a4..4f7d74b 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{<ph name="NUM_MINS_ONE" /> 分前に作成}other{<ph name="NUM_MINS_MANY" /> 分前に作成}}</translation> <translation id="1499635324672558517">すべてのシークレット タブを閉じますか?</translation> <translation id="1501480321619201731">グループを削除</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> 個のアクティブでないアイテム}other{<ph name="TABS_COUNT_MANY" /> 個のアクティブでないアイテム}}</translation> <translation id="1555130319947370107">青</translation> <translation id="161042844686301425">シアン</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" /> 個のタブをグループ化しました</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> 個の新しいタブ}other{<ph name="MANY_ADDED" /> 個の新しいタブ}}</translation> <translation id="3613492231657284463">アクティブでないタブのダイアログを非表示にする</translation> <translation id="3619255692378312441">アクセスを管理</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{アイテムを閉じる}other{アイテムを閉じる}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" /> / <ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">共有シートのプレビューのサムネイル。</translation> <translation id="3810973564298564668">管理</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">パープル</translation> <translation id="427987768447457592">新しいタブグループ</translation> <translation id="4371591986692297148">無効</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{アイテムを復元}other{アイテムを復元}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{<ph name="NUM_DAYS_ONE" /> 日前に更新}other{<ph name="NUM_DAYS_MANY" /> 日前に更新}}</translation> <translation id="4686942373615810936">作成: たった今</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{1 日後に閉じる}other{<ph name="DAY_COUNT_MANY" /> 日後に閉じる}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{タブグループ(タブの数: <ph name="TABS_COUNT_ONE" />、色: <ph name="COLOR_NAME" />)を開きます。}other{タブグループ(タブの数: <ph name="TABS_COUNT_MANY" />、色: <ph name="COLOR_NAME" />)を開きます。}}</translation> <translation id="945522503751344254">フィードバックを送信</translation> <translation id="992256792861109788">ピンク</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{1 個のアクティブでないアイテムを閉じますか?}other{<ph name="TAB_COUNT_MANY" /> 個のアクティブでないアイテムを閉じますか?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb index 8e70f06..6dd335e 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{შეიქმნა <ph name="NUM_MINS_ONE" /> წუთის წინ}other{შეიქმნა <ph name="NUM_MINS_MANY" /> წუთის წინ}}</translation> <translation id="1499635324672558517">დაიხუროს ყველა ინკოგნიტო ჩანართი?</translation> <translation id="1501480321619201731">ჯგუფის წაშლა</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> არააქტიური ერთეული}other{<ph name="TABS_COUNT_MANY" /> არააქტიური ერთეული}}</translation> <translation id="1555130319947370107">ლურჯი</translation> <translation id="161042844686301425">ციანი</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" /> ჩანართი დაჯგუფდა</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> ახალი ჩანართი}other{<ph name="MANY_ADDED" /> ახალი ჩანართი}}</translation> <translation id="3613492231657284463">არააქტიური ჩანართების დიალოგის დამალვა</translation> <translation id="3619255692378312441">წვდომის მართვა</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{ერთეულის დახურვა}other{ერთეულების დახურვა}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">ესკიზი ფურცლის გაზიარების გადახედვისთვის.</translation> <translation id="3810973564298564668">მართვა</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">მეწამული</translation> <translation id="427987768447457592">ჩანართების ახალი ჯგუფი</translation> <translation id="4371591986692297148">არააქტიური</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{ერთეულის აღდგენა}other{ერთეულების აღდგენა}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{განახლდა <ph name="NUM_DAYS_ONE" /> დღის წინ}other{განახლდა <ph name="NUM_DAYS_MANY" /> დღის წინ}}</translation> <translation id="4686942373615810936">შეიქმნა ახლახან</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{დახურვა 1 დღის შემდეგ}other{დახურვა <ph name="DAY_COUNT_MANY" /> დღის შემდეგ}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{გააფართოვეთ ჩანართების <ph name="TABS_COUNT_ONE" />-ჩანართიანი <ph name="COLOR_NAME" /> ფერის ჯგუფი.}other{გააფართოვეთ ჩანართების <ph name="TABS_COUNT_MANY" />-ჩანართიანი <ph name="COLOR_NAME" /> ფერის ჯგუფი.}}</translation> <translation id="945522503751344254">შეფასების გაგზავნა</translation> <translation id="992256792861109788">ვარდისფერი</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{დაიხუროს 1 არააქტიური ერთეული?}other{დაიხუროს <ph name="TAB_COUNT_MANY" /> არააქტიური ერთეული?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb index cf5bd860..898e001a 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{<ph name="NUM_MINS_ONE" /> минут бұрын жасалды.}other{<ph name="NUM_MINS_MANY" /> минут бұрын жасалды.}}</translation> <translation id="1499635324672558517">Барлық инкогнито қойындысы жабылсын ба?</translation> <translation id="1501480321619201731">Топты жою</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{Әрекетсіз <ph name="TABS_COUNT_ONE" /> элемент}other{Әрекетсіз <ph name="TABS_COUNT_MANY" /> элемент}}</translation> <translation id="1555130319947370107">Көк</translation> <translation id="161042844686301425">Көгілдір</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" /> қойынды топтастырылды.</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> жаңа қойынды}other{<ph name="MANY_ADDED" /> жаңа қойынды}}</translation> <translation id="3613492231657284463">"Әрекетсіз қойындылар" диалогтік терезесін жасыру</translation> <translation id="3619255692378312441">Кіру рұқсатын басқару</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{Элементті жабу}other{Элементтерді жабу}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">Алғы көрінісі бар нобай.</translation> <translation id="3810973564298564668">Басқару</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">Күлгін</translation> <translation id="427987768447457592">Жаңа қойындылар тобы</translation> <translation id="4371591986692297148">Өшірілген</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{Элементті қалпына келтіру}other{Элементтерді қалпына келтіру}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{<ph name="NUM_DAYS_ONE" /> күн бұрын жаңартылды.}other{<ph name="NUM_DAYS_MANY" /> күн бұрын жаңартылды.}}</translation> <translation id="4686942373615810936">Жаңа ғана жасалды.</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{1 күннен кейін жабу}other{<ph name="DAY_COUNT_MANY" /> күннен кейін жабу}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{<ph name="TABS_COUNT_ONE" /> қойындысы бар <ph name="COLOR_NAME" /> түсті қойындылар тобын жаю.}other{<ph name="TABS_COUNT_MANY" /> қойындысы бар <ph name="COLOR_NAME" /> түсті қойындылар тобын жаю.}}</translation> <translation id="945522503751344254">Пікір жіберу</translation> <translation id="992256792861109788">Қызғылт</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{Әрекетсіз 1 элементті жабу қажет пе?}other{Әрекетсіз <ph name="TAB_COUNT_MANY" /> элементті жабу қажет пе?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb index 584cabe..114c2600 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
@@ -112,6 +112,7 @@ <translation id="5556417849629758491">មើលព័ត៌មានអំពីហាង ជម្រើសមាននៅជិតផ្នែកខាងលើអេក្រង់</translation> <translation id="5627941783489838464">មិនមានការធ្វើបច្ចុប្បន្នភាពផ្ទាំងទេ</translation> <translation id="5656738671621697952">{TABS_COUNT,plural, =1{តំណ <ph name="TABS_COUNT_ONE" /> ពី Chrome}other{តំណ <ph name="TABS_COUNT_MANY" /> ពី Chrome}}</translation> +<translation id="5746204836956568669">ដាក់ <ph name="NUMBER_OF_TABS" /> ផ្ទាំងជាក្រុម ដើម្បីធ្វើការបានកាន់តែរហ័សឬទេ?</translation> <translation id="58326064309361797">អូសផ្ទាំងនានា ដើម្បីដាក់ផ្ទាំងទាំងនោះជាក្រុម</translation> <translation id="5901630391730855834">លឿង</translation> <translation id="5972844218283131174">ដកការជ្រើសរើសទាំងអស់</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb index b581e7d..e6d727f 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{Sukurta prieš <ph name="NUM_MINS_ONE" /> minutę}one{Sukurta prieš <ph name="NUM_MINS_MANY" /> minutę}few{Sukurta prieš <ph name="NUM_MINS_MANY" /> minutes}many{Sukurta prieš <ph name="NUM_MINS_MANY" /> minutės}other{Sukurta prieš <ph name="NUM_MINS_MANY" /> minučių}}</translation> <translation id="1499635324672558517">Uždaryti visus inkognito skirtukus?</translation> <translation id="1501480321619201731">Ištrinti grupę</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> neaktyvus elementas}one{<ph name="TABS_COUNT_MANY" /> neaktyvus elementas}few{<ph name="TABS_COUNT_MANY" /> neaktyvūs elementai}many{<ph name="TABS_COUNT_MANY" /> neaktyvaus elemento}other{<ph name="TABS_COUNT_MANY" /> neaktyvių elementų}}</translation> <translation id="1555130319947370107">Mėlyna</translation> <translation id="161042844686301425">Žydra</translation> <translation id="1645759014353344461">Sugrupuota tiek skirtukų: <ph name="TABS_COUNT_MANY" /></translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> naujas skirtukas}one{<ph name="MANY_ADDED" /> naujas skirtukas}few{<ph name="MANY_ADDED" /> nauji skirtukai}many{<ph name="MANY_ADDED" /> naujo skirtuko}other{<ph name="MANY_ADDED" /> naujų skirtukų}}</translation> <translation id="3613492231657284463">Slėpti neaktyvių skirtukų dialogo langą</translation> <translation id="3619255692378312441">Prieigos tvarkymas</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{Uždaryti elementą}one{Uždaryti elementus}few{Uždaryti elementus}many{Uždaryti elementus}other{Uždaryti elementus}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" /> iš <ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">Bendrinimo lapo peržiūros miniatiūra.</translation> <translation id="3810973564298564668">Tvarkyti</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">Violetinė</translation> <translation id="427987768447457592">Nauja skirtukų grupė</translation> <translation id="4371591986692297148">Neaktyvus</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{Atkurti elementą}one{Atkurti elementus}few{Atkurti elementus}many{Atkurti elementus}other{Atkurti elementus}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{Atnaujinta prieš <ph name="NUM_DAYS_ONE" /> dieną}one{Atnaujinta prieš <ph name="NUM_DAYS_MANY" /> dieną}few{Atnaujinta prieš <ph name="NUM_DAYS_MANY" /> dienas}many{Atnaujinta prieš <ph name="NUM_DAYS_MANY" /> dienos}other{Atnaujinta prieš <ph name="NUM_DAYS_MANY" /> dienų}}</translation> <translation id="4686942373615810936">Ką tik sukurta</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{Uždaryti po 1 dienos}one{Uždaryti po <ph name="DAY_COUNT_MANY" /> dienos}few{Uždaryti po <ph name="DAY_COUNT_MANY" /> dienų}many{Uždaryti po <ph name="DAY_COUNT_MANY" /> dienos}other{Uždaryti po <ph name="DAY_COUNT_MANY" /> dienų}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{Išskleisti skirtukų grupę su <ph name="TABS_COUNT_ONE" /> skirtuku, kurio spalva <ph name="COLOR_NAME" />.}one{Išskleisti skirtukų grupę su <ph name="TABS_COUNT_MANY" /> skirtuku, kurio spalva <ph name="COLOR_NAME" />.}few{Išskleisti skirtukų grupę su <ph name="TABS_COUNT_MANY" /> skirtukais, kurių spalva <ph name="COLOR_NAME" />.}many{Išskleisti skirtukų grupę su <ph name="TABS_COUNT_MANY" /> skirtuko, kurių spalva <ph name="COLOR_NAME" />.}other{Išskleisti skirtukų grupę su <ph name="TABS_COUNT_MANY" /> skirtukų, kurių spalva <ph name="COLOR_NAME" />.}}</translation> <translation id="945522503751344254">Siųsti atsiliepimą</translation> <translation id="992256792861109788">Rožinė</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{Uždaryti vieną neaktyvų elementą?}one{Uždaryti <ph name="TAB_COUNT_MANY" /> neaktyvų elementą?}few{Uždaryti <ph name="TAB_COUNT_MANY" /> neaktyvius elementus?}many{Uždaryti <ph name="TAB_COUNT_MANY" /> neaktyvaus elemento?}other{Uždaryti <ph name="TAB_COUNT_MANY" /> neaktyvių elementų?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb index b8f34a2..c8395a0 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{<ph name="NUM_MINS_ONE" /> मिनेटअघि बनाइएको}other{<ph name="NUM_MINS_MANY" /> मिनेटअघि बनाइएको}}</translation> <translation id="1499635324672558517">सबै इन्कोग्निटो ट्याबहरू बन्द गर्ने हो?</translation> <translation id="1501480321619201731">समूह मेट्नुहोस्</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> निष्क्रिय आइटम}other{<ph name="TABS_COUNT_MANY" /> वटा निष्क्रिय आइटम}}</translation> <translation id="1555130319947370107">निलो</translation> <translation id="161042844686301425">सायन</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" /> वटा ट्याब समूहबद्ध गरिएका छन्</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> नयाँ ट्याब}other{<ph name="MANY_ADDED" /> वटा नयाँ ट्याब}}</translation> <translation id="3613492231657284463">निष्क्रिय ट्याबहरू देखाइने डायलग लुकाउनुहोस्</translation> <translation id="3619255692378312441">एक्सेस व्यवस्थापन गर्नुहोस्</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{आइटम बन्द गर्नुहोस्}other{आइटमहरू बन्द गर्नुहोस्}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">सेयर सिटको प्रिभ्यूको थम्बनेल।</translation> <translation id="3810973564298564668">व्यवस्थित गर्नुहोस्</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">बैजनी</translation> <translation id="427987768447457592">नयाँ ट्याब समूह</translation> <translation id="4371591986692297148">निष्क्रिय</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{आइटम रिस्टोर गर्नुहोस्}other{आइटमहरू रिस्टोर गर्नुहोस्}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{<ph name="NUM_DAYS_ONE" /> दिनअघि अपडेट गरिएको}other{<ph name="NUM_DAYS_MANY" /> दिनअघि अपडेट गरिएको}}</translation> <translation id="4686942373615810936">भर्खरै बनाइएको</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{१ दिनपछि बन्द गर्नुहोस्}other{<ph name="DAY_COUNT_MANY" /> दिनपछि बन्द गर्नुहोस्}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{<ph name="TABS_COUNT_ONE" /> ट्याब भएको <ph name="COLOR_NAME" /> रङको ट्याब समूह एक्स्पान्ड गर्नुहोस्।}other{<ph name="TABS_COUNT_MANY" /> वटा ट्याब भएको <ph name="COLOR_NAME" /> रङको ट्याब समूह एक्स्पान्ड गर्नुहोस्।}}</translation> <translation id="945522503751344254">पृष्ठपोषण पठाउनुहोस्</translation> <translation id="992256792861109788">गुलाबी</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{एउटा निष्क्रिय आइटम बन्द गर्ने हो?}other{<ph name="TAB_COUNT_MANY" /> वटा निष्क्रिय आइटम बन्द गर्ने हो?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb index fa434f26..e5b3cac 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{<ph name="NUM_MINS_ONE" /> minuut geleden gemaakt}other{<ph name="NUM_MINS_MANY" /> minuten geleden gemaakt}}</translation> <translation id="1499635324672558517">Alle incognitotabbladen sluiten?</translation> <translation id="1501480321619201731">Groep verwijderen</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> inactief item}other{<ph name="TABS_COUNT_MANY" /> inactieve items}}</translation> <translation id="1555130319947370107">Blauw</translation> <translation id="161042844686301425">Cyaan</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" /> tabbladen gegroepeerd</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> nieuw tabblad}other{<ph name="MANY_ADDED" /> nieuwe tabbladen}}</translation> <translation id="3613492231657284463">Dialoogvenster Inactieve tabbladen verbergen</translation> <translation id="3619255692378312441">Toegang beheren</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{Item sluiten}other{Items sluiten}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">Thumbnail voor voorbeeld van blad delen.</translation> <translation id="3810973564298564668">Beheren</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">Paars</translation> <translation id="427987768447457592">Nieuwe tabbladgroep</translation> <translation id="4371591986692297148">Inactief</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{Item herstellen}other{Items herstellen}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{<ph name="NUM_DAYS_ONE" /> dag geleden geüpdatet}other{<ph name="NUM_DAYS_MANY" /> dagen geleden geüpdatet}}</translation> <translation id="4686942373615810936">Zojuist gemaakt</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{Sluiten na 1 dag}other{Sluiten na <ph name="DAY_COUNT_MANY" /> dagen}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{Tabbladgroep met <ph name="TABS_COUNT_ONE" /> tabblad uitvouwen, kleur <ph name="COLOR_NAME" />.}other{Tabbladgroep met <ph name="TABS_COUNT_MANY" /> tabbladen uitvouwen, kleur <ph name="COLOR_NAME" />.}}</translation> <translation id="945522503751344254">Feedback sturen</translation> <translation id="992256792861109788">Roze</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{1 inactief item sluiten?}other{<ph name="TAB_COUNT_MANY" /> inactieve items sluiten?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb index 46f13c5a..f700ca1 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb
@@ -112,6 +112,7 @@ <translation id="5556417849629758491">Veja informações da loja, opção disponível junto à parte superior do ecrã</translation> <translation id="5627941783489838464">Nenhuma atualização de separadores</translation> <translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link do Chrome}other{<ph name="TABS_COUNT_MANY" /> links do Chrome}}</translation> +<translation id="5746204836956568669">Agrupar <ph name="NUMBER_OF_TABS" /> separadores para trabalhar mais rapidamente?</translation> <translation id="58326064309361797">Arraste os separadores para os agrupar.</translation> <translation id="5901630391730855834">Amarelo</translation> <translation id="5972844218283131174">Desmarcar tudo</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb index b2927a4f..1ded378 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{Создано <ph name="NUM_MINS_ONE" /> минуту назад}one{Создано <ph name="NUM_MINS_MANY" /> минуту назад}few{Создано <ph name="NUM_MINS_MANY" /> минуты назад}many{Создано <ph name="NUM_MINS_MANY" /> минут назад}other{Создано <ph name="NUM_MINS_MANY" /> минуты назад}}</translation> <translation id="1499635324672558517">Закрыть все вкладки инкогнито?</translation> <translation id="1501480321619201731">Удалить группу</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> неактивный объект}one{<ph name="TABS_COUNT_MANY" /> неактивный объект}few{<ph name="TABS_COUNT_MANY" /> неактивных объекта}many{<ph name="TABS_COUNT_MANY" /> неактивных объектов}other{<ph name="TABS_COUNT_MANY" /> неактивных объекта}}</translation> <translation id="1555130319947370107">Синий</translation> <translation id="161042844686301425">Голубой</translation> <translation id="1645759014353344461">Вкладки (<ph name="TABS_COUNT_MANY" />) сгруппированы.</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> новая вкладка}one{<ph name="MANY_ADDED" /> новая вкладка}few{<ph name="MANY_ADDED" /> новые вкладки}many{<ph name="MANY_ADDED" /> новых вкладок}other{<ph name="MANY_ADDED" /> новой вкладки}}</translation> <translation id="3613492231657284463">Скрыть диалоговое окно неактивных вкладок</translation> <translation id="3619255692378312441">Настроить доступ</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{Закрыть объект}one{Закрыть объекты}few{Закрыть объекты}many{Закрыть объекты}other{Закрыть объекты}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">Значок для отпр. предпросм. листа</translation> <translation id="3810973564298564668">Управление</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">Фиолетовый</translation> <translation id="427987768447457592">Новая группа вкладок</translation> <translation id="4371591986692297148">неактивно</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{Восстановить объект}one{Восстановить объекты}few{Восстановить объекты}many{Восстановить объекты}other{Восстановить объекты}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{Группа обновлена <ph name="NUM_DAYS_ONE" /> день назад}one{Группа обновлена <ph name="NUM_DAYS_MANY" /> день назад}few{Группа обновлена <ph name="NUM_DAYS_MANY" /> дня назад}many{Группа обновлена <ph name="NUM_DAYS_MANY" /> дней назад}other{Группа обновлена <ph name="NUM_DAYS_MANY" /> дня назад}}</translation> <translation id="4686942373615810936">Создано только что</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{Закрывать через 1 день}one{Закрывать через <ph name="DAY_COUNT_MANY" /> день}few{Закрывать через <ph name="DAY_COUNT_MANY" /> дня}many{Закрывать через <ph name="DAY_COUNT_MANY" /> дней}other{Закрывать через <ph name="DAY_COUNT_MANY" /> дня}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{Развернуть группу вкладок, которой присвоен <ph name="COLOR_NAME" /> цвет. В ней <ph name="TABS_COUNT_ONE" /> вкладка.}one{Развернуть группу вкладок, которой присвоен <ph name="COLOR_NAME" /> цвет. В ней <ph name="TABS_COUNT_MANY" /> вкладка.}few{Развернуть группу вкладок, которой присвоен <ph name="COLOR_NAME" /> цвет. В ней <ph name="TABS_COUNT_MANY" /> вкладки.}many{Развернуть группу вкладок, которой присвоен <ph name="COLOR_NAME" /> цвет. В ней <ph name="TABS_COUNT_MANY" /> вкладок.}other{Развернуть группу вкладок, которой присвоен <ph name="COLOR_NAME" /> цвет. В ней <ph name="TABS_COUNT_MANY" /> вкладки.}}</translation> <translation id="945522503751344254">Отправить отзыв</translation> <translation id="992256792861109788">Розовый</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{Закрыть 1 неактивный объект?}one{Закрыть <ph name="TAB_COUNT_MANY" /> неактивный объект?}few{Закрыть <ph name="TAB_COUNT_MANY" /> неактивных объекта?}many{Закрыть <ph name="TAB_COUNT_MANY" /> неактивных объектов?}other{Закрыть <ph name="TAB_COUNT_MANY" /> неактивных объекта?}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb index 2b439787..cebbcd5 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{สร้างเมื่อ <ph name="NUM_MINS_ONE" /> นาทีที่ผ่านมา}other{สร้างเมื่อ <ph name="NUM_MINS_MANY" /> นาทีที่ผ่านมา}}</translation> <translation id="1499635324672558517">ปิดแท็บที่ไม่ระบุตัวตนทั้งหมดใช่ไหม</translation> <translation id="1501480321619201731">ลบกลุ่ม</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{รายการที่ไม่ได้ใช้งาน <ph name="TABS_COUNT_ONE" /> รายการ}other{รายการที่ไม่ได้ใช้งาน <ph name="TABS_COUNT_MANY" /> รายการ}}</translation> <translation id="1555130319947370107">สีน้ำเงิน</translation> <translation id="161042844686301425">สีฟ้า</translation> <translation id="1645759014353344461">จัดกลุ่มไว้ <ph name="TABS_COUNT_MANY" /> แท็บ</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{แท็บใหม่ <ph name="ONE_ADDED" /> แท็บ}other{แท็บใหม่ <ph name="MANY_ADDED" /> แท็บ}}</translation> <translation id="3613492231657284463">กล่องโต้ตอบ "ซ่อนแท็บที่ไม่ได้ใช้งาน"</translation> <translation id="3619255692378312441">จัดการการเข้าถึง</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{ปิดรายการ}other{ปิดรายการ}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">ภาพแบบย่อตัวอย่างชีตที่แชร์</translation> <translation id="3810973564298564668">จัดการ</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">ม่วง</translation> <translation id="427987768447457592">กลุ่มแท็บใหม่</translation> <translation id="4371591986692297148">ไม่ได้ใช้งาน</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{กู้คืนรายการ}other{กู้คืนรายการ}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{อัปเดตเมื่อ <ph name="NUM_DAYS_ONE" /> วันที่ผ่านมา}other{อัปเดตเมื่อ <ph name="NUM_DAYS_MANY" /> วันที่ผ่านมา}}</translation> <translation id="4686942373615810936">สร้างเมื่อสักครู่</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{ปิดหลังจาก 1 วัน}other{ปิดหลังจาก <ph name="DAY_COUNT_MANY" /> วัน}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{ขยายกลุ่มแท็บที่มี <ph name="TABS_COUNT_ONE" /> แท็บ สี<ph name="COLOR_NAME" />}other{ขยายกลุ่มแท็บที่มี <ph name="TABS_COUNT_MANY" /> แท็บ สี<ph name="COLOR_NAME" />}}</translation> <translation id="945522503751344254">ส่งความคิดเห็น</translation> <translation id="992256792861109788">สีชมพู</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{ปิด 1 รายการที่ไม่ได้ใช้งานใช่ไหม}other{ปิด <ph name="TAB_COUNT_MANY" /> รายการที่ไม่ได้ใช้งานใช่ไหม}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb index 23c5722..ceca915 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb
@@ -17,6 +17,7 @@ <translation id="149054111719651807">{NUM_MINS,plural, =1{<ph name="NUM_MINS_ONE" /> منٹ پہلے تخلیق کیا گیا}other{<ph name="NUM_MINS_MANY" /> منٹ پہلے تخلیق کیا گیا}}</translation> <translation id="1499635324672558517">سبھی پوشیدگی ٹیبز بند کریں؟</translation> <translation id="1501480321619201731">گروپ حذف کریں</translation> +<translation id="1553638665176794706">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> غیر فعال آئٹم}other{<ph name="TABS_COUNT_MANY" /> غیر فعال آئٹمز}}</translation> <translation id="1555130319947370107">نیلا</translation> <translation id="161042844686301425">سیان</translation> <translation id="1645759014353344461"><ph name="TABS_COUNT_MANY" /> ٹیبز کا گروپ بن گیا</translation> @@ -68,6 +69,7 @@ <translation id="358453129938375749">{NUMBER_OF_TABS_ADDED,plural, =1{<ph name="ONE_ADDED" /> نیا ٹیب}other{<ph name="MANY_ADDED" /> نئے ٹیبز}}</translation> <translation id="3613492231657284463">غیر فعال ٹیبز کا ڈائیلاگ چھپائیں</translation> <translation id="3619255692378312441">رسائی کا نظم کریں</translation> +<translation id="3649471731638882002">{TAB_COUNT,plural, =1{آئٹم بند کریں}other{آئٹمز بند کریں}}</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="374923079891132274">شیٹ پیش منظر شیئر کریں کیلئے تھمب نیل</translation> <translation id="3810973564298564668">نظم کریں</translation> @@ -80,6 +82,7 @@ <translation id="4159784952369912983">جامنی</translation> <translation id="427987768447457592">نیا ٹیب گروپ</translation> <translation id="4371591986692297148">غیر فعال ہے</translation> +<translation id="4429658455677831355">{TAB_COUNT,plural, =1{آئٹم بحال کریں}other{آئٹمز کو بحال کریں؟}}</translation> <translation id="4453940245650019914">{NUM_DAYS,plural, =1{<ph name="NUM_DAYS_ONE" /> دن پہلے اپ ڈیٹ کیا گیا}other{<ph name="NUM_DAYS_MANY" /> دن پہلے اپ ڈیٹ کیا گیا}}</translation> <translation id="4686942373615810936">ابھی ابھی تخلیق کیا گیا</translation> <translation id="47070857600201406">{DAY_COUNT,plural, =1{1 دن کے بعد بند کریں}other{<ph name="DAY_COUNT_MANY" /> دن کے بعد بند کریں}}</translation> @@ -206,4 +209,5 @@ <translation id="927441551066996669">{NUMBER_OF_TABS,plural, =1{<ph name="TABS_COUNT_ONE" /> ٹیب، <ph name="COLOR_NAME" /> رنگ کے ساتھ ٹیب گروپ کو پھیلائیں۔}other{<ph name="TABS_COUNT_MANY" /> ٹیبز، <ph name="COLOR_NAME" /> رنگ کے ساتھ ٹیب گروپ کو پھیلائیں۔}}</translation> <translation id="945522503751344254">تاثرات بھیجیں</translation> <translation id="992256792861109788">گلابی</translation> +<translation id="994514002078791059">{TAB_COUNT,plural, =1{1 غیر فعال آئٹم کو بند کریں؟}other{<ph name="TAB_COUNT_MANY" /> غیر فعال آئٹمز کو بند کریں؟}}</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index cdd2e77c..966670a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -3035,6 +3035,7 @@ TabLaunchType.FROM_CHROME_UI), getModalDialogManager(), getSnackbarManager(), + mRootUiCoordinator.getExtensionService(), mRootUiCoordinator.getIncognitoReauthControllerSupplier(), mRootUiCoordinator.getReadAloudControllerSupplier()); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java index 8120dca..8711dd80 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
@@ -234,7 +234,7 @@ private final Set<Runnable> mDidSwapFrameCallbacks = new HashSet<>(); private final Set<Runnable> mDidSwapBuffersCallbacks = new HashSet<>(); - /** Used to remove the temporary tab strip on startup, once ready (or timed out). */ + /** Used to remove the temporary tab strip on startup, once the composited one is ready. */ private Runnable mSetBackgroundRunnable; private boolean mHasDrawnOnce; @@ -557,17 +557,21 @@ R.id.control_container, mControlContainer.getToolbarResourceAdapter()); } - mSetBackgroundRunnable = - () -> { - // Wait until the second frame to turn off the placeholder background for the - // CompositorView and the tab strip, to ensure the compositor frame has been - // drawn. - final ViewGroup controlContainerVG = (ViewGroup) mControlContainer; - mCompositorView.setBackgroundResource(0); - if (controlContainerVG != null) { - mControlContainer.setCompositorBackgroundInitialized(); - } - }; + // The set background runnable is only necessary when the tab strip will be visible. + if (mActivity != null && mLayoutManager.getStripLayoutHelperManager() != null) { + removeTempBackground(); + return; + } + + mSetBackgroundRunnable = this::removeTempBackground; + // Request a render. The temporary background will be removed once we are confident that the + // composited tab strip is ready to be drawn. + requestRender(); + } + + private void removeTempBackground() { + mCompositorView.setBackgroundResource(0); + if (mControlContainer != null) mControlContainer.setCompositorBackgroundInitialized(); } /** @@ -1251,6 +1255,7 @@ TraceEvent.instant("didSwapFrame"); mHasDrawnOnce = true; + if (mSetBackgroundRunnable != null) requestRender(); mDidSwapBuffersCallbacks.addAll(mDidSwapFrameCallbacks); mDidSwapFrameCallbacks.clear(); @@ -1259,9 +1264,16 @@ @Override public void didSwapBuffers(boolean swappedCurrentSize, int framesUntilHideBackground) { - if (mSetBackgroundRunnable != null && mHasDrawnOnce && framesUntilHideBackground == 0) { - // Remove temporary background if tab state is ready. - runSetBackgroundRunnable(); + // Wait until the second frame to turn off the placeholder background for the CompositorView + // and the tab strip, to ensure the compositor frame has been drawn. + if (mSetBackgroundRunnable != null) { + if (mHasDrawnOnce && framesUntilHideBackground == 0) { + // Remove temporary background if tab state is ready. + runSetBackgroundRunnable(); + } else { + // If tab state is not yet ready, request another render. + requestRender(); + } } for (Runnable runnable : mDidSwapBuffersCallbacks) { @@ -1928,7 +1940,8 @@ !mHasDrawnOnce || !mOnCompositorLayoutCallbacks.isEmpty() || !mDidSwapFrameCallbacks.isEmpty() - || !mDidSwapBuffersCallbacks.isEmpty(); + || !mDidSwapBuffersCallbacks.isEmpty() + || mSetBackgroundRunnable != null; mCompositorView.setRenderHostNeedsDidSwapBuffersCallback(needsSwapCallback); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java index 7ee3d26a..d02de50 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java
@@ -57,7 +57,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate; import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler; import org.chromium.chrome.browser.ui.appmenu.AppMenuItemProperties; -import org.chromium.chrome.browser.ui.extensions.ExtensionsBuildflags; +import org.chromium.chrome.browser.ui.extensions.ExtensionService; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.components.browser_ui.accessibility.PageZoomCoordinator; import org.chromium.components.dom_distiller.core.DomDistillerFeatures; @@ -98,6 +98,7 @@ WebFeedSnackbarController.FeedLauncher mFeedLauncher; ModalDialogManager mModalDialogManager; SnackbarManager mSnackbarManager; + @Nullable ExtensionService mExtensionService; private boolean mUpdateMenuItemVisible; @@ -124,6 +125,7 @@ WebFeedSnackbarController.FeedLauncher feedLauncher, ModalDialogManager modalDialogManager, SnackbarManager snackbarManager, + @Nullable ExtensionService extensionService, @NonNull OneshotSupplier<IncognitoReauthController> incognitoReauthControllerOneshotSupplier, @@ -142,6 +144,7 @@ mFeedLauncher = feedLauncher; mModalDialogManager = modalDialogManager; mSnackbarManager = snackbarManager; + mExtensionService = extensionService; incognitoReauthControllerOneshotSupplier.onAvailable( mIncognitoReauthCallbackController.makeCancelable( @@ -590,9 +593,8 @@ } private boolean shouldShowExtensionsItem() { - return ExtensionsBuildflags.ENABLE_DESKTOP_ANDROID_EXTENSIONS - && !ChromeFeatureList.isEnabled( - ChromeFeatureList.BLOCK_INSTALLING_EXTENSIONS_ON_DESKTOP_ANDROID); + // TODO(crbug.com/422307625): Remove this check once extensions are ready for dogfooding. + return mExtensionService != null && mExtensionService.areExtensionsEnabled(); } private MVCListAdapter.ListItem buildExtensionsItem() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java index f5746ea..d713d12 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -2003,6 +2003,14 @@ } /** + * @return The {@link ExtensionService} that handles extensions. null if extensions are not + * supported on this build. + */ + public @Nullable ExtensionService getExtensionService() { + return mExtensionService; + } + + /** * Initializes a glue logic that suppresses Contextual Search and hides the Page Zoom slider * while a Bottom Sheet feature is in action. */
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegateUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegateUnitTest.java index 55cc1677..73b226a 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegateUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegateUnitTest.java
@@ -105,6 +105,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate; import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler; import org.chromium.chrome.browser.ui.appmenu.AppMenuItemProperties; +import org.chromium.chrome.browser.ui.extensions.ExtensionService; import org.chromium.chrome.browser.ui.extensions.ExtensionsBuildflags; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.NativePage; @@ -193,6 +194,7 @@ @Mock private WebFeedSnackbarController.FeedLauncher mFeedLauncher; @Mock private ModalDialogManager mDialogManager; @Mock private SnackbarManager mSnackbarManager; + @Mock private ExtensionService mExtensionService; @Mock private OfflinePageUtils.Internal mOfflinePageUtils; @Mock private SigninManager mSigninManager; @Mock private IdentityManager mIdentityManager; @@ -284,6 +286,9 @@ when(mSyncService.isSyncFeatureEnabled()).thenReturn(true); SyncServiceFactory.setInstanceForTesting(mSyncService); + when(mExtensionService.areExtensionsEnabled()) + .thenReturn(ExtensionsBuildflags.ENABLE_DESKTOP_ANDROID_EXTENSIONS); + IncognitoUtilsJni.setInstanceForTesting(mIncognitoUtilsJniMock); TranslateBridgeJni.setInstanceForTesting(mTranslateBridgeJniMock); @@ -315,6 +320,7 @@ mFeedLauncher, mDialogManager, mSnackbarManager, + mExtensionService, mIncognitoReauthControllerSupplier, mReadAloudControllerSupplier); mExecutorRule.runAllBackgroundAndUi();
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb index 07cfa45..764c76dd 100644 --- a/chrome/app/resources/chromium_strings_bn.xtb +++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -247,6 +247,7 @@ <translation id="4281844954008187215">পরিষেবার শর্তাদি</translation> <translation id="4285930937574705105">অনির্দিষ্ট ত্রুটির কারণে ইনস্টলেশন ব্যর্থ৷ বর্তমানে Chromium চালু থাকলেও, দয়া করে এটি বন্ধ করুন এবং আবার চেষ্টা করুন৷</translation> <translation id="4304713468139749426">পাসওয়ার্ড ম্যানেজার</translation> +<translation id="4334241893986177674">এই স্ক্রিনশট সার্চ করুন</translation> <translation id="4334294535648607276">ডাউনলোড সম্পূর্ণ।</translation> <translation id="439358628917130594"><ph name="MANAGER" />-এ এই ডিভাইস ব্যবহার করার আগে আপনাকে নিম্নলিখিত পরিষেবার শর্তাবলী পড়ে নিতে হবে এবং তাতে সম্মতি দিতে হবে। এইসব শর্ত ChromiumOS-এর শর্তাবলীকে সম্প্রসারণ, পরিবর্তন বা সীমাবদ্ধ করে না।</translation> <translation id="4407044323746248786">তা স্বত্তেও Chromium ছেড়ে যাবেন?</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb index 95bec622..4a743fb2 100644 --- a/chrome/app/resources/chromium_strings_el.xtb +++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -247,6 +247,7 @@ <translation id="4281844954008187215">Όροι Παροχής Υπηρεσιών</translation> <translation id="4285930937574705105">Η εγκατάσταση απέτυχε λόγω απροσδιόριστου σφάλματος. Εάν το Chromium εκτελείται αυτήν τη στιγμή, κλείστε το και δοκιμάστε ξανά.</translation> <translation id="4304713468139749426">Διαχείριση κωδικών πρόσβασης</translation> +<translation id="4334241893986177674">Αναζήτηση αυτού του στιγμιότυπου οθόνης</translation> <translation id="4334294535648607276">Η λήψη ολοκληρώθηκε.</translation> <translation id="439358628917130594">Το <ph name="MANAGER" /> απαιτεί να διαβάσετε και να αποδεχτείτε τους παρακάτω Όρους Παροχής Υπηρεσιών πριν από τη χρήση αυτής της συσκευής. Οι συγκεκριμένοι όροι δεν επεκτείνουν, τροποποιούν ή περιορίζουν τους Όρους του Chromium OS.</translation> <translation id="4407044323746248786">Να γίνει έξοδος από το Chromium ούτως ή άλλως;</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb index 7dd41e87..f7b7df7 100644 --- a/chrome/app/resources/chromium_strings_es.xtb +++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -249,6 +249,7 @@ <translation id="4281844954008187215">Términos del Servicio</translation> <translation id="4285930937574705105">La instalación ha fallado debido a un error no especificado. Si Chromium se está ejecutando, ciérralo y vuelve a intentarlo.</translation> <translation id="4304713468139749426">Gestor de contraseñas</translation> +<translation id="4334241893986177674">Buscar en esta captura de pantalla</translation> <translation id="4334294535648607276">Descarga completa.</translation> <translation id="439358628917130594"><ph name="MANAGER" /> requiere que leas y aceptes los siguientes Términos del Servicio antes de utilizar este dispositivo. Estos términos no amplían, modifican ni limitan los Términos de ChromiumOS.</translation> <translation id="4407044323746248786">¿Quieres salir de Chromium de todas formas?</translation>
diff --git a/chrome/app/resources/chromium_strings_gu.xtb b/chrome/app/resources/chromium_strings_gu.xtb index c0058da..f4c79ba 100644 --- a/chrome/app/resources/chromium_strings_gu.xtb +++ b/chrome/app/resources/chromium_strings_gu.xtb
@@ -249,6 +249,7 @@ <translation id="4281844954008187215">સેવાની શરતો</translation> <translation id="4285930937574705105">અમઉલ્લેખિત ભૂલને કારણે ઇન્સ્ટોલેશન નિષ્ફળ થયું. જો Chromium હાલમાં ચાલી રહ્યું હોય, તો તેને બંધ કરો અને ફરી પ્રયાસ કરો.</translation> <translation id="4304713468139749426">પાસવર્ડ મેનેજર</translation> +<translation id="4334241893986177674">આ સ્ક્રીનશૉટ શોધો</translation> <translation id="4334294535648607276">ડાઉનલોડ પૂર્ણ.</translation> <translation id="439358628917130594"><ph name="MANAGER" /> માટે જરૂરી છે કે તમે આ ડિવાઇસનો ઉપયોગ કરતા પહેલાં નીચે આપેલી સેવાની શરતો વાંચો અને તેને સ્વીકારો. આ શરતો ChromiumOSની શરતોમાં વધારો કરતી નથી, તેમાં ફેરફાર કરતી નથી અથવા તેને મર્યાદિત કરતી નથી.</translation> <translation id="4407044323746248786">છતાં પણ Chromiumમાંથી બહાર નિકળવું છે?</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb index b5da9428..75e46052 100644 --- a/chrome/app/resources/chromium_strings_ja.xtb +++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -246,6 +246,7 @@ <translation id="4281844954008187215">利用規約</translation> <translation id="4285930937574705105">原因不明のエラーによりインストールが失敗しました。実行中の Chromium を終了してからもう一度お試しください。</translation> <translation id="4304713468139749426">パスワード マネージャー</translation> +<translation id="4334241893986177674">このスクリーンショットを検索</translation> <translation id="4334294535648607276">ダウンロードが完了しました。</translation> <translation id="439358628917130594"><ph name="MANAGER" /> では、このデバイスを使用する前に下記の利用規約を確認しこれに同意していただく必要があります。これらの規約は Chromium OS 利用規約を拡張、変更、制限するものではありません。</translation> <translation id="4407044323746248786">今すぐ Chromium を終了しますか?</translation>
diff --git a/chrome/app/resources/chromium_strings_ka.xtb b/chrome/app/resources/chromium_strings_ka.xtb index b407e9c..0218260 100644 --- a/chrome/app/resources/chromium_strings_ka.xtb +++ b/chrome/app/resources/chromium_strings_ka.xtb
@@ -249,6 +249,7 @@ <translation id="4281844954008187215">მომსახურების პირობები</translation> <translation id="4285930937574705105">ინსტალაცია ვერ განხორციელდა განუსაზღვრელი შეცდომის გამო. თუ Chromium ამჟამად გაშვებულია, დახურეთ იგი და ხელახლა სცადეთ.</translation> <translation id="4304713468139749426">პაროლების მმართველი</translation> +<translation id="4334241893986177674">ეკრანის ამ ანაბეჭდის მოძიება</translation> <translation id="4334294535648607276">ჩამოტვირთვა დასრულდა.</translation> <translation id="439358628917130594"><ph name="MANAGER" /> მოითხოვს, რომ ამ მოწყობილობის გამოყენებამდე წაიკითხოთ ქვემოთ მოცემული მომსახურების პირობები და დაეთანხმოთ მათ. აღნიშნული პირობები არ არის ChromiumOS-ის წესების დამატება, ასევე, არ ცვლის და არც ზღუდავს მათ.</translation> <translation id="4407044323746248786">მაინც გსურთ Chromium-იდან გასვლა?</translation>
diff --git a/chrome/app/resources/chromium_strings_kk.xtb b/chrome/app/resources/chromium_strings_kk.xtb index 8815cfe5..7847bf1 100644 --- a/chrome/app/resources/chromium_strings_kk.xtb +++ b/chrome/app/resources/chromium_strings_kk.xtb
@@ -248,6 +248,7 @@ <translation id="4281844954008187215">Қызмет көрсету шарттары</translation> <translation id="4285930937574705105">Орнату анықталмаған қате себебінен сәтсіз аяқталды. Ағымда Chromium жұмыс істеп тұрса, оны жауып, әрекетті қайталаңыз.</translation> <translation id="4304713468139749426">Құпия сөздер реттегіші</translation> +<translation id="4334241893986177674">Осы скриншотты іздеу</translation> <translation id="4334294535648607276">Жүктеп алынды.</translation> <translation id="439358628917130594">Бұл құрылғыны пайдаланбас бұрын, <ph name="MANAGER" /> домені келесі Қызмет көрсету шарттарын оқып, қабылдауыңызды талап етеді. Бұл шарттар ChromiumOS Шарттарын толықтырмайды, өзгертпейді және шектемейді.</translation> <translation id="4407044323746248786">Chromium браузерінен бәрібір шығасыз ба?</translation>
diff --git a/chrome/app/resources/chromium_strings_lt.xtb b/chrome/app/resources/chromium_strings_lt.xtb index eec302bf..1a98b12 100644 --- a/chrome/app/resources/chromium_strings_lt.xtb +++ b/chrome/app/resources/chromium_strings_lt.xtb
@@ -249,6 +249,7 @@ <translation id="4281844954008187215">Paslaugų teikimo sąlygos</translation> <translation id="4285930937574705105">Diegimas nepavyko dėl nežinomos klaidos. Jei šiuo metu veikia „Chromium“, uždarykite ir pabandykite iš naujo.</translation> <translation id="4304713468139749426">Slaptažodžių tvarkytuvė</translation> +<translation id="4334241893986177674">Ieškoti šioje ekrano kopijoje</translation> <translation id="4334294535648607276">Atsisiuntimas baigtas.</translation> <translation id="439358628917130594"><ph name="MANAGER" /> reikia, kad prieš naudodami šį įrenginį perskaitytumėte toliau pateiktas paslaugų teikimo sąlygas ir su jomis sutiktumėte. Šios sąlygos neišplečia, nepakeičia ir neapriboja „Chromium“ OS sąlygų.</translation> <translation id="4407044323746248786">Vis tiek išeiti iš „Chromium“?</translation>
diff --git a/chrome/app/resources/chromium_strings_ne.xtb b/chrome/app/resources/chromium_strings_ne.xtb index da94a08..8a9e4fee 100644 --- a/chrome/app/resources/chromium_strings_ne.xtb +++ b/chrome/app/resources/chromium_strings_ne.xtb
@@ -247,6 +247,7 @@ <translation id="4281844954008187215">सेवाका सर्तहरू</translation> <translation id="4285930937574705105">अनिश्चित त्रुटिको कारणले गर्दा स्थापना असफल भयो। यदि Chromium हालै चालू छ भने, कृपया त्यसलाई बन्द गर्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation> <translation id="4304713468139749426">पासवर्ड म्यानेजर</translation> +<translation id="4334241893986177674">यो स्क्रिनसट खोज्नुहोस्</translation> <translation id="4334294535648607276">डाउनलोड सम्पन्न भयो</translation> <translation id="439358628917130594"><ph name="MANAGER" /> को नीतिअनुसार तपाईंले यो डिभाइस प्रयोग गर्नुअघि सेवाका निम्न सर्तहरू पढेर स्वीकार गर्नु पर्ने हुन्छ। यी सर्तले ChromiumOS का सर्तहरू विस्तार, परिमार्जन वा सीमित गर्दैनन्।</translation> <translation id="4407044323746248786">जे भए पनि Chromium बाट बाहिरिने हो?</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb index d6bd8eb..dedb426 100644 --- a/chrome/app/resources/chromium_strings_nl.xtb +++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -248,6 +248,7 @@ <translation id="4281844954008187215">Servicevoorwaarden</translation> <translation id="4285930937574705105">De installatie is mislukt wegens een onbekende fout. Als Chromium momenteel actief is, moet je Chromium sluiten en het opnieuw proberen.</translation> <translation id="4304713468139749426">Wachtwoordmanager</translation> +<translation id="4334241893986177674">Zoeken in dit screenshot</translation> <translation id="4334294535648607276">Downloaden voltooid.</translation> <translation id="439358628917130594"><ph name="MANAGER" /> vereist dat je de volgende Servicevoorwaarden leest en accepteert voordat je dit apparaat gebruikt. Deze voorwaarden zijn geen uitbreiding, aanpassing of beperking van de Voorwaarden van Chromium OS.</translation> <translation id="4407044323746248786">Chromium toch sluiten?</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb index 4970ea4..6465350 100644 --- a/chrome/app/resources/chromium_strings_ru.xtb +++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -244,6 +244,7 @@ <translation id="4281844954008187215">Условия использования</translation> <translation id="4285930937574705105">Установка не удалась из-за неизвестной ошибки. Если Chromium продолжает работать, закройте его и повторите попытку.</translation> <translation id="4304713468139749426">Менеджер паролей</translation> +<translation id="4334241893986177674">Поиск по скриншоту</translation> <translation id="4334294535648607276">Скачивание завершено.</translation> <translation id="439358628917130594">Согласно действующим правилам <ph name="MANAGER" />, до начала работы с устройством необходимо ознакомиться с приведенными ниже Условиями использования и принять их. Они не дополняют, не заменяют и не ограничивают Условия использования Chromium OS.</translation> <translation id="4407044323746248786">Закрыть Chromium?</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb index dff7e90..4576364 100644 --- a/chrome/app/resources/chromium_strings_th.xtb +++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -246,6 +246,7 @@ <translation id="4281844954008187215">ข้อกำหนดในการให้บริการ</translation> <translation id="4285930937574705105">การติดตั้งล้มเหลวเนื่องจากมีข้อผิดพลาดที่ไม่ได้ระบุ หาก Chromium ทำงานอยู่ในขณะนี้ โปรดปิดและลองอีกครั้ง</translation> <translation id="4304713468139749426">เครื่องมือจัดการรหัสผ่าน</translation> +<translation id="4334241893986177674">ค้นหาในภาพหน้าจอนี้</translation> <translation id="4334294535648607276">ดาวน์โหลดเสร็จสมบูรณ์</translation> <translation id="439358628917130594"><ph name="MANAGER" /> กำหนดว่าคุณต้องอ่านและยอมรับข้อกำหนดในการให้บริการต่อไปนี้ก่อนใช้อุปกรณ์นี้ ข้อกำหนดเหล่านี้ไม่ได้ขยาย แก้ไข หรือจำกัดข้อกำหนดของ Chromium OS</translation> <translation id="4407044323746248786">ออกจาก Chromium ใช่ไหม</translation>
diff --git a/chrome/app/resources/chromium_strings_ur.xtb b/chrome/app/resources/chromium_strings_ur.xtb index 808229f..b2b35bb1 100644 --- a/chrome/app/resources/chromium_strings_ur.xtb +++ b/chrome/app/resources/chromium_strings_ur.xtb
@@ -248,6 +248,7 @@ <translation id="4281844954008187215">سروس کی شرائط</translation> <translation id="4285930937574705105">غیر متعینہ خرابی کی وجہ سے انسٹالیشن ناکام ہو گیا۔ اگر فی الحال Chromium چل رہا ہے تو براہ کرم اسے بند کر دیں اور دوبارہ کوشش کریں۔</translation> <translation id="4304713468139749426">پاس ورڈ مینیجر</translation> +<translation id="4334241893986177674">اس اسکرین شاٹ کو تلاش کریں</translation> <translation id="4334294535648607276">ڈاؤن لوڈ مکمل ہوگیا۔</translation> <translation id="439358628917130594"><ph name="MANAGER" /> تقاضہ کرتا ہے کہ آپ یہ آلہ استعمال کرنے سے پہلے مندرجہ ذیل سروس کی شرائط کو پڑھیں اور قبول کریں۔ یہ شرائط ChromiumOS کی شرائط کی توسیع، ان میں ترمیم یا انہیں محدود نہیں کرتی ہیں۔</translation> <translation id="4407044323746248786">بہر حال Chromium کو بند کریں؟</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 1757abe..761dc75 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -5450,7 +5450,7 @@ <translation id="4804827417948292437">أفوكادو</translation> <translation id="4806071198808203109">حفظ إط&ار الفيديو باسم...</translation> <translation id="4806457879608775995">مراجعة هذه البنود والتحكّم في بياناتك</translation> -<translation id="4807098396393229769">الاسم كما على البطاقة</translation> +<translation id="4807098396393229769">الاسم المكتوب على البطاقة</translation> <translation id="4807122856660838973">تفعيل ميزة "التصفُّح الآمن"</translation> <translation id="4807514039636325497">تفاصيل D-Bus</translation> <translation id="4808525520374557629">احصل على إشعارات تتضمّن اقتراحات لحلّ مشاكل الأداء التي يتم رصدها. <ph name="BEGIN_LINK" />مزيد من المعلومات حول التنبيهات بشأن مشاكل الأداء<ph name="END_LINK" /></translation> @@ -8021,7 +8021,7 @@ <translation id="6670983860904543332">توفّر لك التحديثات التلقائية أحدث الميزات. يمكنك الاطّلاع على أهم التفاصيل حول آخر التحديثات.</translation> <translation id="6671320560732140690">{COUNT,plural, =1{عنوان واحد}zero{# عنوان}two{عنوانان}few{# عناوين}many{# عنوانًا}other{# عنوان}}</translation> <translation id="6671497123040790595">جارٍ إعداد الإدارة من قِبل <ph name="MANAGER" /></translation> -<translation id="6672697278890207089">إدخال عبارة المرور</translation> +<translation id="6672697278890207089">يُرجى إدخال عبارة المرور</translation> <translation id="6672917148207387131">إضافة <ph name="DOMAIN" /></translation> <translation id="6673353404516008367">يحمي وضع التصفّح المتخفي على <ph name="BEGIN_LINK" />خصوصية تصفّحك من الأشخاص الآخرين<ph name="END_LINK" /> الذين يستخدمون جهازك.</translation> <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation> @@ -9767,7 +9767,7 @@ <translation id="7904526211178107182">اجعل منافذ نظام التشغيل Linux متاحة لأجهزة أخرى على الشبكة.</translation> <translation id="7906440585529721295">سيتم حذف البيانات المُخزّنة على الجهاز</translation> <translation id="7907502219904644296">تغيير إذن الوصول</translation> -<translation id="7907837847548254634">تحديد سريع للعنصر الذي تم التركيز عليه</translation> +<translation id="7907837847548254634">تمييز سريع للعنصر الذي يتم التركيز عليه</translation> <translation id="7908378463497120834">عذرًا، تعذر تركيب جزء واحد على الأقل من جهاز مساحة التخزين الخارجية.</translation> <translation id="7908835530772972485">حذف البيانات عند إغلاق جميع النوافذ</translation> <translation id="7909324225945368569">إعادة تسمية ملفك الشخصي</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 2d26fda..7e566f1 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">প্রিভিউ লোড হচ্ছে</translation> <translation id="1032605640136438169">নতুন শর্তাবলী ভাল করে পড়ে নিন</translation> <translation id="103279545524624934">Android অ্যাপ্লিকেশন লঞ্চ করার জন্য ডিস্কে জায়গা খালি করুন।</translation> +<translation id="1033060461778467949">স্প্লিট ভিউতে ট্যাব সরান</translation> <translation id="1033780634303702874">আপনার সিরিয়াল ডিভাইসগুলি অ্যাক্সেস করুন</translation> <translation id="1034484273907870301">ট্যাবলেট মোডের জন্য থাম্বনেল ট্যাব বার</translation> <translation id="1035289631433631911">কন্টেন্ট ট্রান্সফার টুল</translation> @@ -1928,6 +1929,7 @@ <translation id="2312219318583366810">পৃষ্ঠার ইউআরএল</translation> <translation id="2314165183524574721">বর্তমানে 'ডিভাইসের দৃশ্যমানতা' সেটিং লুকানো রয়েছে</translation> <translation id="2314774579020744484">পৃষ্ঠা অনুবাদ করার সময় ব্যবহার করা ভাষা</translation> +<translation id="2316090909467242775">এই রিকভারি পাসওয়ার্ড ব্যবহার করে দেখুন</translation> <translation id="2316129865977710310">না, ধন্যবাদ</translation> <translation id="2316433409811863464">অ্যাপ স্ট্রিমিং</translation> <translation id="2316709634732130529">সাজেস্ট করা পাসওয়ার্ড ব্যবহার করুন</translation> @@ -3553,6 +3555,7 @@ <translation id="3462413494201477527">অ্যাকাউন্ট সেট-আপ বাতিল করবেন?</translation> <translation id="346298925039590474">এই ডিভাইস ব্যবহারকারী সকলেই এই মোবাইল নেটওয়ার্ক ব্যবহার করতে পারবেন</translation> <translation id="3464145797867108663">অফিস প্রোফাইল যোগ করুন</translation> +<translation id="34673353983913587">আপনার নতুন পাসওয়ার্ড সেভ করার আগে, সাইটের ক্ষেত্রে অতিরিক্ত যাচাইকরণ প্রয়োজন</translation> <translation id="3468298837301810372">লেবেল</translation> <translation id="3468999815377931311">Android ফোন</translation> <translation id="3469583217479686109">বেছে নেওয়ার টুল</translation> @@ -3580,6 +3583,7 @@ <translation id="3487007233252413104">নামহীন ক্রিয়াকলাপ</translation> <translation id="3487649228420469005">স্ক্যান করা হয়ে গেছে</translation> <translation id="3488199663160411179">নাম</translation> +<translation id="3489457144969823485">জুলাই ২০২৫ থেকে ChromeOS ডিভাইসে Chrome অ্যাপ চলা বন্ধ হবে। বিকল্প কোনও অ্যাপের কথা বিবেচনা করুন।</translation> <translation id="3490695139702884919">ডাউনলোড হচ্ছে... <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">আপনি পিন বা পাসওয়ার্ড ভুলে গেলেও, স্থানীয় ডেটা ফিরিয়ে আনা যাবে</translation> <translation id="3491616972057195633">বাউন্স 'কী'</translation> @@ -4047,6 +4051,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" />টি এক্সটেনশন</translation> <translation id="3794792524918736965">Windows Hello চালু করুন</translation> <translation id="379509625511193653">বন্ধ করা আছে</translation> +<translation id="3795624560191557077">সর্বজনীন ডেটার নিরাপত্তা লঙ্ঘনে পাওয়া গেছে এমন একটি পাসওয়ার্ড আপনি সম্প্রতি পরিবর্তন করেছেন। সমস্যার ক্ষেত্রে, Google Password Manager আপনাকে সাইন-ইন করার জন্য সাহায্য করতে পারে।</translation> <translation id="3796215473395753611">alt + ঊর্দ্ধমুখী তীরচিহ্ন</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, ভয়েস শোনার জন্য ডানদিকের তীরচিহ্ন ব্যবহার করুন</translation> <translation id="3796648294839530037">পছন্দসই নেটওয়ার্কগুলি:</translation> @@ -5865,6 +5870,7 @@ <translation id="5088534251099454936">RSA এনক্রিপশানের সাথে PKCS #1 SHA-512</translation> <translation id="5090637338841444533">আপনার ক্যামেরার পজিশন ট্র্যাক করার অনুমতি দেওয়া হয়নি</translation> <translation id="5091636240353511739">পিন দেখুন</translation> +<translation id="5093417502834168387">সাইন-ইন করতে সমস্যা হচ্ছে? অন্যভাবে চেষ্টা করে দেখুন</translation> <translation id="5093477827231450397">সেইসব সাইটের তালিকা যা আপনি ব্লক করেছেন এবং যার থেকে আপনি অন্য সাইটে বিজ্ঞাপনের সাজেশন চান না</translation> <translation id="5093569275467863761">ব্যাক-ফরোয়ার্ড ক্যাশেতে স্টোর করা ছদ্মবেশী সাবফ্রেম: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Files অ্যাপ বা অন্য অ্যাপ থেকে এই অ্যাপে কাজ করে এমন ফাইল খুলতে ও এডিট করতে পারবেন। ডিফল্ট হিসেবে কোন কোন ফাইল এই অ্যাপে খোলে তা নিয়ন্ত্রণ করতে, <ph name="BEGIN_LINK" />আপনার ডিভাইসে কীভাবে ডিফল্ট হিসেবে অ্যাপ সেট করবেন তা জানুন<ph name="END_LINK" />।</translation> @@ -6803,6 +6809,7 @@ <translation id="5785583009707899920">Chrome ফাইল ইউটিলিটি</translation> <translation id="5787146423283493983">কী চুক্তি</translation> <translation id="5787420647064736989">ডিভাইসের নাম</translation> +<translation id="5787582109651427233"><ph name="BEGIN_LINK_LOYALTY_CARDS" />লয়ালটি কার্ড<ph name="END_LINK_LOYALTY_CARDS" /> বা Google Pay <ph name="BEGIN_LINK_PAYMENT_METHODS" />পেমেন্ট পদ্ধতি<ph name="END_LINK_PAYMENT_METHODS" /> যোগ বা ম্যানেজ করতে Google Wallet ভিজিট করুন</translation> <translation id="5788367137662787332">দুঃখিত, <ph name="DEVICE_LABEL" /> ডিভাইসটির কমপক্ষে একটি ভাগ আটকানো যায়নি৷</translation> <translation id="5789581866075720267">এই ডিভাইসে <ph name="BRAND" />-এ পাসওয়ার্ড ইমপোর্ট করতে, একটি CSV ফাইল বেছে নিন।</translation> <translation id="5790085346892983794">সফল</translation> @@ -7288,6 +7295,7 @@ <translation id="6131511889181741773">স্প্ল্যাটার</translation> <translation id="6132251717264923430">বোতাম পিন রা হয়েছে</translation> <translation id="6132714462430777655">স্কুলে নথিভুক্ত করা এড়িয়ে যাবেন?</translation> +<translation id="6134418895482326458">নতুন ট্যাব পৃষ্ঠায় ফুটার লুকান</translation> <translation id="6134428719487602109">সব ব্যবহারকারীর অ্যাকাউন্ট সরিয়ে দেয় এবং একদম নতুনের মতো করে আপনার Chromebook-কে রিসেট করে।</translation> <translation id="6135826623269483856">আপনার সব ডিসপ্লেতে উইন্ডো ম্যানেজ করার অনুমতি নেই</translation> <translation id="6136114942382973861">ডাউনলোড বার বন্ধ করুন</translation> @@ -7644,6 +7652,7 @@ <translation id="6388577073199278153">আপনার মোবাইল অ্যাকাউন্ট অ্যাক্সেস করা যাচ্ছে না</translation> <translation id="6390020764191254941">ট্যাবটি নতুন উইন্ডোতে খুলুন</translation> <translation id="6390046581187330789">{COUNT,plural, =0{কোনওটিই নয়}=1{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ও আরও ১টির জন্য}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ও আরও {COUNT}টির জন্য}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ও আরও {COUNT}টির জন্য}}</translation> +<translation id="6390533465682072118">রিকভারি</translation> <translation id="6391131092053186625">আপনার ডিভাইসের IMEI হল <ph name="IMEI_NUMBER" />। পরিষেবা চালু করার জন্য এই নম্বরগুলি ব্যবহার করা যেতে পারে।</translation> <translation id="6393156038355142111">শক্তিশালী পাসওয়ার্ড সাজেস্ট করুন</translation> <translation id="6393550101331051049">নিরাপদ নয় এমন কন্টেন্ট দেখানোর অনুমতি দেওয়া হয়েছে</translation> @@ -7728,6 +7737,7 @@ <translation id="6455521402703088376">বন্ধ আছে • ডেভেলপার এই এক্সটেনশনটি প্রকাশনা থেকে সরিয়ে নিয়েছেন</translation> <translation id="6455894534188563617">&নতুন ফোল্ডার</translation> <translation id="645705751491738698">জাভাস্ক্রিপ্ট ব্লক করা চালিয়ে যান</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> লঞ্চ করা যাবে না</translation> <translation id="6458606150257356946">যেভাবেই হোক এটি পেস্ট করুন</translation> <translation id="6458701200018867744">আপলোড করা যায়নি (<ph name="WEBRTC_LOG_UPLOAD_TIME" />)।</translation> <translation id="6459488832681039634">খোঁজার জন্য নির্বাচন ব্যবহার করুন</translation> @@ -8022,6 +8032,7 @@ <translation id="6667187897999649121">এখনকার জন্য, আপনি শুধুমাত্র পরিবারের সদস্যদের সাথে পাসওয়ার্ড শেয়ার করতে পারবেন। সর্বাধিক ৬ জনকে নিয়ে <ph name="BEGIN_LINK" />ফ্যামিলি গ্রুপ তৈরি করুন<ph name="END_LINK" /> এবং Google জুড়ে আপনার প্রোডাক্ট ও সাবস্ক্রিপশন থেকে আরও বেশি সুবিধা পান।</translation> <translation id="666731172850799929"><ph name="APP_NAME" /> এ খুলুন</translation> <translation id="6669195257625975787">আপনি যে সাইটটি দেখছেন সেটির মতোই ডেটা ব্যবহার করা হয়</translation> +<translation id="6669637573228217624">একটি ফাইল আপলোড করুন</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> এখন উপলভ্য আছে</translation> <translation id="6670767097276846646">কিছু এক্সটেনশন Chrome-এ সার্চ ইঞ্জিন যোগ করতে পারে</translation> <translation id="6670983860904543332">অটোমেটিক আপডেট আপনাকে লেটেস্ট ফিচারের সুবিধা প্রদান করে। সাম্প্রতিক আপডেট থেকে হাইলাইট এক্সপ্লোর করুন।</translation> @@ -8161,6 +8172,7 @@ <translation id="6771503742377376720">একটি শংসাপত্রের কর্তৃপক্ষ</translation> <translation id="6772974422346500939">খুলুন ও এডিট করুন</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">সাইটের ক্ষেত্রে একবার ব্যবহারের পাসওয়ার্ড প্রয়োজন</translation> <translation id="6774710250118040929">নতুন পাসওয়ার্ড যোগ করুন</translation> <translation id="6775163072363532304">উপলভ্য ডিভাইসগুলি এখানে দেখা যাবে।</translation> <translation id="6775992990195573904">আপনার ট্যাব সাজিয়ে নিন</translation> @@ -9280,6 +9292,7 @@ <translation id="7566118625369982896">Play অ্যাপের লিঙ্ক পরিচালনা করুন</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">কী কম্বিনেশন তৈরি করুন</translation> +<translation id="7567100268516475532">স্প্লিট ভিউতে ট্যাব সরান</translation> <translation id="7568014768212280234">আপনার ট্যাব গ্রুপে আর জায়গা নেই, নতুন সদস্যরা আর লিঙ্কের সাহায্যে যোগ দিতে পারবেন না</translation> <translation id="7568759527730933493">ডিএনএস (ডোমেন নেম সিস্টেম) থেকে কোনও সাইটের IP অ্যাড্রেস খুঁজতে সুরক্ষিত কানেকশন ব্যবহার করুন। এটি <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" />-এ ম্যানেজ করা হয়েছে, এমন পরিষেবা প্রদানকারী ব্যবহার করে। আপনার অ্যাডমিনিস্ট্রেটর এমন কিছু ডোমেন কনফিগার করেছে যার জন্য সুরক্ষিত কানেকশন ব্যবহার করা যাবে না।</translation> <translation id="756876171895853918">অবতার কাস্টমাইজ করুন</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 19c222b6..a6b47d2e 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">Φόρτωση προεπισκόπησης</translation> <translation id="1032605640136438169">Ελέγξτε τους νέους όρους.</translation> <translation id="103279545524624934">Αποδεσμεύστε χώρο στον δίσκο, για την εκκίνηση εφαρμογών Android.</translation> +<translation id="1033060461778467949">Μετακίνηση καρτέλας σε προβολή διαχωρισμού οθόνης</translation> <translation id="1033780634303702874">Πρόσβαση στις σειριακές συσκευές</translation> <translation id="1034484273907870301">Μικρογραφία γραμμής καρτελών για λειτουργία tablet</translation> <translation id="1035289631433631911">Εργαλείο μεταφοράς περιεχομένου</translation> @@ -1927,6 +1928,7 @@ <translation id="2312219318583366810">URL σελίδας</translation> <translation id="2314165183524574721">Η τρέχουσα ρύθμιση ορατότητας είναι Κρυφή</translation> <translation id="2314774579020744484">Χρησιμοποιούμενη γλώσσα για τη μετάφραση σελίδων</translation> +<translation id="2316090909467242775">Δοκιμάστε αυτόν τον κωδικό πρόσβασης ανάκτησης</translation> <translation id="2316129865977710310">Όχι, ευχαριστώ</translation> <translation id="2316433409811863464">Ροή εφαρμογής</translation> <translation id="2316709634732130529">Χρ. προτ. κωδ. πρόσ.</translation> @@ -3552,6 +3554,7 @@ <translation id="3462413494201477527">Ακύρωση ρύθμισης λογαριασμού;</translation> <translation id="346298925039590474">Αυτό το δίκτυο κινητής τηλεφωνίας θα είναι διαθέσιμο σε όλους τους χρήστες αυτής της συσκευής</translation> <translation id="3464145797867108663">Προσθήκη προφίλ εργασίας</translation> +<translation id="34673353983913587">Πριν από την αποθήκευση του νέου κωδικό πρόσβασης, ο ιστότοπος απαιτεί επιπλέον επαλήθευση</translation> <translation id="3468298837301810372">Ετικέτα</translation> <translation id="3468999815377931311">Τηλέφωνο Android</translation> <translation id="3469583217479686109">Εργαλείο επιλογής</translation> @@ -3579,6 +3582,7 @@ <translation id="3487007233252413104">ανώνυμη λειτουργία</translation> <translation id="3487649228420469005">Η σάρωση ολοκληρώθηκε</translation> <translation id="3488199663160411179">όνομα</translation> +<translation id="3489457144969823485">Οι εφαρμογές Chrome σταμάτησαν να εκτελούνται σε συσκευές ChromeOS τον Ιούλιο του 2025. Εξετάστε το ενδεχόμενο χρήσης μιας εναλλακτικής εφαρμογής.</translation> <translation id="3490695139702884919">Λήψη… <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">Εάν ξεχάσετε το PIN ή τον κωδικό πρόσβασής σας, μπορείτε να επαναφέρετε τα τοπικά δεδομένα</translation> <translation id="3491616972057195633">Ελαστικά πλήκτρα</translation> @@ -4046,6 +4050,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> επεκτάσεις</translation> <translation id="3794792524918736965">Ενεργοποίηση του Windows Hello</translation> <translation id="379509625511193653">Ανενεργό</translation> +<translation id="3795624560191557077">Αλλάξατε πρόσφατα έναν κωδικό πρόσβασης που εντοπίστηκε σε μια δημόσια παραβίαση δεδομένων. Σε περίπτωση προβλημάτων, η Διαχείριση κωδικών πρόσβασης Google μπορεί να σας βοηθήσει να συνδεθείτε.</translation> <translation id="3796215473395753611">alt + πάνω βέλος</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, χρησιμοποιήστε το πλήκτρο δεξιού βέλους για προεπισκόπηση φωνής</translation> <translation id="3796648294839530037">Αγαπημένα δίκτυα:</translation> @@ -5864,6 +5869,7 @@ <translation id="5088534251099454936">PKCS #1 SHA-512 με κρυπτογράφηση RSA</translation> <translation id="5090637338841444533">Δεν επιτρέπεται να παρακολουθούν τη θέση της κάμεράς σας</translation> <translation id="5091636240353511739">Εμφάνιση PIN</translation> +<translation id="5093417502834168387">Αντιμετωπίζετε πρόβλημα με τη σύνδεση; Δοκιμάστε άλλον τρόπο</translation> <translation id="5093477827231450397">Λίστα ιστοτόπων που αποκλείσατε και δεν θέλετε να προτείνουν διαφημίσεις σε άλλους ιστοτόπους</translation> <translation id="5093569275467863761">Υποπλαίσιο ανώνυμης περιήγησης αποθηκευμένο στην κρυφή μνήμη πίσω-εμπρός: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Μπορείτε να ανοίξετε και να επεξεργαστείτε υποστηριζόμενα αρχεία με αυτή την εφαρμογή από την εφαρμογή Αρχεία ή από άλλες εφαρμογές. Για να ελέγξετε ποια αρχεία ανοίγουν αυτή την εφαρμογή από προεπιλογή, <ph name="BEGIN_LINK" />μάθετε πώς να ορίσετε προεπιλεγμένες εφαρμογές στη συσκευή σας<ph name="END_LINK" />.</translation> @@ -6802,6 +6808,7 @@ <translation id="5785583009707899920">Βοηθητικά προγράμματα διαχείρισης αρχείων του Chrome</translation> <translation id="5787146423283493983">Βασική συμφωνία</translation> <translation id="5787420647064736989">Όνομα συσκευής</translation> +<translation id="5787582109651427233">Επισκεφτείτε το Πορτοφόλι Google, για να προσθέσετε ή να διαχειριστείτε <ph name="BEGIN_LINK_LOYALTY_CARDS" />κάρτες επιβράβευσης αφοσιωμένων πελατών<ph name="END_LINK_LOYALTY_CARDS" /> ή <ph name="BEGIN_LINK_PAYMENT_METHODS" />τρόπους πληρωμής<ph name="END_LINK_PAYMENT_METHODS" /> του Google Pay</translation> <translation id="5788367137662787332">Λυπούμαστε, δεν ήταν δυνατή η προσάρτηση τουλάχιστον ενός διαμερίσματος της συσκευής <ph name="DEVICE_LABEL" />.</translation> <translation id="5789581866075720267">Για να εισαγάγετε κωδικούς πρόσβασης στο <ph name="BRAND" /> σε αυτήν τη συσκευή, επιλέξτε ένα αρχείο CSV.</translation> <translation id="5790085346892983794">Επιτυχία</translation> @@ -7287,6 +7294,7 @@ <translation id="6131511889181741773">Splatter</translation> <translation id="6132251717264923430">Το κουμπί καρφιτσώθηκε</translation> <translation id="6132714462430777655">Παράβλεψη εγγραφής σχολείου;</translation> +<translation id="6134418895482326458">Απόκρυψη υποσέλιδου στη σελίδα Νέα καρτέλα</translation> <translation id="6134428719487602109">Καταργήστε όλους τους λογαριασμούς χρηστών και επαναφέρετε το Chromebook για να γίνει σαν καινούριο.</translation> <translation id="6135826623269483856">Δεν επιτρέπεται η διαχείριση παραθύρων σε όλες τις οθόνες σας</translation> <translation id="6136114942382973861">Κλείσιμο γραμμής λήψεων</translation> @@ -7643,6 +7651,7 @@ <translation id="6388577073199278153">Δεν έχετε πρόσβαση στον λογαριασμό σας για κινητά.</translation> <translation id="6390020764191254941">Μετακίνηση καρτέλας σε νέο παράθυρο</translation> <translation id="6390046581187330789">{COUNT,plural, =0{Κανένα}=1{Για τα <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> και 1 ακόμη}other{Για τα <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> και {COUNT} ακόμη}}</translation> +<translation id="6390533465682072118">Ανάκτηση</translation> <translation id="6391131092053186625">Ο αριθμός IMEI της συσκευής σας είναι <ph name="IMEI_NUMBER" />. Αυτός ο αριθμός μπορεί να χρησιμοποιηθεί για την ενεργοποίηση της υπηρεσίας.</translation> <translation id="6393156038355142111">Πρόταση ισχυρού κωδικού πρόσβασης</translation> <translation id="6393550101331051049">Επιτρέπεται να εμφανίζουν μη ασφαλές περιεχόμενο</translation> @@ -7727,6 +7736,7 @@ <translation id="6455521402703088376">Ανενεργή • Η δημοσίευση αυτής της επέκτασης καταργήθηκε από τον προγραμματιστή της</translation> <translation id="6455894534188563617">&Νέος φάκελος</translation> <translation id="645705751491738698">Συνέχιση αποκλεισμού JavaScript</translation> +<translation id="6457572529564180082">Δεν είναι δυνατή η εκκίνηση της εφαρμογής <ph name="APP_NAME" /></translation> <translation id="6458606150257356946">Επικόλληση ούτως ή άλλως</translation> <translation id="6458701200018867744">Η μεταφόρτωση απέτυχε (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Χρήση Επιλογής για Εύρεση</translation> @@ -8019,6 +8029,7 @@ <translation id="6667187897999649121">Προς το παρόν, μπορείτε να μοιραστείτε κωδικούς πρόσβασης μόνο με τα μέλη της οικογένειας. <ph name="BEGIN_LINK" />Δημιουργήστε μια ομάδα οικογένειας<ph name="END_LINK" /> με έως 6 μέλη και αξιοποιήστε περισσότερο τα προϊόντα και τις συνδρομές σας στην Google.</translation> <translation id="666731172850799929">Άνοιγμα σε <ph name="APP_NAME" /></translation> <translation id="6669195257625975787">Τα δεδομένα αντιμετωπίζονται με τον ίδιο τρόπο που αντιμετωπίζεται και ο ιστότοπος που προβάλλετε</translation> +<translation id="6669637573228217624">Μεταφόρτωση αρχείου</translation> <translation id="6670142487971298264">Η εφαρμογή <ph name="APP_NAME" /> είναι πλέον διαθέσιμη</translation> <translation id="6670767097276846646">Με ορισμένες επεκτάσεις μπορεί να γίνει προσθήκη μηχανών αναζήτησης στο Chrome</translation> <translation id="6670983860904543332">Οι αυτόματες ενημερώσεις σάς παρέχουν τις πιο πρόσφατες λειτουργίες. Εξερευνήστε τα σημαντικότερα στοιχεία από τις πρόσφατες ενημερώσεις.</translation> @@ -8158,6 +8169,7 @@ <translation id="6771503742377376720">Είναι Αρχή πιστοποίησης</translation> <translation id="6772974422346500939">Άνοιγμα και επεξεργασία</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">Ο ιστότοπος χρειάζεται κωδικό πρόσβασης μίας χρήσης</translation> <translation id="6774710250118040929">Προσθήκη νέου κωδικού πρόσβασης</translation> <translation id="6775163072363532304">Οι διαθέσιμες συσκευές θα εμφανίζονται εδώ.</translation> <translation id="6775992990195573904">Ταξινομήστε τις καρτέλες σας</translation> @@ -9277,6 +9289,7 @@ <translation id="7566118625369982896">Διαχείριση συνδέσμων εφαρμογών Play</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">Δημιουργία συνδυασμού πλήκτρων</translation> +<translation id="7567100268516475532">Μετακίνηση καρτέλας σε προβολή διαχωρισμού οθόνης</translation> <translation id="7568014768212280234">Η ομάδα καρτελών είναι πλήρης, επομένως δεν μπορούν να συμμετάσχουν νέα μέλη μέσω του συνδέσμου</translation> <translation id="7568759527730933493">Χρησιμοποιήστε μια ασφαλή σύνδεση, για να αναζητήσετε τη διεύθυνση IP ενός ιστοτόπου στο DNS (Domain Name System). Χρησιμοποιεί έναν διαχειριζόμενο πάροχο υπηρεσιών στη διεύθυνση<ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" />. Οι ασφαλείς συνδέσεις δεν χρησιμοποιούνται για ορισμένους τομείς που έχουν διαμορφωθεί από τον διαχειριστή σας.</translation> <translation id="756876171895853918">Προσαρμογή avatar</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 4c0d5ea..e9c3938 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">Cargando vista previa</translation> <translation id="1032605640136438169">Revisa los nuevos términos</translation> <translation id="103279545524624934">Libera espacio del disco para iniciar aplicaciones de Android.</translation> +<translation id="1033060461778467949">Mover pestaña a vista dividida</translation> <translation id="1033780634303702874">Acceder a tus dispositivos en serie</translation> <translation id="1034484273907870301">Barra de pestañas con miniaturas en el modo tablet</translation> <translation id="1035289631433631911">Herramienta Transferencia de contenido</translation> @@ -1915,6 +1916,7 @@ <translation id="2312219318583366810">URL de la página</translation> <translation id="2314165183524574721">El ajuste de visibilidad actual es oculto</translation> <translation id="2314774579020744484">Idioma utilizado al traducir páginas</translation> +<translation id="2316090909467242775">Prueba esta contraseña de recuperación</translation> <translation id="2316129865977710310">No, gracias</translation> <translation id="2316433409811863464">Streaming de aplicaciones</translation> <translation id="2316709634732130529">Usar contraseña sugerida</translation> @@ -3540,6 +3542,7 @@ <translation id="3462413494201477527">¿Quieres cancelar la configuración de la cuenta?</translation> <translation id="346298925039590474">Esta red móvil estará disponible para todos los usuarios de este dispositivo</translation> <translation id="3464145797867108663">Añadir perfil de trabajo</translation> +<translation id="34673353983913587">Antes de guardar tu nueva contraseña, el sitio requiere una verificación adicional</translation> <translation id="3468298837301810372">Etiqueta</translation> <translation id="3468999815377931311">Teléfono Android</translation> <translation id="3469583217479686109">Herramienta de selección</translation> @@ -3567,6 +3570,7 @@ <translation id="3487007233252413104">función anónima</translation> <translation id="3487649228420469005">Se ha completado el análisis</translation> <translation id="3488199663160411179">nombre</translation> +<translation id="3489457144969823485">Las aplicaciones de Chrome dejaron de ejecutarse en dispositivos ChromeOS en julio del 2025. Prueba otra aplicación.</translation> <translation id="3490695139702884919">Descargando… <ph name="PERCENT" /> %</translation> <translation id="3491171603443463516">Los datos locales se pueden restaurar si olvidas tu PIN o contraseña</translation> <translation id="3491616972057195633">Teclas de rebote</translation> @@ -4034,6 +4038,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> extensiones</translation> <translation id="3794792524918736965">Activa Windows Hello</translation> <translation id="379509625511193653">Desactivado</translation> +<translation id="3795624560191557077">Hace poco has cambiado una contraseña que se ha encontrado en una brecha de seguridad de datos públicos. Si tienes problemas, el Gestor de contraseñas de Google puede ayudarte a iniciar sesión.</translation> <translation id="3796215473395753611">Alt + flecha hacia arriba</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, usa la tecla de la flecha hacia la derecha para escuchar una muestra de la voz</translation> <translation id="3796648294839530037">Redes favoritas:</translation> @@ -4903,6 +4908,7 @@ <translation id="4406883609789734330">Subtítulos automáticos</translation> <translation id="4408599188496843485">Ay&uda</translation> <translation id="4409271659088619928">Usas el buscador <ph name="DSE" />. Consulta las instrucciones de tu buscador para eliminar tu historial de búsqueda (si corresponde).</translation> +<translation id="4409340274650920844">{NUM_APPS,plural,offset:2 =1{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />. Recibirás una notificación cuando empiece la grabación.}=2{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" /> y <ph name="APP1_NAME" />. Recibirás una notificación cuando empiece la grabación.}=3{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> y aplicación más. Recibirás una notificación cuando empiece la grabación.}other{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> y # aplicaciones más. Recibirás una notificación cuando empiece la grabación.}}</translation> <translation id="4409697491990005945">Márgenes</translation> <translation id="4409779593816003679">Contraseñas y &Autocompletar</translation> <translation id="4410545552906060960">Usa un número PIN en lugar de una contraseña para desbloquear el dispositivo. Para crear el PIN más tarde, ve a Configuración.</translation> @@ -5850,6 +5856,7 @@ <translation id="5088534251099454936">PKCS #1 SHA-512 con cifrado RSA</translation> <translation id="5090637338841444533">No puede monitorizar la posición de la cámara</translation> <translation id="5091636240353511739">Mostrar PIN</translation> +<translation id="5093417502834168387">¿No puedes iniciar sesión? Prueba otra manera.</translation> <translation id="5093477827231450397">Lista de sitios que has bloqueado y que no quieres que sugieran anuncios a otros sitios</translation> <translation id="5093569275467863761">Submarco de incógnito almacenado en la caché de páginas completas: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Puedes abrir y editar archivos compatibles con esta aplicación desde la aplicación Archivos u otras aplicaciones. Para controlar qué archivos se abren con esta aplicación de forma predeterminada, <ph name="BEGIN_LINK" />consulta cómo establecer aplicaciones predeterminadas en tu dispositivo<ph name="END_LINK" />.</translation> @@ -6786,6 +6793,7 @@ <translation id="5785583009707899920">Utilidades de los archivos de Chrome</translation> <translation id="5787146423283493983">Acuerdo de claves</translation> <translation id="5787420647064736989">Nombre del dispositivo</translation> +<translation id="5787582109651427233">Visita Google Wallet para añadir o gestionar <ph name="BEGIN_LINK_LOYALTY_CARDS" />tarjetas de fidelización<ph name="END_LINK_LOYALTY_CARDS" /> o <ph name="BEGIN_LINK_PAYMENT_METHODS" />métodos de pago<ph name="END_LINK_PAYMENT_METHODS" /> de Google Pay</translation> <translation id="5788367137662787332">Lo sentimos, pero no se ha podido activar al menos una partición del dispositivo <ph name="DEVICE_LABEL" />.</translation> <translation id="5789581866075720267">Para importar contraseñas al <ph name="BRAND" /> en este dispositivo, selecciona un archivo CSV.</translation> <translation id="5790085346892983794">Completado correctamente</translation> @@ -7271,6 +7279,7 @@ <translation id="6131511889181741773">Salpicaduras</translation> <translation id="6132251717264923430">Botón fijado</translation> <translation id="6132714462430777655">¿Saltar el registro de cuenta de centro educativo?</translation> +<translation id="6134418895482326458">Ocultar pie de página en la página Nueva pestaña</translation> <translation id="6134428719487602109">Elimina todas las cuentas de usuario y restablece el Chromebook para que quede como nuevo.</translation> <translation id="6135826623269483856">No tienen permiso para gestionar las ventanas en ninguna de tus pantallas</translation> <translation id="6136114942382973861">Cerrar barra de descargas</translation> @@ -7627,6 +7636,7 @@ <translation id="6388577073199278153">No se puede acceder a tu cuenta móvil</translation> <translation id="6390020764191254941">Mover pestaña a ventana nueva</translation> <translation id="6390046581187330789">{COUNT,plural, =0{Ninguno}=1{De <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> y 1 más}other{De <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> y {COUNT} más}}</translation> +<translation id="6390533465682072118">Recuperación</translation> <translation id="6391131092053186625">El IMEI de tu dispositivo es <ph name="IMEI_NUMBER" />. Este número se puede usar para activar el servicio.</translation> <translation id="6393156038355142111">Sugerir contraseña segura</translation> <translation id="6393550101331051049">Puede mostrar contenido no seguro</translation> @@ -7711,6 +7721,7 @@ <translation id="6455521402703088376">Desactivada • El desarrollador ha anulado la publicación de esta extensión</translation> <translation id="6455894534188563617">&Nueva carpeta</translation> <translation id="645705751491738698">Seguir bloqueando JavaScript</translation> +<translation id="6457572529564180082">No se puede iniciar <ph name="APP_NAME" /></translation> <translation id="6458606150257356946">Pegar de todos modos</translation> <translation id="6458701200018867744">No se ha podido subir (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Usar selección para buscar</translation> @@ -8003,6 +8014,7 @@ <translation id="6667187897999649121">Por ahora, solo puedes compartir contraseñas con miembros de la familia. <ph name="BEGIN_LINK" />Crea un grupo familiar<ph name="END_LINK" /> de hasta 6 miembros y saca más partido a tus productos y suscripciones de Google.</translation> <translation id="666731172850799929">Abrir en <ph name="APP_NAME" /></translation> <translation id="6669195257625975787">Los datos se tratan igual que en el sitio web que estás viendo</translation> +<translation id="6669637573228217624">Subir un archivo</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> ya está disponible</translation> <translation id="6670767097276846646">Algunas extensiones pueden añadir buscadores a Chrome</translation> <translation id="6670983860904543332">Las actualizaciones automáticas te proporcionan las funciones más recientes. Explora las novedades de las actualizaciones recientes.</translation> @@ -8142,6 +8154,7 @@ <translation id="6771503742377376720">Es una entidad emisora de certificados.</translation> <translation id="6772974422346500939">Abrir y editar</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">El sitio necesita una contraseña de un solo uso</translation> <translation id="6774710250118040929">Añadir nueva contraseña</translation> <translation id="6775163072363532304">Aquí aparecerán los dispositivos disponibles.</translation> <translation id="6775992990195573904">Ordena tus pestañas</translation> @@ -8222,6 +8235,7 @@ <translation id="6811792477922751991">Usar la tecla del menú de aplicaciones para cambiar el comportamiento de las teclas de función</translation> <translation id="6812349420832218321">No se puede ejecutar <ph name="PRODUCT_NAME" /> como raíz.</translation> <translation id="6812841287760418429">Mantener cambios</translation> +<translation id="681360534161436378">{NUM_APPS,plural,offset:2 =1{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />.}=2{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" /> y <ph name="APP1_NAME" />.}=3{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> y 1 aplicación más.}other{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> y # aplicaciones más.}}</translation> <translation id="6813907279658683733">Toda la pantalla</translation> <translation id="6814754908910736855">Información de clientes de Wi-Fi Direct:</translation> <translation id="6815376457351236663">Abrir de todos modos</translation> @@ -9261,6 +9275,7 @@ <translation id="7566118625369982896">Gestionar enlaces de aplicaciones de Play</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">Crear combinación de teclas</translation> +<translation id="7567100268516475532">Mover pestaña a la vista dividida</translation> <translation id="7568014768212280234">Tu grupo de pestañas está lleno y los nuevos miembros no pueden unirse con el enlace</translation> <translation id="7568759527730933493">Usa una conexión segura para buscar la dirección IP de un sitio en el DNS (sistema de nombres de dominio). Esta opción usa un proveedor de servicios gestionados en <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" />. Algunos dominios que ha configurado tu administrador no usan conexiones seguras.</translation> <translation id="756876171895853918">Personalizar avatar</translation> @@ -10404,6 +10419,7 @@ <translation id="8339288417038613756">Tamaño de visualización y del texto</translation> <translation id="833986336429795709">Para abrir este enlace, elige una aplicación</translation> <translation id="8340547030807793004">Más acciones de <ph name="DEVICE" /></translation> +<translation id="8341804784147620576">Mostrar atajos de búsqueda</translation> <translation id="8342221978608739536">No lo he intentado</translation> <translation id="8342861492835240085">Seleccionar una colección</translation> <translation id="8345848587667658367">Ahora puedes consultar las fotos, el contenido multimedia, las notificaciones y las aplicaciones recientes de tu teléfono</translation> @@ -10915,6 +10931,7 @@ <translation id="8702825062053163569">Se ha bloqueado tu <ph name="DEVICE_TYPE" />.</translation> <translation id="8703346390800944767">Saltar anuncio</translation> <translation id="8703372953981978786">Este enlace no funciona</translation> +<translation id="8703766890819308134">Mostrar atajos de búsqueda</translation> <translation id="8704662571571150811">Dominios</translation> <translation id="8705331520020532516">Número de serie</translation> <translation id="8705580154597116082">Wi-Fi disponible a través del teléfono</translation> @@ -11631,6 +11648,7 @@ <translation id="9182556968660520230">No permitir que los sitios reproduzcan contenido protegido</translation> <translation id="9183302530794969518">Documentos de Google</translation> <translation id="918352324374649435">{COUNT,plural, =1{Aplicación}other{# aplicaciones}}</translation> +<translation id="9186743636216815027">{NUM_APPS,plural,offset:2 =1{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />. No recibirás ninguna notificación cuando empiece la grabación.}=2{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" /> y <ph name="APP1_NAME" />. No recibirás ninguna notificación cuando empiece la grabación.}=3{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> y 1 aplicación más. No recibirás ninguna notificación cuando empiece la grabación.}other{Tu administrador puede grabar tu pantalla con <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> y # aplicaciones más. No recibirás ninguna notificación cuando se inicie la grabación.}}</translation> <translation id="9186963452600581158">Iniciar sesión con la cuenta de Google de un niño/a</translation> <translation id="9187967020623675250">Las teclas no coinciden. Pulsa cualquier tecla para <ph name="RESPONSE" />.</translation> <translation id="9192019773545828776">Escucha mensajes de voz para poder usar el dispositivo sin mirar la pantalla. Se pueden recibir mensajes en braille con un dispositivo conectado. Pulsa Ctrl + Alt + Z para activar o desactivar ChromeVox. Usa la tecla de búsqueda + flecha hacia la izquierda o hacia la derecha para desplazarte. Pulsa la tecla de búsqueda y la barra espaciadora para seleccionar (activar).</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index fbcc5f2..70991c82 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -4907,6 +4907,7 @@ <translation id="4406883609789734330">Reaalajas subtiitrid</translation> <translation id="4408599188496843485">A&bi</translation> <translation id="4409271659088619928">Teie otsingumootor on <ph name="DSE" />. Vaadake selle juhiseid otsinguajaloo kustutamise kohta, kui see on asjakohane.</translation> +<translation id="4409340274650920844">{NUM_APPS,plural,offset:2 =1{Teie administraator saab rakenduse <ph name="APP0_NAME" /> abil jäädvustada teie ekraani. Teid teavitatakse, kui salvestamine algab.}=2{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> abil jäädvustada teie ekraani. Teid teavitatakse, kui salvestamine algab.}=3{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> ning veel 1 rakenduse abil salvestada teie ekraani. Teid teavitatakse, kui salvestamine algab.}other{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> ning veel # rakenduse abil salvestada teie ekraani. Teid teavitatakse, kui salvestamine algab.}}</translation> <translation id="4409697491990005945">Veerised</translation> <translation id="4409779593816003679">Paroolid ja &automaattäide</translation> <translation id="4410545552906060960">Kasutage seadme avamiseks parooli asemel numbrit (PIN-kood). Hiljem PIN-koodi seadistamiseks avage jaotis Seaded.</translation> @@ -8228,6 +8229,7 @@ <translation id="6811792477922751991">Käivitajaklahvi kasutamine funktsiooniklahvide käitumise muutmiseks</translation> <translation id="6812349420832218321">Toodet <ph name="PRODUCT_NAME" /> ei saa juurkasutajana käitada.</translation> <translation id="6812841287760418429">Säilita muudatused</translation> +<translation id="681360534161436378">{NUM_APPS,plural,offset:2 =1{Teie administraator saab rakenduse <ph name="APP0_NAME" /> abil jäädvustada teie ekraani.}=2{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> abil jäädvustada teie ekraani.}=3{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> ning veel 1 rakenduse abil salvestada teie ekraani.}other{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> ning veel # rakenduse abil salvestada teie ekraani.}}</translation> <translation id="6813907279658683733">Kogu ekraan</translation> <translation id="6814754908910736855">WiFi Directi klientide teave:</translation> <translation id="6815376457351236663">Ava ikka</translation> @@ -10410,6 +10412,7 @@ <translation id="8339288417038613756">Ekraani ja teksti suurus</translation> <translation id="833986336429795709">Valige lingi avamiseks rakendus</translation> <translation id="8340547030807793004">Rohkem toiminguid: <ph name="DEVICE" /></translation> +<translation id="8341804784147620576">Kuva otsingu otseteed</translation> <translation id="8342221978608739536">Ei proovinud</translation> <translation id="8342861492835240085">Kogu valimine</translation> <translation id="8345848587667658367">Saate nüüd vaadata oma telefoni hiljutisi fotosid, meediat, märguandeid ja rakendusi</translation> @@ -10921,6 +10924,7 @@ <translation id="8702825062053163569">Teie seade <ph name="DEVICE_TYPE" /> lukustati.</translation> <translation id="8703346390800944767">Jäta reklaam vahele</translation> <translation id="8703372953981978786">See link ei toimi</translation> +<translation id="8703766890819308134">Kuva otsingu otseteed</translation> <translation id="8704662571571150811">Domeenid</translation> <translation id="8705331520020532516">Seerianumber</translation> <translation id="8705580154597116082">WiFi on telefoni kaudu saadaval</translation> @@ -11637,6 +11641,7 @@ <translation id="9182556968660520230">Ära luba saitidel kaitstud sisu esitada</translation> <translation id="9183302530794969518">Google'i dokumendid</translation> <translation id="918352324374649435">{COUNT,plural, =1{Rakendus}other{# rakendust}}</translation> +<translation id="9186743636216815027">{NUM_APPS,plural,offset:2 =1{Teie administraator saab rakenduse <ph name="APP0_NAME" /> abil jäädvustada teie ekraani. Teid ei teavitata, kui salvestamine algab.}=2{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> abil jäädvustada teie ekraani. Teid ei teavitata, kui salvestamine algab.}=3{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> ning veel 1 rakenduse abil salvestada teie ekraani. Teid ei teavitata, kui salvestamine algab.}other{Teie administraator saab rakenduste <ph name="APP0_NAME" /> ja <ph name="APP1_NAME" /> ning veel # rakenduse abil salvestada teie ekraani. Teid ei teavitata, kui salvestamine algab.}}</translation> <translation id="9186963452600581158">Logige sisse oma lapse Google'i kontoga</translation> <translation id="9187967020623675250">Klahvid ei ühti. Vajutage mis tahes klahvi, et <ph name="RESPONSE" />.</translation> <translation id="9192019773545828776">Esitatakse suulist tagasisidet, et saaksite seadet kasutada ilma ekraanikuva vaatamata. Braille'i teel tagasiside on saadaval ühendatud seadme puhul. ChromeVoxi sisse- ja väljalülitamiseks vajutage klahvikombinatsiooni Ctrl + Alt + Z. Navigeerimiseks kasutage klahvikombinatsiooni Otsing + vasaknool või paremnool. Valimiseks (aktiveerimiseks) kasutage klahvikombinatsiooni Otsing + tühik.</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index f042a95..5501080 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -8010,7 +8010,7 @@ <translation id="6670983860904543332">Les mises à jour automatiques vous offrent les toutes dernières fonctionnalités. Découvrez les principaux éléments des récentes mises à jour.</translation> <translation id="6671320560732140690">{COUNT,plural, =1{une adresse}one{# adresse}other{# adresses}}</translation> <translation id="6671497123040790595">Configurer la gestion par <ph name="MANAGER" /></translation> -<translation id="6672697278890207089">Saisissez votre mot de passe multiterme.</translation> +<translation id="6672697278890207089">Saisir votre phrase secrète</translation> <translation id="6672917148207387131">Ajouter <ph name="DOMAIN" /></translation> <translation id="6673353404516008367">Le mode navigation privée maintient <ph name="BEGIN_LINK" />votre navigation privée vis-à-vis des autres utilisateurs<ph name="END_LINK" /> de votre appareil</translation> <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 60f570c..c5ed50ad 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">પ્રીવ્યૂ લોડ થાય છે</translation> <translation id="1032605640136438169">કૃપા કરીને નવી શરતોને રિવ્યૂ કરો</translation> <translation id="103279545524624934">Android ઍપ્લિકેશનો લોંચ કરવા માટે ડિસ્ક સ્થાન ખાલી કરો.</translation> +<translation id="1033060461778467949">વિભાજિત વ્યૂમાં ટૅબને ખસેડો</translation> <translation id="1033780634303702874">તમારા સીરિયલ ઉપકરણોને ઍક્સેસ કરો</translation> <translation id="1034484273907870301">ટૅબ્લેટ મોડ માટે ટૅબ સ્ટ્રિપની થંબનેલ</translation> <translation id="1035289631433631911">કન્ટેન્ટ ટ્રાન્સફર ટૂલ</translation> @@ -1912,6 +1913,7 @@ <translation id="2312219318583366810">પેજનું URL</translation> <translation id="2314165183524574721">હાલના સેટિંગ અનુસાર કોઈ જોઈ શકતું નથી</translation> <translation id="2314774579020744484">પેજનો અનુવાદ કરતી વખતે ઉપયોગમાં લેવાયેલી ભાષા</translation> +<translation id="2316090909467242775">આ રિકવરીનો પાસવર્ડ અજમાવી જુઓ</translation> <translation id="2316129865977710310">નહીં, આભાર</translation> <translation id="2316433409811863464">ઍપ સ્ટ્રીમિંગ</translation> <translation id="2316709634732130529">સૂચવેલ પાસવર્ડનો ઉપયોગ કરો</translation> @@ -3537,6 +3539,7 @@ <translation id="3462413494201477527">એકાઉન્ટ સેટઅપ રદ કરીએ?</translation> <translation id="346298925039590474">આ મોબાઇલ નેટવર્ક, આ ડિવાઇસ પરના બધા વપરાશકર્તાઓ માટે ઉપલબ્ધ રહેશે</translation> <translation id="3464145797867108663">ઑફિસની પ્રોફાઇલ ઉમેરો</translation> +<translation id="34673353983913587">તમારો નવો પાસવર્ડ સાચવતા પહેલાં, સાઇટ માટે વધારાની ચકાસણી આવશ્યક છે</translation> <translation id="3468298837301810372">લેબલ</translation> <translation id="3468999815377931311">Android ફોન</translation> <translation id="3469583217479686109">પસંદગી ટૂલ</translation> @@ -3564,6 +3567,7 @@ <translation id="3487007233252413104">અનામી કાર્ય</translation> <translation id="3487649228420469005">સ્કૅન થઈ ગયું</translation> <translation id="3488199663160411179">નામ</translation> +<translation id="3489457144969823485">જુલાઈ 2025માં ChromeOS ડિવાઇસ પર Chrome ઍપ ચાલવાની બંધ થઈ ગઈ છે. કોઈ વૈકલ્પિક ઍપનો વિચાર કરો.</translation> <translation id="3490695139702884919">ડાઉનલોડ કરી રહ્યાં છીએ... <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">જો તમે તમારો પિન અથવા પાસવર્ડ ભૂલી જાઓ, તો સ્થાનિક ડેટા રિસ્ટોર કરી શકાય છે</translation> <translation id="3491616972057195633">બાઉન્સ કી</translation> @@ -4031,6 +4035,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> એક્સ્ટેન્શન</translation> <translation id="3794792524918736965">Windows Hello ચાલુ કરો</translation> <translation id="379509625511193653">બંધ</translation> +<translation id="3795624560191557077">તમે તાજેતરમાં બદલાવેલો પાસવર્ડ કોઈ સાર્વજનિક ડેટા ઉલ્લંઘનમાં જોવા મળ્યો છે. કોઈ સમસ્યા આવે ત્યારે Google Password Manager તમને સાઇન ઇન કરવામાં મદદ કરી શકે છે.</translation> <translation id="3796215473395753611">alt + ઉપરની ઍરો કી</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, વૉઇસનો પ્રીવ્યૂ કરવા માટે જમણી ઍરો કીનો ઉપયોગ કરો</translation> <translation id="3796648294839530037">મનપસંદ નેટવર્ક્સ:</translation> @@ -5849,6 +5854,7 @@ <translation id="5088534251099454936">RSA એન્ક્રિપ્શનવાળું PKCS #1 SHA-512</translation> <translation id="5090637338841444533">તમારા કૅમેરાનું સ્ટેટસ ટ્રૅક કરવાની મંજૂરી નથી</translation> <translation id="5091636240353511739">પિન બતાવો</translation> +<translation id="5093417502834168387">સાઇન ઇન કરવામાં સમસ્યા આવી? બીજી રીત અજમાવી જુઓ</translation> <translation id="5093477827231450397">તમે બ્લૉક કરેલી એવી સાઇટની સૂચિ કે જે અન્ય સાઇટને જાહેરાતો સૂચવે એવું તમે ઇચ્છતા નથી</translation> <translation id="5093569275467863761">બૅક/ફૉરવર્ડ કૅશ મેમરીમાં સ્ટોર કરેલી છૂપી સબફ્રેમ: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">તમે Files ઍપ અથવા અન્ય ઍપમાં, આ ઍપ વડે સપોર્ટેડ ફાઇલો ખોલી શકો છો અને તેમાં ફેરફાર કરી શકો છો. આ ઍપમાં ડિફૉલ્ટ તરીકે ખોલવામાં આવે તેવી ફાઇલોને નિયંત્રિત કરવા માટે, <ph name="BEGIN_LINK" />તમારા ડિવાઇસ પર ડિફૉલ્ટ ઍપને સેટ કરવાની રીત વિશે જાણો<ph name="END_LINK" />.</translation> @@ -6787,6 +6793,7 @@ <translation id="5785583009707899920">Chrome ફાઇલ માટેની ઉપયોગીતાઓ</translation> <translation id="5787146423283493983">કી એગ્રીમેન્ટ</translation> <translation id="5787420647064736989">ડિવાઇસનું નામ</translation> +<translation id="5787582109651427233"><ph name="BEGIN_LINK_LOYALTY_CARDS" />લૉયલ્ટિ કાર્ડ<ph name="END_LINK_LOYALTY_CARDS" /> કે Google Payની <ph name="BEGIN_LINK_PAYMENT_METHODS" />ચુકવણી પદ્ધતિઓ<ph name="END_LINK_PAYMENT_METHODS" /> ઉમેરવા કે તેને મેનેજ કરવા માટે Google Walletની મુલાકાત લો</translation> <translation id="5788367137662787332">માફ કરશો, ઉપકરણ <ph name="DEVICE_LABEL" /> પર ઓછામાં ઓછું એક પાર્ટિશન માઉન્ટ કરી શકાયું નથી.</translation> <translation id="5789581866075720267">આ ડિવાઇસ પર <ph name="BRAND" />માં પાસવર્ડ આયાત કરવા માટે, CSV ફાઇલ પસંદ કરો.</translation> <translation id="5790085346892983794">સફળતા</translation> @@ -7273,6 +7280,7 @@ <translation id="6131511889181741773">સ્પ્લૅટર</translation> <translation id="6132251717264923430">બટન પિન કર્યું</translation> <translation id="6132714462430777655">સ્કૂલમાં પ્રવેશની પ્રક્રિયા છોડી દઈએ?</translation> +<translation id="6134418895482326458">નવા ટૅબ પેજ પરનું ફૂટર છુપાવો</translation> <translation id="6134428719487602109">બધા વપરાશકર્તા એકાઉન્ટ કાઢી નાખો અને તમારી Chromebookને એકદમ નવીની જેમ રીસેટ કરો.</translation> <translation id="6135826623269483856">તમારા બધા ડિસ્પ્લે પર વિન્ડો મેનેજ કરવાની મંજૂરી નથી</translation> <translation id="6136114942382973861">ડાઉનલોડ બાર બંધ કરો</translation> @@ -7629,6 +7637,7 @@ <translation id="6388577073199278153">તમારું મોબાઇલ એકાઉન્ટ ઍક્સેસ કરી શકતા નથી</translation> <translation id="6390020764191254941">ટૅબને નવી વિંડોમાં ખસેડો</translation> <translation id="6390046581187330789">{COUNT,plural, =0{એકપણ નહીં}=1{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> અને વધુ 1 માટે}one{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> અને વધુ {COUNT} માટે}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> અને વધુ {COUNT} માટે}}</translation> +<translation id="6390533465682072118">રિકવરી</translation> <translation id="6391131092053186625">તમારા ડિવાઇસનું IMEI <ph name="IMEI_NUMBER" /> છે. સેવા સક્રિય કરવામાં સહાય માટે આ નંબરનો ઉપયોગ થઈ શકે છે.</translation> <translation id="6393156038355142111">સશક્ત પાસવર્ડ સૂચવો</translation> <translation id="6393550101331051049">અસુરક્ષિત કન્ટેન્ટ બતાવવાની મંજૂરી છે</translation> @@ -7713,6 +7722,7 @@ <translation id="6455521402703088376">બંધ • આ એક્સ્ટેન્શન તેના ડેવલપર દ્વારા અનપબ્લિશ કરવામાં આવ્યું હતું</translation> <translation id="6455894534188563617">&નવું ફોલ્ડર</translation> <translation id="645705751491738698">JavaScript ને અવરોધિત કરવાનું ચાલુ રાખો</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> લૉન્ચ કરી શકાતી નથી</translation> <translation id="6458606150257356946">તેમ છતાં પેસ્ટ કરો</translation> <translation id="6458701200018867744">અપલોડ નિષ્ફળ થયું (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">શોધવા માટે પસંદગીનો ઉપયોગ કરો</translation> @@ -8007,6 +8017,7 @@ <translation id="6667187897999649121">હાલમાં, તમે કુટુંબના સભ્યો સાથે માત્ર પાસવર્ડ શેર કરી શકશો. વધુમાં વધુ 6 સભ્ય ધરાવતું <ph name="BEGIN_LINK" />એક ફૅમિલી ગ્રૂપ બનાવો<ph name="END_LINK" /> અને સમગ્ર Google પર તમારી પ્રોડક્ટ અને સબ્સ્ક્રિપ્શનથી વધુ લાભ મેળવો.</translation> <translation id="666731172850799929"><ph name="APP_NAME" /> માં ખોલો</translation> <translation id="6669195257625975787">ડેટા પર તમે જોઈ રહ્યા હો તે સાઇટને સમાન જ પ્રક્રિયા કરવામાં આવે છે</translation> +<translation id="6669637573228217624">કોઈ ફાઇલ અપલોડ કરો</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> હવે ઉપલબ્ધ છે</translation> <translation id="6670767097276846646">કેટલાક એક્સ્ટેન્શન Chromeમાં શોધ એન્જિન ઉમેરી શકે છે</translation> <translation id="6670983860904543332">ઑટોમૅટિક અપડેટ થવાની સુવિધા, તમને નવી સુવિધાઓનો ઍક્સેસ આપે છે. નવી અપડેટની હાઇલાઇટ વિશે શોધખોળ કરો.</translation> @@ -8146,6 +8157,7 @@ <translation id="6771503742377376720">એ એક પ્રમાણન અધિકારી છે</translation> <translation id="6772974422346500939">ખોલો અને ફેરફાર કરો</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">સાઇટને એક-વખત વપરાશના પાસવર્ડની જરૂર છે</translation> <translation id="6774710250118040929">નવો પાસવર્ડ ઉમેરો</translation> <translation id="6775163072363532304">ઉપલબ્ધ ડિવાઇસ અહીં દેખાશે.</translation> <translation id="6775992990195573904">તમારા ટૅબ સૉર્ટ કરાવો</translation> @@ -9265,6 +9277,7 @@ <translation id="7566118625369982896">Play ઍપ લિંક મેનેજ કરો</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">કીનું કૉમ્બિનેશન બનાવો</translation> +<translation id="7567100268516475532">વિભાજિત વ્યૂમાં ટૅબને ખસેડો</translation> <translation id="7568014768212280234">તમારું ટૅબનું ગ્રૂપ ભરાઈ ગયું છે, નવા સભ્યો લિંક વડે જોડાઈ શકતા નથી</translation> <translation id="7568759527730933493">DNS (ડોમેન નેમ સિસ્ટમ)માં કોઈ સાઇટનું IP ઍડ્રેસ શોધવા માટે, સુરક્ષિત કનેક્શનનો ઉપયોગ કરો. આ <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" /> પર મેનેજ કરેલા સેવા પ્રદાતાનો ઉપયોગ કરે છે. તમારા ઍડમિનિસ્ટ્રેટર દ્વારા ગોઠવવામાં આવેલા અમુક ડોમેન માટે સુરક્ષિત કનેક્શનનો ઉપયોગ કરવામાં આવતો નથી.</translation> <translation id="756876171895853918">અવતારને કસ્ટમાઇઝ કરો</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 7c4c9693..25963efe 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">プレビューを読み込んでいます</translation> <translation id="1032605640136438169">新しい利用規約をご確認ください</translation> <translation id="103279545524624934">Android アプリを起動できるようにディスク領域を解放します。</translation> +<translation id="1033060461778467949">タブを分割表示に切り替え</translation> <translation id="1033780634303702874">シリアル デバイスへのアクセス</translation> <translation id="1034484273907870301">タブレット モードのサムネイル タブバー</translation> <translation id="1035289631433631911">コンテンツ移行ツール</translation> @@ -1909,6 +1910,7 @@ <translation id="2312219318583366810">ページの URL</translation> <translation id="2314165183524574721">現在の公開設定は非表示です</translation> <translation id="2314774579020744484">この言語を使用してページを翻訳します</translation> +<translation id="2316090909467242775">この再設定パスワードをお試しください</translation> <translation id="2316129865977710310">今はしない</translation> <translation id="2316433409811863464">アプリ ストリーミング</translation> <translation id="2316709634732130529">推奨されたパスワードを使用</translation> @@ -3531,6 +3533,7 @@ <translation id="3462413494201477527">アカウントの設定をキャンセルしますか?</translation> <translation id="346298925039590474">このデバイスのすべてのユーザーがこのモバイル ネットワークを使用できます</translation> <translation id="3464145797867108663">仕事用プロファイルを追加</translation> +<translation id="34673353983913587">新しいパスワードを保存する前に、サイトで追加認証を行う必要があります</translation> <translation id="3468298837301810372">ラベル</translation> <translation id="3468999815377931311">Android スマートフォン</translation> <translation id="3469583217479686109">選択ツール</translation> @@ -3558,6 +3561,7 @@ <translation id="3487007233252413104">無名関数</translation> <translation id="3487649228420469005">スキャンが完了しました</translation> <translation id="3488199663160411179">名前</translation> +<translation id="3489457144969823485">Chrome アプリは 2025 年 7 月以降 ChromeOS デバイスで使用できなくなりました。別のアプリをご検討ください。</translation> <translation id="3490695139702884919">ダウンロードしています... <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">PIN やパスワードを忘れてもローカルデータを復元できます</translation> <translation id="3491616972057195633">バウンスキー</translation> @@ -4024,6 +4028,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> 件の拡張機能</translation> <translation id="3794792524918736965">Windows Hello をオンにする</translation> <translation id="379509625511193653">オフ</translation> +<translation id="3795624560191557077">一般に報告されているデータ侵害で検出されたパスワードを最近変更しました。問題が発生した場合は、Google パスワード マネージャーを使用してログインできます。</translation> <translation id="3796215473395753611">Alt+上矢印</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />、音声をプレビューするには右矢印キーを使用します</translation> <translation id="3796648294839530037">お気に入りのネットワーク:</translation> @@ -5839,6 +5844,7 @@ <translation id="5088534251099454936">PKCS #1 SHA-512 with RSA 暗号化</translation> <translation id="5090637338841444533">カメラ位置の追跡を許可しないサイト</translation> <translation id="5091636240353511739">PIN を表示</translation> +<translation id="5093417502834168387">ログインできない場合は、別の方法を試すことができます</translation> <translation id="5093477827231450397">他のサイトに広告を提案しないようブロックしたウェブサイトのリスト</translation> <translation id="5093569275467863761">バックフォワード キャッシュのシークレット サブフレーム: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">ファイルアプリからこのアプリまたは他のアプリで、サポートされているファイルを開いて編集できます。デフォルトでこのアプリを使用して開くファイルを管理するには、<ph name="BEGIN_LINK" />デバイスでデフォルトのアプリを設定する方法<ph name="END_LINK" />をご確認ください。</translation> @@ -6772,6 +6778,7 @@ <translation id="5785583009707899920">Chrome ファイル ユーティリティ</translation> <translation id="5787146423283493983">キー合意</translation> <translation id="5787420647064736989">デバイス名</translation> +<translation id="5787582109651427233"><ph name="BEGIN_LINK_LOYALTY_CARDS" />ポイントカード<ph name="END_LINK_LOYALTY_CARDS" />または Google Pay の<ph name="BEGIN_LINK_PAYMENT_METHODS" />お支払い方法<ph name="END_LINK_PAYMENT_METHODS" />を追加または管理するには、Google ウォレットにアクセスしてください</translation> <translation id="5788367137662787332">デバイス <ph name="DEVICE_LABEL" /> の少なくとも 1 つのパーティションがマウントできませんでした。</translation> <translation id="5789581866075720267">このデバイスの <ph name="BRAND" /> にパスワードをインポートするには、CSV ファイルを選択してください。</translation> <translation id="5790085346892983794">完了</translation> @@ -7257,6 +7264,7 @@ <translation id="6131511889181741773">スプラッター</translation> <translation id="6132251717264923430">ボタンを固定しました</translation> <translation id="6132714462430777655">教育機関の登録をスキップしますか?</translation> +<translation id="6134418895482326458">新しいタブページのフッターを非表示にする</translation> <translation id="6134428719487602109">すべてのユーザー アカウントを削除し、Chromebook を初期状態にリセットします。</translation> <translation id="6135826623269483856">全ディスプレイのウィンドウ管理が許可されていません</translation> <translation id="6136114942382973861">ダウンロード バーを閉じる</translation> @@ -7613,6 +7621,7 @@ <translation id="6388577073199278153">モバイル アカウントにアクセスできません</translation> <translation id="6390020764191254941">タブを新しいウィンドウに移動</translation> <translation id="6390046581187330789">{COUNT,plural, =0{なし}=1{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" />、他 1 個}other{<ph name="EXAMPLE_DOMAIN_1" />、<ph name="EXAMPLE_DOMAIN_2" />、他 {COUNT} 個}}</translation> +<translation id="6390533465682072118">再設定</translation> <translation id="6391131092053186625">デバイスの IMEI は <ph name="IMEI_NUMBER" /> です。この番号を使用して、サービスを有効にできます。</translation> <translation id="6393156038355142111">安全なパスワードを自動生成</translation> <translation id="6393550101331051049">安全でないコンテンツの表示を許可するサイト</translation> @@ -7697,6 +7706,7 @@ <translation id="6455521402703088376">オフ • この拡張機能はデベロッパーにより非公開にされました</translation> <translation id="6455894534188563617">新しいフォルダ(&N)</translation> <translation id="645705751491738698">JavaScript を引き続きブロックする</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> を起動できません</translation> <translation id="6458606150257356946">このまま貼り付け</translation> <translation id="6458701200018867744">アップロードできませんでした(<ph name="WEBRTC_LOG_UPLOAD_TIME" />)。</translation> <translation id="6459488832681039634">選択部分を検索に使用</translation> @@ -7988,6 +7998,7 @@ <translation id="6667187897999649121">現在のところ、パスワードはファミリー メンバーとのみ共有できます。最大 6 人のメンバーを招待して<ph name="BEGIN_LINK" />ファミリー グループを作成<ph name="END_LINK" />すると、Google のさまざまなサービスやサブスクリプションをさらに活用できます。</translation> <translation id="666731172850799929"><ph name="APP_NAME" />で開く</translation> <translation id="6669195257625975787">データは表示しているサイトと同じように扱われます</translation> +<translation id="6669637573228217624">ファイルをアップロード</translation> <translation id="6670142487971298264">「<ph name="APP_NAME" />」を利用できます</translation> <translation id="6670767097276846646">拡張機能によって Chrome に検索エンジンが追加される場合があります</translation> <translation id="6670983860904543332">自動更新により最新機能が提供されます。最近の主な更新内容をご確認ください。</translation> @@ -8127,6 +8138,7 @@ <translation id="6771503742377376720">認証局である</translation> <translation id="6772974422346500939">開いて編集</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">このサイトではワンタイム パスワードが必要です</translation> <translation id="6774710250118040929">新しいパスワードを追加</translation> <translation id="6775163072363532304">利用可能なデバイスはここに表示されます。</translation> <translation id="6775992990195573904">タブを分類します</translation> @@ -9245,6 +9257,7 @@ <translation id="7566118625369982896">Play アプリのリンクを管理する</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">キーの組み合わせを作成</translation> +<translation id="7567100268516475532">タブを分割表示に切り替え</translation> <translation id="7568014768212280234">タブグループのユーザーが上限に達したため、新しいユーザーはリンクを使用して参加できません</translation> <translation id="7568759527730933493">安全な接続を使用して、DNS(ドメイン ネーム システム)でサイトの IP アドレスを検索します。これには、<ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" /> のマネージド サービス プロバイダを使用します安全な接続は、管理者が構成した一部のドメインでは使用されません。</translation> <translation id="756876171895853918">アバターをカスタマイズ</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index 5995ef4f..ef4f0b25 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">წინასწარი ხედის ჩატვირთვა</translation> <translation id="1032605640136438169">გთხოვთ, გადახედოთ ახალ პირობებს</translation> <translation id="103279545524624934">Android აპების გასაშვებად, გამოათავისუფლეთ მეხსიერება დისკზე.</translation> +<translation id="1033060461778467949">ჩანართის გადატანა გაყოფის ხედში</translation> <translation id="1033780634303702874">წვდომა თქვენს სერიულ მოწყობილობებზე</translation> <translation id="1034484273907870301">ჩანართების მინიატურული ზოლი ტაბლეტის რეჟიმისთვის</translation> <translation id="1035289631433631911">კონტენტის ტრანსფერის ხელსაწყო</translation> @@ -1914,6 +1915,7 @@ <translation id="2312219318583366810">გვერდის URL</translation> <translation id="2314165183524574721">ხილვადობის პარამეტრად ამჟამად მითითებულია დამალული</translation> <translation id="2314774579020744484">გვერდების თარგმნისას გამოყენებული ენა</translation> +<translation id="2316090909467242775">ცადეთ ეს სათადარიგო პაროლი</translation> <translation id="2316129865977710310">არა, გმადლობთ</translation> <translation id="2316433409811863464">აპის სტრიმინგი</translation> <translation id="2316709634732130529">შემოთავაზებული პაროლის გამოყენება</translation> @@ -3539,6 +3541,7 @@ <translation id="3462413494201477527">გსურთ ანგარიშის დაყენების გაუქმება?</translation> <translation id="346298925039590474">ეს მობილური ქსელი ამ მოწყობილობის ყველა მომხმარებლისთვის ხელმისაწვდომი იქნება</translation> <translation id="3464145797867108663">სამსახურის პროფილის დამატება</translation> +<translation id="34673353983913587">თქვენი ახალი პაროლის შენახვამდე საიტს დამატებით შემოწმება სჭირდება</translation> <translation id="3468298837301810372">ლეიბლი</translation> <translation id="3468999815377931311">Android ტელეფონი</translation> <translation id="3469583217479686109">ამომრჩევი ხელსაწყო</translation> @@ -3566,6 +3569,7 @@ <translation id="3487007233252413104">ანონიმური ფუნქცია</translation> <translation id="3487649228420469005">სკანირება დასრულებულია</translation> <translation id="3488199663160411179">სახელი</translation> +<translation id="3489457144969823485">Chrome აპებმა შეწყვიტა მუშაობა ChromeOS მოწყობილობებში 2025 წლის ივლისში. იფიქრეთ სხვა აპის გამოყენებაზე.</translation> <translation id="3490695139702884919">მიმდინარეობს ჩამოტვირთვა… <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">PIN-კოდის ან პაროლის დავიწყების შემთხვევაში შესაძლებელი იქნება ადგილობრივი მონაცემების აღდგენა</translation> <translation id="3491616972057195633">კლავიშების ასხლეტა</translation> @@ -4033,6 +4037,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> გაფართოება</translation> <translation id="3794792524918736965">ჩართეთ Windows Hello</translation> <translation id="379509625511193653">გამორთული</translation> +<translation id="3795624560191557077">თქვენ მიერ ახლახან შეცვლილი პაროლი აღმოჩნდა მონაცემთა საჯარო დარღვევაში. პრობლემის შემთხვევაში Google პაროლების მმართველი დაგეხმარებათ შესვლაში.</translation> <translation id="3796215473395753611">alt + ზემოთ მიმართული ისარი</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, მარჯვნივ მიმართული ისრიანი კლავიშის გამოყენებით წინასწარ შეამოწმეთ ხმა</translation> <translation id="3796648294839530037">რჩეული ქსელები:</translation> @@ -5851,6 +5856,7 @@ <translation id="5088534251099454936">PKCS #1 SHA-512-ით RSA დაშიფვრა</translation> <translation id="5090637338841444533">თქვენი კამერის პოზიციისთვის თვალის მიდევნება დაუშვებელია</translation> <translation id="5091636240353511739">PIN-კოდის ჩვენება</translation> +<translation id="5093417502834168387">პრობლემა გაქვთ შესვლისას? სხვა მეთოდით ცდა</translation> <translation id="5093477827231450397">თქვენ მიერ დაბლოკილი იმ საიტების სია, რომლებმაც არ გსურთ, სხვა საიტებს უკარნახოს რეკლამა</translation> <translation id="5093569275467863761">ქეშირებული ქვეფრეიმი უკან-წინ გადასვლის შესაძლებლობით: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">ამ აპის მეშვეობით შეგიძლიათ გახსნათ და დაარედაქტიროთ მხარდაჭერილი ფაილები ფაილების აპიდან ან სხვა აპებიდან. იმისთვის, რომ გააკონტროლოთ, ნაგულისხმევად რომელმა ფაილებმა გახსნას ეს აპი, <ph name="BEGIN_LINK" />შეიტყვეთ, როგორ დააყენოთ ნაგულისხმევი აპები თქვენს მოწყობილობაზე<ph name="END_LINK" />.</translation> @@ -6788,6 +6794,7 @@ <translation id="5785583009707899920">Chrome ფაილების უტილიტები</translation> <translation id="5787146423283493983">ძირითადი შეთანხმება</translation> <translation id="5787420647064736989">მოწყობილობის სახელი</translation> +<translation id="5787582109651427233">ეწვით Google საფულეს, რომ დაამატოთ ან მართოთ <ph name="BEGIN_LINK_LOYALTY_CARDS" />ერთგული კლიენტის ბარათები<ph name="END_LINK_LOYALTY_CARDS" /> ან Google Pay-ს <ph name="BEGIN_LINK_PAYMENT_METHODS" />გადახდის მეთოდები<ph name="END_LINK_PAYMENT_METHODS" /></translation> <translation id="5788367137662787332">სამწუხაროდ, სულ მცირე, ერთი დანაყოფის მიერთება ვერ მოხერხდა მოწყობილობაში <ph name="DEVICE_LABEL" />.</translation> <translation id="5789581866075720267">ამ მოწყობილობაზე პაროლების <ph name="BRAND" />-ში იმპორტირებისთვის აირჩიეთ CSV-ფაილი.</translation> <translation id="5790085346892983794">წარმატება</translation> @@ -7273,6 +7280,7 @@ <translation id="6131511889181741773">Splatter</translation> <translation id="6132251717264923430">ღილაკი ჩამაგრებულია</translation> <translation id="6132714462430777655">გსურთ, გამოტოვოთ სასწავლებელში რეგისტრაცია?</translation> +<translation id="6134418895482326458">ქვედა კოლონტიტულის დამალვა ახალი ჩანართის გვერდზე</translation> <translation id="6134428719487602109">წაშალეთ მომხმარებელთა ყველა ანგარიში და გადააყენეთ Chromebook, ის ახალივით რომ გახდეს.</translation> <translation id="6135826623269483856">აკრძალული აქვს ფანჯრების მართვა თქვენს ყველა ეკრანზე</translation> <translation id="6136114942382973861">ჩამოტვირთვების ზოლის დახურვა</translation> @@ -7629,6 +7637,7 @@ <translation id="6388577073199278153">თქვენს მობილურ ანგარიშზე წვდომას ვერ ხერხდება</translation> <translation id="6390020764191254941">ჩანართის ახალ ფანჯარაში გადატანა</translation> <translation id="6390046581187330789">{COUNT,plural, =0{არცერთი}=1{<ph name="EXAMPLE_DOMAIN_1" />-ის, <ph name="EXAMPLE_DOMAIN_2" />-ისა და 1 სხვისთვის}other{<ph name="EXAMPLE_DOMAIN_1" />-ის, <ph name="EXAMPLE_DOMAIN_2" />-ისა და {COUNT} სხვისთვის}}</translation> +<translation id="6390533465682072118">აღდგენა</translation> <translation id="6391131092053186625">თქვენი მოწყობილობის IMEI არის <ph name="IMEI_NUMBER" />. აღნიშნული ნომერი დაგეხმარებათ სერვისის გააქტიურებაში.</translation> <translation id="6393156038355142111">ძლიერი პაროლის შემოთავაზება</translation> <translation id="6393550101331051049">დაუცველი კონტენტის ჩვენება დაშვებულია</translation> @@ -7713,6 +7722,7 @@ <translation id="6455521402703088376">გამორთული • ამ გაფართოების გამოქვეყნება გაუქმდა მისი დეველოპერის მიერ</translation> <translation id="6455894534188563617">&ახალი საქაღალდე</translation> <translation id="645705751491738698">JavaScript-ის დაბლოკვის გაგრძელება</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> ვერ გაეშვება</translation> <translation id="6458606150257356946">მაინც ჩასმა</translation> <translation id="6458701200018867744">ატვირთვა ვერ მოხერხდა (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">მონიშნულის ძებნისთვის გამოყენება</translation> @@ -8005,6 +8015,7 @@ <translation id="6667187897999649121">პაროლების გაზიარება ამ ეტაპზე ოჯახის წევრებისთვის შეგიძლიათ. <ph name="BEGIN_LINK" />შექმენით ოჯახის ჯგუფი<ph name="END_LINK" />, რომელიც 6-მდე წევრისგან შედგება, და ისარგებლეთ პროდუქტებისა თუ გამოწერების მეტი შესაძლებლობით Google-ის ფარგლებში.</translation> <translation id="666731172850799929">გახსნა <ph name="APP_NAME" />-ში</translation> <translation id="6669195257625975787">მონაცემებსა და იმ საიტზე, რომელსაც ათვალიერებთ, ერთი და იგივე პარამეტრი ვრცელდება.</translation> +<translation id="6669637573228217624">ატვირთეთ ფაილი</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> ახლა ხელმისაწვდომია</translation> <translation id="6670767097276846646">ზოგიერთ გაფართოებას შეუძლია საძიებო სისტემების დამატება Chrome-ში</translation> <translation id="6670983860904543332">ავტომატური განახლებები ნიშნავს, რომ ყოველთვის უახლესი ფუნქციები გექნებათ. გაეცანით მნიშვნელოვან სიახლეებს ბოლოდროინდელ განახლებებში.</translation> @@ -8144,6 +8155,7 @@ <translation id="6771503742377376720">არის სერტიფიცირების ორგანიზაცია</translation> <translation id="6772974422346500939">გახსნა და რედაქტირება</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">ამ საიტს სჭირდება ერთჯერადი პაროლი</translation> <translation id="6774710250118040929">დაამატეთ ახალი პაროლი</translation> <translation id="6775163072363532304">აქ გამოჩნდება ხელმისაწვდომი მოწყობილობები.</translation> <translation id="6775992990195573904">დაალაგეთ თქვენი ჩანართები</translation> @@ -9261,6 +9273,7 @@ <translation id="7566118625369982896">Google Play აპების ბმულების მართვა</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">კლავიშთა კომბინაციის შექმნა</translation> +<translation id="7567100268516475532">ჩანართის გადატანა გაყოფის ხედში</translation> <translation id="7568014768212280234">თქვენი ჩანართების ჯგუფი შევსებულია და ახალი წევრები ბმულის მეშვეობით გაწევრიანებას ვერ შეძლებენ</translation> <translation id="7568759527730933493">უსაფრთხო კავშირის გამოყენება საიტის IP-მისამართის მოსაძებნად DNS-ში (დომენური სახელის სისტემაში). აღნიშნული იყენებს სერვისის მართულ პროვაიდერს <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" />-ზე. უსაფრთხო კავშირები არ გამოიყენება თქვენი ადმინისტრატორის მიერ კონფიგურირებული ზოგიერთი დომენისთვის.</translation> <translation id="756876171895853918">ავატარის მორგება</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index cf7dfd10..ca070c8 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">Алдын ала көріністі жүктеу</translation> <translation id="1032605640136438169">Жаңа шарттарды қарап шығыңыз.</translation> <translation id="103279545524624934">Android қолданбаларын орнату үшін дискіде орын босатыңыз.</translation> +<translation id="1033060461778467949">Қойындыны бөлінген көрініске жылжыту</translation> <translation id="1033780634303702874">Сериялық құрылғыларыңызға кіру</translation> <translation id="1034484273907870301">Планшет режиміндегі нобай қойындылары жолағы</translation> <translation id="1035289631433631911">Контент тасымалы құралы</translation> @@ -1911,6 +1912,7 @@ <translation id="2312219318583366810">Беттің URL сілтемесі</translation> <translation id="2314165183524574721">Ағымдағы көрсетілу параметрі жасырылған.</translation> <translation id="2314774579020744484">Беттерді аудару кезінде қолданылған тіл</translation> +<translation id="2316090909467242775">Осы қалпына келтіру құпия сөзін пайдаланып көріңіз.</translation> <translation id="2316129865977710310">Жоқ, рақмет</translation> <translation id="2316433409811863464">Қолданбаны трансляциялау</translation> <translation id="2316709634732130529">Ұсынылған құпия сөзді қолдану</translation> @@ -3534,6 +3536,7 @@ <translation id="3462413494201477527">Аккаунтты орнатудан бас тарту қажет пе?</translation> <translation id="346298925039590474">Бұл мобильдік желі осы құрылғыдағы барлық пайдаланушыға қолжетімді болады.</translation> <translation id="3464145797867108663">Жұмыс профилін қосу</translation> +<translation id="34673353983913587">Жаңа құпия сөзді сақтау үшін сайтта жеке басыңызды қосымша растауыңыз қажет.</translation> <translation id="3468298837301810372">Белгі</translation> <translation id="3468999815377931311">Android телефоны</translation> <translation id="3469583217479686109">Таңдау құралы</translation> @@ -3561,6 +3564,7 @@ <translation id="3487007233252413104">анонимді функция</translation> <translation id="3487649228420469005">Сканерлеу аяқталды</translation> <translation id="3488199663160411179">аты</translation> +<translation id="3489457144969823485">ChromeOS құрылғыларындағы Chrome қолданбаларының жұмысы 2025 жылдың шілдесінде тоқтады. Басқа қолданбаны пайдаланыңыз.</translation> <translation id="3490695139702884919">Жүктеп алынып жатыр… <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">PIN кодыңызды немесе құпия сөзіңізді ұмытып қалсаңыз, жергілікті деректерді қалпына келтіруге болады.</translation> <translation id="3491616972057195633">Пернелердің қайта басылуын елемеу</translation> @@ -4028,6 +4032,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> кеңейтім</translation> <translation id="3794792524918736965">Windows Hello-ды қосу</translation> <translation id="379509625511193653">Өшірулі</translation> +<translation id="3795624560191557077">Баршаға ашық қолды болған деректерден табылған құпия сөзіңізді жақында өзгерттіңіз. Қиындық туындаса, Google Password Manager аккаунтқа кіруге көмектесе алады.</translation> <translation id="3796215473395753611">alt + жоғары бағыт пернесі</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />. Дауысты алдын ала тыңдап көру үшін оң бағыт пернесін басыңыз</translation> <translation id="3796648294839530037">Таңдаулы желілер:</translation> @@ -5845,6 +5850,7 @@ <translation id="5088534251099454936">RSA шифрлауына ие PKCS #1 SHA-512</translation> <translation id="5090637338841444533">Камераңыздың орнын қадағалауға рұқсаты жоқтар</translation> <translation id="5091636240353511739">PIN кодын көрсету</translation> +<translation id="5093417502834168387">Аккаунтқа кіру кезінде қиындық туындады ма? Басқа жолмен кіріп көріңіз.</translation> <translation id="5093477827231450397">Басқа сайттарға жарнамалар ұсынуын қаламайтын, сіз бөгеген сайттар тізімі</translation> <translation id="5093569275467863761">Алға-артқа өту кэшінде сақталған инкогнито ішкі жақтауы: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Қолдау көрсетілетін файлдарды осы қолданба арқылы Files қолданбасынан не басқа қолданбалар арқылы ашып, өңдей аласыз. Осы қолданбада қандай файлдардың әдепкісінше ашылатынын басқару үшін <ph name="BEGIN_LINK" />құрылғыңызда әдепкі қолданбалар орнату туралы толығырақ біліңіз<ph name="END_LINK" />.</translation> @@ -6779,6 +6785,7 @@ <translation id="5785583009707899920">Chrome файл утилиталары</translation> <translation id="5787146423283493983">Негізгі келісім</translation> <translation id="5787420647064736989">Құрылғы атауы</translation> +<translation id="5787582109651427233"><ph name="BEGIN_LINK_LOYALTY_CARDS" />Тұрақты клиент карталарын<ph name="END_LINK_LOYALTY_CARDS" /> немесе Google Pay-дің <ph name="BEGIN_LINK_PAYMENT_METHODS" />төлеу әдістерін<ph name="END_LINK_PAYMENT_METHODS" /> қосу не реттеу үшін Google Wallet-ке кіріңіз.</translation> <translation id="5788367137662787332">Кешіріңіз, <ph name="DEVICE_LABEL" /> құрылғыңыздағы кемінде бір бөлімді орнату мүмкін емес.</translation> <translation id="5789581866075720267">Осы құрылғыда құпия сөздерді <ph name="BRAND" /> қолданбасына импорттау үшін CSV файлын таңдаңыз.</translation> <translation id="5790085346892983794">Орындалды</translation> @@ -7263,6 +7270,7 @@ <translation id="6131511889181741773">Шашыранды</translation> <translation id="6132251717264923430">Түйме бекітілді.</translation> <translation id="6132714462430777655">Мектепке тіркелуді өткізіп жіберу керек пе?</translation> +<translation id="6134418895482326458">"Жаңа қойынды" бетіндегі төменгі деректемені жасыру</translation> <translation id="6134428719487602109">Барлық пайдаланушы аккаунтын өшіріп, Chromebook құрылғыңызды жаңадай қылып бастапқы күйіне орнатыңыз.</translation> <translation id="6135826623269483856">Барлық дисплейде терезелерді басқаруға рұқсат берілмейді.</translation> <translation id="6136114942382973861">Жүктеп алынғандар жолағын жабу</translation> @@ -7619,6 +7627,7 @@ <translation id="6388577073199278153">Мобильдік құрылғыдағы аккаунтқа кіру мүмкін емес</translation> <translation id="6390020764191254941">Қойындыны жаңа терезеден ашу</translation> <translation id="6390046581187330789">{COUNT,plural, =0{Жоқ}=1{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> және тағы 1 доменге арналған}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> және {COUNT} доменге арналған}}</translation> +<translation id="6390533465682072118">Қалпына келтіру</translation> <translation id="6391131092053186625">Құрылғыңыздың IMEI нөмірі: <ph name="IMEI_NUMBER" />. Қызметті белсендіруге көмектесу үшін осы нөмірді пайдалануға болады.</translation> <translation id="6393156038355142111">Күрделі құпия сөз ұсыну</translation> <translation id="6393550101331051049">Қорғалмаған контент көрсетуге рұқсаты барлар</translation> @@ -7703,6 +7712,7 @@ <translation id="6455521402703088376">Өшірулі • Бұл кеңейтімді әзірлеушісі жариялаудан бас тартқан</translation> <translation id="6455894534188563617">&Жаңа қалта</translation> <translation id="645705751491738698">JavaScript қосуға салынған тыйымды сақтау</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> іске қосылмады</translation> <translation id="6458606150257356946">Бәрібір қою</translation> <translation id="6458701200018867744">Жүктеп салынбады (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Табу үшін таңдауды пайдалану</translation> @@ -7995,6 +8005,7 @@ <translation id="6667187897999649121">Әзірге құпия сөздерді тек отбасы мүшелерімен бөлісе аласыз. Ең көбі 6 мүшелі <ph name="BEGIN_LINK" />отбасылық топты жасап<ph name="END_LINK" />, Google-дағы өнімдеріңіз бен жазылымдарыңыздан көбірек алыңыз.</translation> <translation id="666731172850799929"><ph name="APP_NAME" /> арқылы ашу</translation> <translation id="6669195257625975787">Деректерге қаралып жатқан сайт параметрлері қолданылады.</translation> +<translation id="6669637573228217624">Файл жүктеп салу</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> қазір қолжетімді.</translation> <translation id="6670767097276846646">Кейбір кеңейтімдер Chrome-ға іздеу жүйелерін қоса алады.</translation> <translation id="6670983860904543332">Автоматты жаңартулар сізге соңғы мүмкіндіктерді қамтамасыз етеді. Соңғы жаңартулардың негізгі мәліметтерін зерттеңіз.</translation> @@ -8134,6 +8145,7 @@ <translation id="6771503742377376720">Сертификат беретін орган</translation> <translation id="6772974422346500939">Ашу және өңдеу</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">Сайтқа бір реттік құпия сөз қажет</translation> <translation id="6774710250118040929">Жаңа құпия сөз қосу</translation> <translation id="6775163072363532304">Қолжетімді құрылғылар осы жерде пайда болады.</translation> <translation id="6775992990195573904">Қойындыларды сұрыптауға болады.</translation> @@ -9251,6 +9263,7 @@ <translation id="7566118625369982896">Play дүкеніндегі қолданба сілтемелерін басқару</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">Пернелер тіркесімін жасау</translation> +<translation id="7567100268516475532">Қойындыны бөлінген көрініске жылжыту</translation> <translation id="7568014768212280234">Қойындылар тобында орын жоқ. Жаңа мүшелер сілтемемен қосыла алмайды.</translation> <translation id="7568759527730933493">DNS жүйесінде сайттың IP мекенжайын қарау үшін қауіпсіз байланысты пайдаланыңыз. Бұл үшін <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" /> серверіндегі басқарылатын қызмет көрсетуші пайдаланылады. Қауіпсіз байланыстар әкімші конфигурациялаған кейбір домендер үшін пайдаланылмайды.</translation> <translation id="756876171895853918">Аватарды реттеу</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 162ebf1..d90a0f17 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -4919,6 +4919,7 @@ <translation id="4406883609789734330">អក្សររត់ក្នុងពេលជាក់ស្ដែង</translation> <translation id="4408599188496843485">ជំនួយ</translation> <translation id="4409271659088619928">ម៉ាស៊ីនស្វែងរករបស់អ្នកគឺ <ph name="DSE" />។ មើលការណែនាំរបស់ម៉ាស៊ីនស្វែងរក ដើម្បីដឹងអំពីរបៀបលុបប្រវត្តិស្វែងរករបស់អ្នក ប្រសិនបើអាច។</translation> +<translation id="4409340274650920844">{NUM_APPS,plural,offset:2 =1{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />។ អ្នកនឹងទទួលបានការជូនដំណឹង នៅពេលការថតចាប់ផ្ដើម។}=2{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" /> និង <ph name="APP1_NAME" />។ អ្នកនឹងទទួលបានការជូនដំណឹង នៅពេលការថតចាប់ផ្ដើម។}=3{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> និងកម្មវិធី 1 ផ្សេងទៀត។ អ្នកនឹងទទួលបានការជូនដំណឹង នៅពេលការថតចាប់ផ្ដើម។}other{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> និងកម្មវិធី # ផ្សេងទៀត។ អ្នកនឹងទទួលបានការជូនដំណឹង នៅពេលការថតចាប់ផ្ដើម។}}</translation> <translation id="4409697491990005945">ចន្លោះគែម</translation> <translation id="4409779593816003679">ពាក្យសម្ងាត់ និង&ការបំពេញស្វ័យប្រវត្តិ</translation> <translation id="4410545552906060960">ប្រើលេខ (កូដ PIN) ជំនួសឱ្យពាក្យសម្ងាត់ ដើម្បីដោះសោឧបករណ៍របស់អ្នក។ ដើម្បីរៀបចំកូដ PIN របស់អ្នកនៅពេលក្រោយ សូមចូលទៅកាន់ការកំណត់។</translation> @@ -8246,6 +8247,7 @@ <translation id="6811792477922751991">ប្រើគ្រាប់ចុចកម្មវិធីចាប់ផ្ដើម ដើម្បីប្ដូរសកម្មភាពគ្រាប់ចុច Function</translation> <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> មិនអាចដំណើរការជាគោលទេ។</translation> <translation id="6812841287760418429">រក្សាការប្តូរ</translation> +<translation id="681360534161436378">{NUM_APPS,plural,offset:2 =1{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />។}=2{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" /> និង <ph name="APP1_NAME" />។}=3{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> និងកម្មវិធី 1 ផ្សេងទៀត។}other{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> និងកម្មវិធី # ផ្សេងទៀត។}}</translation> <translation id="6813907279658683733">អេក្រង់ទាំងមូល</translation> <translation id="6814754908910736855">ព័ត៌មានកម្មវិធីភ្ញៀវ WiFi ផ្ទាល់៖</translation> <translation id="6815376457351236663">មិនអីទេ បើកចុះ</translation> @@ -10427,6 +10429,7 @@ <translation id="8339288417038613756">ទំហំបង្ហាញ និងអក្សរ</translation> <translation id="833986336429795709">ដើម្បីបើកតំណនេះ សូមជ្រើសរើសកម្មវិធីមួយ</translation> <translation id="8340547030807793004">សកម្មភាពច្រើនទៀតសម្រាប់ <ph name="DEVICE" /></translation> +<translation id="8341804784147620576">បង្ហាញផ្លូវកាត់ការស្វែងរក</translation> <translation id="8342221978608739536">មិនបានព្យាយាមទេ</translation> <translation id="8342861492835240085">ជ្រើសរើសបណ្ដុំ</translation> <translation id="8345848587667658367">ឥឡូវនេះ អ្នកអាចមើលរូបថត មេឌៀ ការជូនដំណឹង និងកម្មវិធីថ្មីៗលើទូរសព្ទរបស់អ្នកបានហើយ</translation> @@ -10939,6 +10942,7 @@ <translation id="8702825062053163569"><ph name="DEVICE_TYPE" /> របស់អ្នកត្រូវបានចាក់សោ។</translation> <translation id="8703346390800944767">រំលងការផ្សាយពាណិជ្ជកម្ម</translation> <translation id="8703372953981978786">តំណនេះមិនដំណើរការទេ</translation> +<translation id="8703766890819308134">បង្ហាញផ្លូវកាត់ការស្វែងរក</translation> <translation id="8704662571571150811">ដូមែន</translation> <translation id="8705331520020532516">លេខសេរ៊ី</translation> <translation id="8705580154597116082">មាន Wi-Fi តាមរយៈទូរសព្ទ</translation> @@ -11655,6 +11659,7 @@ <translation id="9182556968660520230">មិនអនុញ្ញាតឱ្យគេហទំព័រចាក់ខ្លឹមសារដែលមានការការពារទេ</translation> <translation id="9183302530794969518">Google ឯកសារ</translation> <translation id="918352324374649435">{COUNT,plural, =1{កម្មវិធី}other{កម្មវិធី #}}</translation> +<translation id="9186743636216815027">{NUM_APPS,plural,offset:2 =1{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />។ អ្នកនឹងមិនទទួលបានការជូនដំណឹងទេ នៅពេលការថតចាប់ផ្ដើម។}=2{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" /> និង <ph name="APP1_NAME" />។ អ្នកនឹងមិនទទួលបានការជូនដំណឹងទេ នៅពេលការថតចាប់ផ្ដើម។}=3{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> និងកម្មវិធី 1 ផ្សេងទៀត។ អ្នកនឹងមិនទទួលបានការជូនដំណឹងទេ នៅពេលការថតចាប់ផ្ដើម។}other{អ្នកគ្រប់គ្រងរបស់អ្នកអាចថតអេក្រង់របស់អ្នកបានដោយប្រើ <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> និងកម្មវិធី # ផ្សេងទៀត។ អ្នកនឹងមិនទទួលបានការជូនដំណឹងទេ នៅពេលការថតចាប់ផ្ដើម។}}</translation> <translation id="9186963452600581158">ចូលដោយប្រើគណនី Google របស់កុមារ</translation> <translation id="9187967020623675250">គ្រាប់ចុចមិនត្រូវគ្នាទេ។ ចុចគ្រាប់ចុចណាមួយ ដើម្បី<ph name="RESPONSE" />។</translation> <translation id="9192019773545828776">ស្ដាប់ការអានអេក្រង់ ដើម្បីឱ្យអ្នកអាចប្រើប្រាស់ឧបករណ៍របស់អ្នក ដោយមិនចាំបាច់មើលអេក្រង់។ ការអានអក្សរស្ទាបអាចប្រើបានជាមួយឧបករណ៍ដែលបានភ្ជាប់។ ប្រើប្រាស់ Ctrl + Alt + Z ដើម្បីបើក និងបិទ ChromeVox។ ប្រើប្រាស់ Search + ព្រួញទៅឆ្វេង ឬព្រួញទៅស្ដាំ ដើម្បីរុករក។ ប្រើប្រាស់ Search + Space ដើម្បីជ្រើសរើស (បើកដំណើរការ)។</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 8e16db7..3c53d89e 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1246,6 +1246,7 @@ <translation id="184862733444771842">Функция кошуу сурамы</translation> <translation id="1849016657376805933">HID түзмөгү</translation> <translation id="1849022541429818637">Чычкан менен киргизүүнү колдонууга уруксат берилген</translation> +<translation id="1849252834922144634">Ыкчам баскычтарды кадоо үчүн коё бербей басып туруңуз</translation> <translation id="1850145825777333687">Түзмөктүн эсептик дайындары</translation> <translation id="1850508293116537636">&Сааттын жебеси боюнча айландыруу</translation> <translation id="185111092974636561"><ph name="BEGIN_PARAGRAPH1" />Катталуудан мурун <ph name="DEVICE_OS" /> түзмөктү ээлей ала тургандай кылып TPM түзмөгүн тазалашыңыз керек.<ph name="END_PARAGRAPH1" /> @@ -2803,6 +2804,7 @@ <translation id="2912247081180973411">Терезелерди жабуу</translation> <translation id="2915102088417824677">Аракеттер таржымалын көрүү</translation> <translation id="2915873080513663243">Авто-скандоо</translation> +<translation id="2916067990491711240">Тескелген конок сеанстарынан чыгуу</translation> <translation id="2916073183900451334">Веб-беттеги Өтмөктү басканда, шилтемелер жана форма талаалары бөлүнүп көрүнөт.</translation> <translation id="2916745397441987255">Кеңейтүүлөрдү издөө</translation> <translation id="2918484639460781603">Параметрлерге өтүү</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 69afbaca..1cc695d 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">Įkeliama peržiūra</translation> <translation id="1032605640136438169">Peržiūrėkite naujas sąlygas</translation> <translation id="103279545524624934">Atlaisvinkite vietos diske, kad galėtumėte paleisti „Android“ programas.</translation> +<translation id="1033060461778467949">Perkelti skirtuką į išskaidytą rodinį</translation> <translation id="1033780634303702874">Pasiekti nuosekliuosius įtaisus</translation> <translation id="1034484273907870301">Miniatiūrų skirtuko juostelė planšetinio kompiuterio režimu</translation> <translation id="1035289631433631911">Turinio perkėlimo įrankis</translation> @@ -1930,6 +1931,7 @@ <translation id="2312219318583366810">Puslapio URL</translation> <translation id="2314165183524574721">Dabartinis matomumo nustatymas yra „Paslėpta“</translation> <translation id="2314774579020744484">Verčiant puslapius vartojama kalba</translation> +<translation id="2316090909467242775">Išbandykite šį atkūrimo slaptažodį</translation> <translation id="2316129865977710310">Ne, ačiū</translation> <translation id="2316433409811863464">Programos srautinis perdavimas</translation> <translation id="2316709634732130529">Naudoti siūl. slapt.</translation> @@ -3555,6 +3557,7 @@ <translation id="3462413494201477527">Atšaukti paskyros sąranką?</translation> <translation id="346298925039590474">Šis mobiliojo ryšio tinklas bus pasiekiamas visiems šio įrenginio naudotojams</translation> <translation id="3464145797867108663">Pridėti darbo profilį</translation> +<translation id="34673353983913587">Prieš išsaugant naują slaptažodį, svetainė reikalauja papildomo patvirtinimo</translation> <translation id="3468298837301810372">Etiketė</translation> <translation id="3468999815377931311">„Android“ telefonas</translation> <translation id="3469583217479686109">Pasirinkimo įrankis</translation> @@ -3582,6 +3585,7 @@ <translation id="3487007233252413104">anoniminė funkcija</translation> <translation id="3487649228420469005">Nuskaitymas baigtas</translation> <translation id="3488199663160411179">vardą</translation> +<translation id="3489457144969823485">2025 m. liepos mėn. „Chrome“ programos nebeveikia „ChromeOS“ įrenginiuose. Apsvarstykite galimybę naudoti kitą programą.</translation> <translation id="3490695139702884919">Atsisiunčiama… <ph name="PERCENT" /> proc.</translation> <translation id="3491171603443463516">Vietinius duomenis galima atkurti pamiršus PIN kodą ar slaptažodį</translation> <translation id="3491616972057195633">Peradresavimo klavišai</translation> @@ -4049,6 +4053,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> plėtin.</translation> <translation id="3794792524918736965">„Windows Hello“ įjungimas</translation> <translation id="379509625511193653">Išjungta</translation> +<translation id="3795624560191557077">Neseniai pakeitėte slaptažodį, kuris buvo rastas viešajame duomenų saugos pažeidime. Kilus problemų, „Google“ slaptažodžių tvarkyklė gali padėti prisijungti.</translation> <translation id="3796215473395753611">„Alt“ + rodyklė aukštyn</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, naudokite rodyklės dešinėn klavišą, kad peržiūrėtumėte balsą</translation> <translation id="3796648294839530037">Mėgstamiausi tinklai:</translation> @@ -5867,6 +5872,7 @@ <translation id="5088534251099454936">PKCS Nr. 1 SHA-512 su RSA šifruote</translation> <translation id="5090637338841444533">Neleidžiama stebėti fotoaparato pozicijos</translation> <translation id="5091636240353511739">Rodyti PIN kodą</translation> +<translation id="5093417502834168387">Nepavyksta prisijungti? Išbandykite kitą metodą</translation> <translation id="5093477827231450397">Svetainių, kurias užblokavote, kad nebūtų siūlomi skelbimai į kitas svetaines, sąrašas</translation> <translation id="5093569275467863761">Ilgalaikis viso antrinio inkognito rėmelio saugojimas talpykloje: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Galite atidaryti ir redaguoti palaikomus failus naudodami šią programą iš Failų programos ar kitų programų. Jei norite valdyti, kuriuos failus atidarant pagal numatytuosius nustatymus atidaroma ši programa, <ph name="BEGIN_LINK" />sužinokite, kaip nustatyti numatytąsias programas įrenginyje<ph name="END_LINK" />.</translation> @@ -6805,6 +6811,7 @@ <translation id="5785583009707899920">„Chrome“ failų paslaugų programos</translation> <translation id="5787146423283493983">Sutartis dėl rakto</translation> <translation id="5787420647064736989">Įrenginio pavadinimas</translation> +<translation id="5787582109651427233">Apsilankykite „Google Wallet“, kad pridėtumėte arba tvarkytumėte <ph name="BEGIN_LINK_LOYALTY_CARDS" />lojalumo korteles<ph name="END_LINK_LOYALTY_CARDS" /> arba „Google Pay“ <ph name="BEGIN_LINK_PAYMENT_METHODS" />mokėjimo metodus<ph name="END_LINK_PAYMENT_METHODS" /></translation> <translation id="5788367137662787332">Apgailestaujame, tačiau neįmanoma įrengti bent vieno įrenginio <ph name="DEVICE_LABEL" /> disko skaidinio.</translation> <translation id="5789581866075720267">Jei norite importuoti slaptažodžius į „<ph name="BRAND" />“ šiame įrenginyje, pasirinkite CSV failą.</translation> <translation id="5790085346892983794">Atlikta</translation> @@ -7290,6 +7297,7 @@ <translation id="6131511889181741773">Siaubo žanras</translation> <translation id="6132251717264923430">Mygtukas prisegtas</translation> <translation id="6132714462430777655">Praleisti mokyklos registraciją?</translation> +<translation id="6134418895482326458">Slėpti poraštę naujo skirtuko puslapyje</translation> <translation id="6134428719487602109">Pašalinamos visos naudotojų paskyros ir „Chromebook“ įrenginys nustatomas iš naujo, kad būtų kaip naujas.</translation> <translation id="6135826623269483856">Neleidžiama tvarkyti langų visuose ekranuose</translation> <translation id="6136114942382973861">Uždaryti atsisiuntimų juostą</translation> @@ -7646,6 +7654,7 @@ <translation id="6388577073199278153">Paskyros mobiliesiems pasiekti nepavyko</translation> <translation id="6390020764191254941">Skirtuko perkėlimas į naują langą</translation> <translation id="6390046581187330789">{COUNT,plural, =0{Nėra}=1{Skirta <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ir dar vienam domenui}one{Skirta <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ir dar {COUNT} domenui}few{Skirta <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ir dar {COUNT} domenams}many{Skirta <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ir dar {COUNT} domeno}other{Skirta <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> ir dar {COUNT} domenų}}</translation> +<translation id="6390533465682072118">Atkūrimas</translation> <translation id="6391131092053186625">Jūsų įrenginio IMEI yra <ph name="IMEI_NUMBER" />. Šį numerį galima naudoti suaktyvinant paslaugą.</translation> <translation id="6393156038355142111">Siūlyti sudėtingą slaptažodį</translation> <translation id="6393550101331051049">Leidžiama rodyti nesaugų turinį</translation> @@ -7730,6 +7739,7 @@ <translation id="6455521402703088376">Išjungta • Šio plėtinio paskelbimą anuliavo kūrėjas</translation> <translation id="6455894534188563617">&Naujas aplankas</translation> <translation id="645705751491738698">Tęsti „JavaScript“ blokavimą</translation> +<translation id="6457572529564180082">Nepavyko paleisti „<ph name="APP_NAME" />“</translation> <translation id="6458606150257356946">Vis tiek įklijuoti</translation> <translation id="6458701200018867744">Nepavyko įkelti (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Paieškai naudoti pasirinkimą</translation> @@ -8028,6 +8038,7 @@ <translation id="6667187897999649121">Kol kas slaptažodžius galite bendrinti tik su šeimos grupės nariais. <ph name="BEGIN_LINK" />Sukurkite iki šešių asmenų šeimos grupę<ph name="END_LINK" /> ir išnaudokite daugiau savo produktų ir prenumeratų teikiamų galimybių sistemoje „Google“.</translation> <translation id="666731172850799929">Atidaryti naudojant „<ph name="APP_NAME" />“</translation> <translation id="6669195257625975787">Duomenys apdorojami taip pat kaip ir svetainė, kurią peržiūrite</translation> +<translation id="6669637573228217624">Įkelti failą</translation> <translation id="6670142487971298264">Programa „<ph name="APP_NAME" />“ dabar pasiekiama</translation> <translation id="6670767097276846646">Naudojant kai kuriuos plėtinius galima pridėti paieškos variklius prie „Chrome“</translation> <translation id="6670983860904543332">Automatiniai naujiniai teikiami su naujausiomis funkcijomis. Naršykite svarbiausią paskiausių naujinių informaciją.</translation> @@ -8167,6 +8178,7 @@ <translation id="6771503742377376720">Yra sertifikavimo institucija</translation> <translation id="6772974422346500939">Atidaryti ir redaguoti</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">Svetainėje reikia vienkartinio slaptažodžio</translation> <translation id="6774710250118040929">Naujo slaptažodžio pridėjimas</translation> <translation id="6775163072363532304">Pasiekiami įrenginiai bus rodomi čia.</translation> <translation id="6775992990195573904">Skirtukai bus surūšiuoti</translation> @@ -9286,6 +9298,7 @@ <translation id="7566118625369982896">„Play“ programų nuorodų tvarkymas</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">Sukurti klavišų derinį</translation> +<translation id="7567100268516475532">Perkelti skirtuką į išskaidytą rodinį</translation> <translation id="7568014768212280234">Jūsų skirtukų grupė pilna, nauji nariai negali prisijungti naudodami nuorodą</translation> <translation id="7568759527730933493">Naudokite saugų ryšį, kai ieškoma svetainės IP adreso DNS (domenų pavadinimų sistemoje). Tam naudojamas valdomas paslaugos teikėjas adresu <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" />. Saugūs ryšiai nenaudojami kai kuriuose administratoriaus sukonfigūruotuose domenuose.</translation> <translation id="756876171895853918">Tinkinti pseudoportretą</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 94bea5d3..fe9260c 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">पूर्वावलोकन लोड गर्दै</translation> <translation id="1032605640136438169">कृपया नयाँ सर्तहरूको समीक्षा गर्नुहोस्</translation> <translation id="103279545524624934">Android एप सुरु गर्न डिस्कमा ठाउँ खाली गर्नुहोस्।</translation> +<translation id="1033060461778467949">ट्याब सारेर स्प्लिट भ्यूमा लैजानुहोस्</translation> <translation id="1033780634303702874">आफ्नो धारावाहिक यन्त्रहरू पहुँच गर्नुहोस्</translation> <translation id="1034484273907870301">ट्याब्लेट मोडमा उपलब्ध थम्बनेल ट्याब स्ट्रिप</translation> <translation id="1035289631433631911">कन्टेन्ट ट्रान्स्फर टुल</translation> @@ -1911,6 +1912,7 @@ <translation id="2312219318583366810">पेजको URL</translation> <translation id="2314165183524574721">हालको भिजिबिलिटी सेटिङ यस प्रकार छ: लुकाइएको</translation> <translation id="2314774579020744484">पृष्ठहरू अनुवाद गर्दा प्रयोग हुने भाषा</translation> +<translation id="2316090909467242775">यो रिकभरी पासवर्ड प्रयोग गरी हेर्नुहोस्</translation> <translation id="2316129865977710310">पर्दैन, धन्यवाद</translation> <translation id="2316433409811863464">एप स्ट्रिमिङ</translation> <translation id="2316709634732130529">सुझाव दिइएको पासवर्ड प्रयोग गर्नुहोस्</translation> @@ -3535,6 +3537,7 @@ <translation id="3462413494201477527">खाता सेटअप रद्द गर्ने हो?</translation> <translation id="346298925039590474">यो डिभाइस चलाउने सबै प्रयोगकर्ताहरू यो मोबाइल नेटवर्क प्रयोग गर्न सक्ने छन्</translation> <translation id="3464145797867108663">वर्क प्रोफाइल हाल्नुहोस्</translation> +<translation id="34673353983913587">तपाईंको नयाँ पासवर्ड सेभ गर्नुअघि साइटमा थप प्रमाणीकरण गर्नु पर्ने हुन्छ</translation> <translation id="3468298837301810372">लेबल</translation> <translation id="3468999815377931311">Android फोन</translation> <translation id="3469583217479686109">चयन गर्ने टुल</translation> @@ -3562,6 +3565,7 @@ <translation id="3487007233252413104">बेनाम प्रकार्य</translation> <translation id="3487649228420469005">स्क्यान गर्ने कार्य पूरा भयो</translation> <translation id="3488199663160411179">नाम</translation> +<translation id="3489457144969823485">जुलाई २०२५ देखि Chrome का एपहरू ChromeOS डिभाइसहरूमा चल्न छाडेका छन्। कुनै वैकल्पिक एप प्रयोग गर्नुहोस्।</translation> <translation id="3490695139702884919">डाउनलोड गरिँदै छ... <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">तपाईंले आफ्नो PIN वा पासवर्ड बिर्सनुभयो भने पनि लोकल डेटा रिस्टोर गर्न सकिन्छ</translation> <translation id="3491616972057195633">बाउन्स की</translation> @@ -4029,6 +4033,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> वटा एक्स्टेन्सन</translation> <translation id="3794792524918736965">Windows Hello अन गर्नुहोस्</translation> <translation id="379509625511193653">अफ छ</translation> +<translation id="3795624560191557077">तपाईंले हालसालै परिवर्तन गर्नुभएको पासवर्ड चोरी भएको डेटाको सार्वजनिक सङ्ग्रहमा भेटिएको छ। कुनै समस्या परेका खण्डमा Google पासवर्ड म्यानेजरले तपाईंलाई साइन इन गर्न मद्दत गर्न सक्छ।</translation> <translation id="3796215473395753611">alt + अप एरो</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, भ्वाइस प्रिभ्यू गर्न राइट एरो की प्रयोग गर्नुहोस्</translation> <translation id="3796648294839530037">मन पर्ने नेटवर्क:</translation> @@ -5846,6 +5851,7 @@ <translation id="5088534251099454936">RSA को साथमा PKCS #1 SHA-512 गुप्तलेखन</translation> <translation id="5090637338841444533">तपाईंको क्यामेराको स्थिति ट्र्याक गर्ने अनुमति नदिइएका साइटहरू</translation> <translation id="5091636240353511739">PIN देखाउनुहोस्</translation> +<translation id="5093417502834168387">साइन इन गर्ने क्रममा समस्या आयो? अर्को तरिका अपनाई हेर्नुहोस्</translation> <translation id="5093477827231450397">अन्य साइटहरूलाई विज्ञापन सिफारिस गर्न दिन नचाहेका कारण तपाईंले ब्लक गर्नुभएका साइटहरूको सूची</translation> <translation id="5093569275467863761">इन्कोग्निटो मोडमा ब्याक/फर्वार्ड क्यास गरिएको सबफ्रेम: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">तपाईं यो एप प्रयोग गरी खोल्न तथा सम्पादन गर्न मिल्ने फाइलहरू Files एप वा अन्य एपमार्फत खोल्न तथा सम्पादन गर्न सक्नुहुन्छ। तपाईं कुन कुन फाइल यो एपमार्फत स्वतः खुल्छ भन्ने कुरा नियन्त्रण गर्न चाहनुहुन्छ भने <ph name="BEGIN_LINK" />डिभाइसमा डिफल्ट एप कसरी तय गर्ने भन्ने कुरा जान्नुहोस्<ph name="END_LINK" />।</translation> @@ -6783,6 +6789,7 @@ <translation id="5785583009707899920">Chrome को फाइलका उपयोगिताहरू</translation> <translation id="5787146423283493983">प्रमुख सम्झौता</translation> <translation id="5787420647064736989">डिभाइसको नाम</translation> +<translation id="5787582109651427233"><ph name="BEGIN_LINK_LOYALTY_CARDS" />लोयल्टी कार्डहरू<ph name="END_LINK_LOYALTY_CARDS" /> वा Google Pay का <ph name="BEGIN_LINK_PAYMENT_METHODS" />भुक्तानी विधिहरू<ph name="END_LINK_PAYMENT_METHODS" /> हाल्न वा व्यवस्थापन गर्न Google Wallet मा जानुहोस्</translation> <translation id="5788367137662787332">माफ गर्नुहोस्, यन्त्रमा कम्तीमा एउटा विभाजन <ph name="DEVICE_LABEL" /> माउन्ट हुन सकेन।</translation> <translation id="5789581866075720267">तपाईं यो डिभाइसमा भएको <ph name="BRAND" /> मा पासवर्डहरू इम्पोर्ट गर्न चाहनुहुन्छ भने कुनै CSV फाइल छनौट गर्नुहोस्।</translation> <translation id="5790085346892983794">सफलता</translation> @@ -7267,6 +7274,7 @@ <translation id="6131511889181741773">स्प्लाटर</translation> <translation id="6132251717264923430">बटन पिन गरिएको छ</translation> <translation id="6132714462430777655">स्कुलको इमेल ठेगाना हालेर डिभाइस दर्ता गर्ने प्रक्रिया स्किप गर्ने हो?</translation> +<translation id="6134418895482326458">नयाँ ट्याब पेजमा फुटर लुकाउनुहोस्</translation> <translation id="6134428719487602109">प्रयोगकर्ताका सबै खाता हटाउनुहोस् र Chromebook रिसेट गरेर पूरै नयाँ जस्तो बनाउनुहोस्।</translation> <translation id="6135826623269483856">तपाईंका सबै डिस्प्लेमा विन्डो व्यवस्थापन गर्ने अनुमति नदिइएका साइटहरू</translation> <translation id="6136114942382973861">डाउनलोडहरूको पट्टी बन्द गर्नुहोस्</translation> @@ -7623,6 +7631,7 @@ <translation id="6388577073199278153">तपाईंले आफ्नो मोबाइल खाता हेर्न सक्नुभएन</translation> <translation id="6390020764191254941">ट्याब नयाँ विन्डोमा सार्नुहोस्</translation> <translation id="6390046581187330789">{COUNT,plural, =0{कुनैको पनि होइन}=1{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> र थप एउटा डोमेनका}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> र थप {COUNT} वटा डोमेनका}}</translation> +<translation id="6390533465682072118">रिकभरी</translation> <translation id="6391131092053186625">तपाईंको डिभाइसको IMEI नम्बर <ph name="IMEI_NUMBER" /> हो। यो नम्बर सेवा एक्टिभेट गर्ने प्रयोजनका लागि प्रयोग गर्न सकिन्छ।</translation> <translation id="6393156038355142111">भरपर्दो पासवर्ड सिफारिस गर्नुहोस्</translation> <translation id="6393550101331051049">असुरक्षित सामग्री देखाउन अनुमति दिइएका साइटहरू</translation> @@ -7707,6 +7716,7 @@ <translation id="6455521402703088376">अफ • यो एक्स्टेन्सनको विकासकर्ताले यो एक्स्टेन्सनको प्रकाशन रद्द गरेको हो</translation> <translation id="6455894534188563617">&नयाँ फोल्डर</translation> <translation id="645705751491738698">जाभास्क्रिप्ट रोक्न जारी राख्नुहोस्</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> सुरु गर्न सकिएन</translation> <translation id="6458606150257356946">जे होस् पेस्ट गर्नुहोस्</translation> <translation id="6458701200018867744">अपलोड गर्न सकिएन (<ph name="WEBRTC_LOG_UPLOAD_TIME" />)।</translation> <translation id="6459488832681039634">पत्ता लगाउन छनोट प्रयोग गर्नुहोस्</translation> @@ -7999,6 +8009,7 @@ <translation id="6667187897999649121">तपाईं अहिले पारिवारिक सदस्यहरूसँग पासवर्डहरू मात्र सेयर गर्न सक्नुहुन्छ। बढीमा ६ जना सदस्य समावेश गरेर <ph name="BEGIN_LINK" />पारिवारिक समूह<ph name="END_LINK" /> बनाउनुहोस् र Google का विभिन्न सेवाहरूमा उपलब्ध आफ्ना उत्पादन तथा सदस्यताबाट अझ बढी लाभ उठाउनुहोस्।</translation> <translation id="666731172850799929"><ph name="APP_NAME" /> मा खोल्नुहोस्</translation> <translation id="6669195257625975787">यो डेटामा पनि तपाईंले हेर्दै गरेको साइटमा लागू गरिएकै सेटिङ लागू गरिन्छ</translation> +<translation id="6669637573228217624">कुनै फाइल अपलोड गर्नुहोस्</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> अब उपलब्ध छ</translation> <translation id="6670767097276846646">केही एक्स्टेन्सनहरूले Chrome मा सर्च इन्जिन थप्न सक्छ</translation> <translation id="6670983860904543332">स्वतः अपडेट हुने सुविधाले तपाईंलाई नयाँ सुविधाहरू एक्सेस गर्न दिने छ। हालसालैका अपडेटहरूका हाइलाइट हेर्नुहोस्।</translation> @@ -8138,6 +8149,7 @@ <translation id="6771503742377376720">एउटा प्रमाणीकरण अधिकार हो</translation> <translation id="6772974422346500939">खोल्नुहोस् र सम्पादन गर्नुहोस्</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">यो साइटमा एक पटके पासवर्ड हाल्नु पर्ने हुन्छ</translation> <translation id="6774710250118040929">नयाँ पासवर्ड हाल्नुहोस्</translation> <translation id="6775163072363532304">उपलब्ध डिभाइस यहाँ देखिने छन्।</translation> <translation id="6775992990195573904">आफ्ना ट्याबहरू क्रमबद्ध गर्नुहोस्</translation> @@ -9256,6 +9268,7 @@ <translation id="7566118625369982896">Play सम्बन्धी एपका लिंकहरू व्यवस्थित गर्नुहोस्</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">कीको संयोजन बनाउनुहोस्</translation> +<translation id="7567100268516475532">ट्याब सारेर स्प्लिट भ्यूमा लैजानुहोस्</translation> <translation id="7568014768212280234">तपाईंको ट्याब समूह भरिएको छ, नयाँ सदस्यहरू लिंक प्रयोग गरी सामेल हुन सक्दैनन्</translation> <translation id="7568759527730933493">DNS (डोमेन नेम सिस्टम) मा कुनै साइटको IP एड्रेस खोज्न सुरक्षित कनेक्सन प्रयोग गर्नुहोस्। यसले <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" /> मा भएको व्यवस्थापन गरिएको सेवा प्रदायक प्रयोग गर्छ। तपाईंका एड्मिनले कन्फिगर गरेका केही डोमेनमा सुरक्षित कनेक्सन प्रयोग गरेका छैनन्।</translation> <translation id="756876171895853918">अवतार आफूले चाहे जस्तो बनाउनुहोस्</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index e7dde55..f9fb217c 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">Voorbeeld wordt geladen</translation> <translation id="1032605640136438169">Lees de nieuwe voorwaarden door</translation> <translation id="103279545524624934">Maak schijfruimte vrij om Android-apps te starten.</translation> +<translation id="1033060461778467949">Tabblad verplaatsen naar gesplitste weergave</translation> <translation id="1033780634303702874">Toegang krijgen tot je seriële apparaten</translation> <translation id="1034484273907870301">Tabbladstrook met miniaturen voor de tabletmodus</translation> <translation id="1035289631433631911">Contentoverdracht-tool</translation> @@ -1914,6 +1915,7 @@ <translation id="2312219318583366810">Pagina-URL</translation> <translation id="2314165183524574721">Huidige zichtbaarheidsinstelling is 'Verborgen'</translation> <translation id="2314774579020744484">Gebruikte taal tijdens het vertalen van pagina's</translation> +<translation id="2316090909467242775">Probeer dit herstelwachtwoord</translation> <translation id="2316129865977710310">Nee, bedankt</translation> <translation id="2316433409811863464">App-streaming</translation> <translation id="2316709634732130529">Voorgesteld wachtwoord gebruiken</translation> @@ -3537,6 +3539,7 @@ <translation id="3462413494201477527">Accountconfiguratie annuleren?</translation> <translation id="346298925039590474">Dit mobiele netwerk is beschikbaar voor alle gebruikers op dit apparaat</translation> <translation id="3464145797867108663">Werkprofiel toevoegen</translation> +<translation id="34673353983913587">De site vereist extra verificatie voordat je je nieuwe wachtwoord kunt opslaan</translation> <translation id="3468298837301810372">Label</translation> <translation id="3468999815377931311">Android-telefoon</translation> <translation id="3469583217479686109">Tool Selectie</translation> @@ -3564,6 +3567,7 @@ <translation id="3487007233252413104">anonieme functie</translation> <translation id="3487649228420469005">Scan is klaar</translation> <translation id="3488199663160411179">naam</translation> +<translation id="3489457144969823485">Chrome-apps worden vanaf juli 2025 niet meer uitgevoerd op ChromeOS-apparaten. Overweeg een alternatieve app.</translation> <translation id="3490695139702884919">Downloaden… <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">Lokale gegevens kunnen worden hersteld als je je pincode of wachtwoord vergeet</translation> <translation id="3491616972057195633">Stuitertoetsen</translation> @@ -4031,6 +4035,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> extensies</translation> <translation id="3794792524918736965">Windows Hello aanzetten</translation> <translation id="379509625511193653">Uit</translation> +<translation id="3795624560191557077">Je hebt recent een wachtwoord gewijzigd dat is gevonden bij een openbaar gegevenslek. Als je problemen ondervindt, kan Google Wachtwoordmanager je helpen inloggen.</translation> <translation id="3796215473395753611">alt + pijl-omhoog</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, gebruik de pijl-rechts om een voorbeeld van de stem te krijgen</translation> <translation id="3796648294839530037">Favoriete netwerken:</translation> @@ -5847,6 +5852,7 @@ <translation id="5088534251099454936">PKCS nr. 1 SHA-512 met RSA-versleuteling</translation> <translation id="5090637338841444533">Geen toestemming om je camerapositie bij te houden</translation> <translation id="5091636240353511739">Pincode tonen</translation> +<translation id="5093417502834168387">Problemen met inloggen? Probeer het op een andere manier</translation> <translation id="5093477827231450397">Lijst met geblokkeerde sites die geen advertenties op andere sites mogen voorstellen</translation> <translation id="5093569275467863761">Incognitosubframe in Back-Forward Cache: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Je kunt ondersteunde bestanden openen en bewerken met deze app vanuit de app Bestanden of andere apps. <ph name="BEGIN_LINK" />Bekijk hoe je standaard-apps instelt op je apparaat<ph name="END_LINK" /> om te bepalen welke bestanden standaard worden geopend in deze app.</translation> @@ -6781,6 +6787,7 @@ <translation id="5785583009707899920">Chrome-bestandshulpprogramma's</translation> <translation id="5787146423283493983">Sleutelovereenkomst</translation> <translation id="5787420647064736989">Apparaatnaam</translation> +<translation id="5787582109651427233">Ga naar Google Wallet om <ph name="BEGIN_LINK_LOYALTY_CARDS" />klantenkaarten<ph name="END_LINK_LOYALTY_CARDS" /> of Google Pay-<ph name="BEGIN_LINK_PAYMENT_METHODS" />betaalmethoden<ph name="END_LINK_PAYMENT_METHODS" /> toe te voegen of te beheren</translation> <translation id="5788367137662787332">Ten minste één partitie op het apparaat <ph name="DEVICE_LABEL" /> kan niet worden gekoppeld.</translation> <translation id="5789581866075720267">Selecteer een csv-bestand om wachtwoorden te importeren in <ph name="BRAND" /> op dit apparaat.</translation> <translation id="5790085346892983794">Geslaagd</translation> @@ -7265,6 +7272,7 @@ <translation id="6131511889181741773">Splatter</translation> <translation id="6132251717264923430">Knop vastgezet</translation> <translation id="6132714462430777655">Schoolinschrijving overslaan?</translation> +<translation id="6134418895482326458">Voettekst verbergen op de pagina Nieuw tabblad</translation> <translation id="6134428719487602109">Verwijder alle gebruikersaccounts en reset je Chromebook zodat deze weer als nieuw is.</translation> <translation id="6135826623269483856">Geen toestemming om vensters te beheren op al je schermen</translation> <translation id="6136114942382973861">Downloadbalk sluiten</translation> @@ -7621,6 +7629,7 @@ <translation id="6388577073199278153">Kan je mobiele account niet openen</translation> <translation id="6390020764191254941">Tabblad verplaatsen naar nieuw venster</translation> <translation id="6390046581187330789">{COUNT,plural, =0{Geen}=1{Voor <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> en 1 ander domein}other{Voor <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> en {COUNT} andere domeinen}}</translation> +<translation id="6390533465682072118">Herstel</translation> <translation id="6391131092053186625">De IMEI van het apparaat is <ph name="IMEI_NUMBER" />. Met dit nummer kun je de service activeren.</translation> <translation id="6393156038355142111">Sterk wachtwoord voorstellen</translation> <translation id="6393550101331051049">Toestemming om onveilige content te bekijken</translation> @@ -7705,6 +7714,7 @@ <translation id="6455521402703088376">Uit • De publicatie van deze extensie is ongedaan gemaakt door de ontwikkelaar</translation> <translation id="6455894534188563617">&Nieuwe map</translation> <translation id="645705751491738698">JavaScript blijven blokkeren</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> kan niet worden gestart</translation> <translation id="6458606150257356946">Toch plakken</translation> <translation id="6458701200018867744">Upload mislukt (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Gebruik selectie voor zoekactie</translation> @@ -7997,6 +8007,7 @@ <translation id="6667187897999649121">Voorlopig kun je alleen wachtwoorden delen met gezinsleden. <ph name="BEGIN_LINK" />Maak een gezinsgroep<ph name="END_LINK" /> met maximaal 6 leden en haal meer uit je producten en abonnementen op Google.</translation> <translation id="666731172850799929">Openen in <ph name="APP_NAME" /></translation> <translation id="6669195257625975787">Gegevens worden op dezelfde manier behandeld als de site die je bekijkt</translation> +<translation id="6669637573228217624">Een bestand uploaden</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> is nu beschikbaar</translation> <translation id="6670767097276846646">Met sommige extensies kun je zoekmachines aan Chrome toevoegen</translation> <translation id="6670983860904543332">Automatische updates bieden je de nieuwste functies. Ontdek de hoogtepunten van recente updates.</translation> @@ -8136,6 +8147,7 @@ <translation id="6771503742377376720">Is een certificeringsinstantie</translation> <translation id="6772974422346500939">Openen en bewerken</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">De site heeft een eenmalig wachtwoord nodig</translation> <translation id="6774710250118040929">Nieuw wachtwoord toevoegen</translation> <translation id="6775163072363532304">Beschikbare apparaten zie je hier.</translation> <translation id="6775992990195573904">Je tabbladen sorteren</translation> @@ -9254,6 +9266,7 @@ <translation id="7566118625369982896">Play-app-links beheren</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">Toetsencombinatie maken</translation> +<translation id="7567100268516475532">Tabblad verplaatsen naar gesplitste weergave</translation> <translation id="7568014768212280234">Je tabbladgroep is vol, nieuwe leden kunnen niet deelnemen via de link</translation> <translation id="7568759527730933493">Gebruik een beveiligde verbinding om het IP-adres van een site op te zoeken in het DNS (Domain Name System). Hiervoor wordt een beheerde serviceprovider gebruikt op <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" />. Beveiligde verbindingen worden niet gebruikt voor bepaalde domeinen die door je beheerder zijn ingesteld.</translation> <translation id="756876171895853918">Avatar aanpassen</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 51826415..c2fafde 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -4909,6 +4909,7 @@ <translation id="4406883609789734330">Legendas instantâneas</translation> <translation id="4408599188496843485">A&juda</translation> <translation id="4409271659088619928">O seu motor de pesquisa é o <ph name="DSE" />. Se aplicável, consulte as instruções para eliminar o histórico de pesquisas.</translation> +<translation id="4409340274650920844">{NUM_APPS,plural,offset:2 =1{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />. Vai receber uma notificação quando a gravação começar.}=2{O seu administrador pode gravar o ecrã com as apps <ph name="APP0_NAME" /> e <ph name="APP1_NAME" />. Vai receber uma notificação quando a gravação começar.}=3{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> e mais 1. Vai receber uma notificação quando a gravação começar.}other{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> e mais #. Vai receber uma notificação quando a gravação começar.}}</translation> <translation id="4409697491990005945">Margens</translation> <translation id="4409779593816003679">Palavras-passe e &preenchimento automático</translation> <translation id="4410545552906060960">Utilize um número (PIN) em vez de uma palavra-passe para desbloquear o dispositivo. Para definir o PIN mais tarde, aceda a Definições.</translation> @@ -8238,6 +8239,7 @@ <translation id="6811792477922751991">Use a tecla do Launcher para alterar o comportamento das teclas de função</translation> <translation id="6812349420832218321">O <ph name="PRODUCT_NAME" /> não pode ser executado como raiz.</translation> <translation id="6812841287760418429">Manter alterações</translation> +<translation id="681360534161436378">{NUM_APPS,plural,offset:2 =1{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />.}=2{O seu administrador pode gravar o ecrã com as apps <ph name="APP0_NAME" /> e <ph name="APP1_NAME" />.}=3{O seu administrador pode gravar o ecrã com as apps <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> e mais 1.}other{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> e mais #.}}</translation> <translation id="6813907279658683733">Ecrã inteiro</translation> <translation id="6814754908910736855">Informações dos clientes do Wi-Fi Direct:</translation> <translation id="6815376457351236663">Abrir mesmo assim</translation> @@ -10421,6 +10423,7 @@ <translation id="8339288417038613756">Tamanho da visualização e do texto</translation> <translation id="833986336429795709">Para abrir este link, escolher uma aplicação</translation> <translation id="8340547030807793004">Mais ações para <ph name="DEVICE" /></translation> +<translation id="8341804784147620576">Mostrar atalhos de pesquisa</translation> <translation id="8342221978608739536">Não tentei</translation> <translation id="8342861492835240085">Selecionar uma coleção</translation> <translation id="8345848587667658367">Agora, pode ver as fotos, o conteúdo multimédia, as notificações e as apps recentes do seu telemóvel</translation> @@ -10932,6 +10935,7 @@ <translation id="8702825062053163569">O seu <ph name="DEVICE_TYPE" /> foi bloqueado</translation> <translation id="8703346390800944767">Ignorar anúncio</translation> <translation id="8703372953981978786">Este link não funciona</translation> +<translation id="8703766890819308134">Mostrar atalhos de pesquisa</translation> <translation id="8704662571571150811">Domínios</translation> <translation id="8705331520020532516">Número de série</translation> <translation id="8705580154597116082">Wi-Fi disponível através do telemóvel</translation> @@ -11648,6 +11652,7 @@ <translation id="9182556968660520230">Não permitir que os sites reproduzam conteúdo protegido</translation> <translation id="9183302530794969518">Google Docs</translation> <translation id="918352324374649435">{COUNT,plural, =1{App}other{# apps}}</translation> +<translation id="9186743636216815027">{NUM_APPS,plural,offset:2 =1{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />. Não vai receber uma notificação quando a gravação começar.}=2{O seu administrador pode gravar o ecrã com as apps <ph name="APP0_NAME" /> e <ph name="APP1_NAME" />. Não vai receber uma notificação quando a gravação começar.}=3{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> e mais 1. Não vai receber uma notificação quando a gravação começar.}other{O seu administrador pode gravar o ecrã com a app <ph name="APP0_NAME" />, <ph name="APP1_NAME" /> e mais #. Não vai receber uma notificação quando a gravação começar.}}</translation> <translation id="9186963452600581158">Iniciar sessão com uma Conta Google de criança</translation> <translation id="9187967020623675250">As teclas não correspondem. Prima qualquer tecla para <ph name="RESPONSE" />.</translation> <translation id="9192019773545828776">Obtenha feedback de voz para poder usar o dispositivo sem olhar para o ecrã. O feedback em braille está disponível com um dispositivo ligado. Use Ctrl + Alt + Z para ativar e desativar o ChromeVox. Use Pesquisa + seta para a esquerda ou seta para a direita para navegar. Use Pesquisa + barra de espaço para selecionar (ativar).</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 465ba5e..9163c26 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">Загрузка данных для предварительного просмотра</translation> <translation id="1032605640136438169">Просим вас ознакомиться с изменениями.</translation> <translation id="103279545524624934">Чтобы запускать Android-приложения, освободите пространство на диске.</translation> +<translation id="1033060461778467949">Добавить вкладку в режим Split View</translation> <translation id="1033780634303702874">Доступ к последовательным устройствам</translation> <translation id="1034484273907870301">Панель с уменьшенными изображениями вкладок в режиме планшета</translation> <translation id="1035289631433631911">Инструмент "Перенос контента"</translation> @@ -1916,6 +1917,7 @@ <translation id="2312219318583366810">URL страницы</translation> <translation id="2314165183524574721">Ваше устройство скрыто от других пользователей</translation> <translation id="2314774579020744484">Язык, который используется при переводе страниц</translation> +<translation id="2316090909467242775">Попробуйте этот пароль для восстановления</translation> <translation id="2316129865977710310">Нет, спасибо</translation> <translation id="2316433409811863464">Стриминг приложений</translation> <translation id="2316709634732130529">Использовать предложенный пароль</translation> @@ -3541,6 +3543,7 @@ <translation id="3462413494201477527">Отменить создание аккаунта?</translation> <translation id="346298925039590474">Эта мобильная сеть будет доступна всем пользователям данного устройства.</translation> <translation id="3464145797867108663">Добавить рабочий профиль</translation> +<translation id="34673353983913587">Прежде чем сохранить новый пароль, требуется пройти дополнительную проверку личности.</translation> <translation id="3468298837301810372">Ярлык:</translation> <translation id="3468999815377931311">Телефон Android</translation> <translation id="3469583217479686109">Инструмент "Выделение"</translation> @@ -3568,6 +3571,7 @@ <translation id="3487007233252413104">анонимные функции</translation> <translation id="3487649228420469005">Сканирование завершено</translation> <translation id="3488199663160411179">имя</translation> +<translation id="3489457144969823485">Начиная с июля 2025 года приложения Chrome больше нельзя запустить на устройствах с ChromeOS. Используйте другое приложение.</translation> <translation id="3490695139702884919">Скачивание… <ph name="PERCENT" /> %</translation> <translation id="3491171603443463516">Если вы забудете PIN-код или пароль, локальные данные можно будет восстановить</translation> <translation id="3491616972057195633">Контроль повторного нажатия</translation> @@ -4035,6 +4039,7 @@ <translation id="3792973596468118484">Расширений: <ph name="NUM_EXTENSIONS" /></translation> <translation id="3794792524918736965">Включите Windows Hello</translation> <translation id="379509625511193653">Отключено</translation> +<translation id="3795624560191557077">Недавно вы изменили пароль, оказавшийся в открытом доступе из-за утечки данных. В случае проблем Google Менеджер паролей поможет войти в аккаунт.</translation> <translation id="3796215473395753611">Alt + Стрелка вверх</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />, нажмите клавишу со стрелкой вправо, чтобы прослушать голос</translation> <translation id="3796648294839530037">Избранные сети:</translation> @@ -4769,7 +4774,7 @@ <translation id="4305402730127028764">Копировать на устройство "<ph name="DEVICE_NAME" />"</translation> <translation id="4305817255990598646">Переключиться</translation> <translation id="4306119971288449206">Приложения должны иметь тип контента "<ph name="CONTENT_TYPE" />"</translation> -<translation id="4306489587293957491">Ввод</translation> +<translation id="4306489587293957491">Ввести</translation> <translation id="4306810703452026910">Chrome больше не будет отмечать уведомления с этого сайта как спам.</translation> <translation id="4307992518367153382">Основные</translation> <translation id="4309165024397827958">Предоставьте приложениям и сервисам Android доступ к данным о местоположении устройства. Чтобы повышать точность геолокации и улучшать некоторые сервисы, компания Google может периодически собирать анонимные геоданные пользователей.</translation> @@ -5852,6 +5857,7 @@ <translation id="5088534251099454936">PKCS #1 SHA-512 с шифрованием RSA</translation> <translation id="5090637338841444533">Запретить сайтам отслеживать положение камеры</translation> <translation id="5091636240353511739">Показать PIN-код</translation> +<translation id="5093417502834168387">Не получается войти в аккаунт? Попробуйте другой способ</translation> <translation id="5093477827231450397">Список заблокированных сайтов, которым запрещено предлагать рекламу для других сайтов</translation> <translation id="5093569275467863761">Субфрейм возвратного кеша в режиме инкогнито: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Вы можете открывать и редактировать поддерживаемые файлы в этом приложении из Google Файлов и других приложений. Указать, какие типы файлов по умолчанию будут открываться в этом приложении, можно в <ph name="BEGIN_LINK" />настройках приложений по умолчанию на устройстве<ph name="END_LINK" />.</translation> @@ -6789,6 +6795,7 @@ <translation id="5785583009707899920">Файловые утилиты Chrome</translation> <translation id="5787146423283493983">Согласование ключей</translation> <translation id="5787420647064736989">Название устройства</translation> +<translation id="5787582109651427233">Перейдите в Google Кошелек, чтобы добавить <ph name="BEGIN_LINK_LOYALTY_CARDS" />карты постоянного клиента<ph name="END_LINK_LOYALTY_CARDS" /> или <ph name="BEGIN_LINK_PAYMENT_METHODS" />способы оплаты<ph name="END_LINK_PAYMENT_METHODS" /> Google Pay и управлять ими.</translation> <translation id="5788367137662787332">Не удалось добавить один или несколько разделов устройства <ph name="DEVICE_LABEL" />.</translation> <translation id="5789581866075720267">Чтобы импортировать пароли в <ph name="BRAND" /> на этом устройстве, выберите CSV-файл</translation> <translation id="5790085346892983794">Выполнено</translation> @@ -7274,6 +7281,7 @@ <translation id="6131511889181741773">Кляксы</translation> <translation id="6132251717264923430">Кнопка закреплена</translation> <translation id="6132714462430777655">Пропустить регистрацию в учебном заведении?</translation> +<translation id="6134418895482326458">Скрыть нижний колонтитул страницы быстрого доступа</translation> <translation id="6134428719487602109">Удалить все аккаунты пользователей и восстановить на устройстве Chromebook настройки по умолчанию</translation> <translation id="6135826623269483856">Сайты, которым запрещено управление окнами на всех ваших экранах</translation> <translation id="6136114942382973861">Закрыть панель загрузок</translation> @@ -7630,6 +7638,7 @@ <translation id="6388577073199278153">Не удалось войти в аккаунт на мобильном устройстве</translation> <translation id="6390020764191254941">Открыть вкладку в новом окне</translation> <translation id="6390046581187330789">{COUNT,plural, =0{Нет сайтов.}=1{Для <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> и ещё одного сайта.}one{Для <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> и ещё {COUNT} сайта.}few{Для <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> и ещё {COUNT} сайтов.}many{Для <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> и ещё {COUNT} сайтов.}other{Для <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> и ещё {COUNT} сайта.}}</translation> +<translation id="6390533465682072118">Пароль для восстановления</translation> <translation id="6391131092053186625">IMEI-код вашего устройства – <ph name="IMEI_NUMBER" />. Его можно использовать для активации сервиса.</translation> <translation id="6393156038355142111">Сгенерировать надежный пароль</translation> <translation id="6393550101331051049">Разрешить сайтам показывать небезопасный контент</translation> @@ -7714,6 +7723,7 @@ <translation id="6455521402703088376">Отключено • Разработчик отменил публикацию этого расширения</translation> <translation id="6455894534188563617">&Новая папка</translation> <translation id="645705751491738698">Всегда блокировать JavaScript</translation> +<translation id="6457572529564180082">Не удалось запустить приложение "<ph name="APP_NAME" />"</translation> <translation id="6458606150257356946">Все равно вставить</translation> <translation id="6458701200018867744">Ошибка загрузки (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Найти выделенное</translation> @@ -8012,6 +8022,7 @@ <translation id="6667187897999649121">Сейчас вы можете предоставлять доступ к паролям только участникам семейной группы. <ph name="BEGIN_LINK" />Создайте ее<ph name="END_LINK" /> максимум для шести человек и пользуйтесь дополнительными возможностями продуктов и подписок Google.</translation> <translation id="666731172850799929">Открыть в <ph name="APP_NAME" /></translation> <translation id="6669195257625975787">К данным применяются параметры, выбранные для сайта, который вы просматриваете</translation> +<translation id="6669637573228217624">Загрузить файл</translation> <translation id="6670142487971298264">Срок блокировки приложения "<ph name="APP_NAME" />" истек.</translation> <translation id="6670767097276846646">Некоторые расширения могут добавлять поисковые системы в Chrome.</translation> <translation id="6670983860904543332">Благодаря автоматическому обновлению у вас всегда есть доступ к самым последним функциям. Оцените некоторые из них.</translation> @@ -8151,6 +8162,7 @@ <translation id="6771503742377376720">Является центром сертификации</translation> <translation id="6772974422346500939">Открыть и редактировать</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">Необходимо ввести одноразовый код</translation> <translation id="6774710250118040929">Добавление пароля</translation> <translation id="6775163072363532304">Здесь будут появляться доступные устройства.</translation> <translation id="6775992990195573904">Наведите порядок во вкладках</translation> @@ -9269,6 +9281,7 @@ <translation id="7566118625369982896">Управление ссылками на приложение в Google Play</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">Создать сочетание клавиш</translation> +<translation id="7567100268516475532">Добавить вкладку в режим Split View</translation> <translation id="7568014768212280234">Ваша группа вкладок заполнена. Новые участники не смогут присоединиться по ссылке.</translation> <translation id="7568759527730933493">Поиск IP-адресов сайтов в DNS (системе доменных имен) будет выполняться через защищенное подключение. Для этого используется управляемый поставщик услуг: <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" />. Для некоторых доменов, настроенных администратором, защищенные подключения не используются.</translation> <translation id="756876171895853918">Настроить аватар</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index d9919d12..4c3471c 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">กำลังโหลดหน้าตัวอย่าง</translation> <translation id="1032605640136438169">โปรดอ่านข้อกำหนดใหม่</translation> <translation id="103279545524624934">เพิ่มพื้นที่ว่างในดิสก์เพื่อเปิดแอป Android</translation> +<translation id="1033060461778467949">ย้ายแท็บไปยังมุมมองแบบแยก</translation> <translation id="1033780634303702874">เข้าถึงอุปกรณ์ซีเรียล</translation> <translation id="1034484273907870301">แนวแท็บภาพขนาดย่อสำหรับโหมดแท็บเล็ต</translation> <translation id="1035289631433631911">เครื่องมือ Content Transfer</translation> @@ -1914,6 +1915,7 @@ <translation id="2312219318583366810">URL ของหน้าเว็บ</translation> <translation id="2314165183524574721">การตั้งค่าระดับการเข้าถึงปัจจุบันซ่อนอยู่</translation> <translation id="2314774579020744484">ภาษาที่ใช้เมื่อแปลหน้า</translation> +<translation id="2316090909467242775">ลองใช้รหัสผ่านสำหรับการกู้คืนนี้</translation> <translation id="2316129865977710310">ไม่เป็นไร</translation> <translation id="2316433409811863464">การสตรีมแอป</translation> <translation id="2316709634732130529">ใช้รหัสผ่านที่แนะนำ</translation> @@ -3537,6 +3539,7 @@ <translation id="3462413494201477527">ยกเลิกการสร้างบัญชีใช่ไหม</translation> <translation id="346298925039590474">เครือข่ายมือถือนี้จะพร้อมใช้งานสำหรับผู้ใช้ทุกคนในอุปกรณ์นี้</translation> <translation id="3464145797867108663">เพิ่มโปรไฟล์งาน</translation> +<translation id="34673353983913587">เว็บไซต์ต้องการการยืนยันเพิ่มเติมก่อนจึงจะบันทึกรหัสผ่านใหม่ได้</translation> <translation id="3468298837301810372">ป้ายกำกับ</translation> <translation id="3468999815377931311">โทรศัพท์ Android</translation> <translation id="3469583217479686109">เครื่องมือการเลือก</translation> @@ -3564,6 +3567,7 @@ <translation id="3487007233252413104">ฟังก์ชันที่ไม่ระบุชื่อ</translation> <translation id="3487649228420469005">สแกนเสร็จแล้ว</translation> <translation id="3488199663160411179">ชื่อ</translation> +<translation id="3489457144969823485">แอป Chrome จะหยุดทำงานบนอุปกรณ์ ChromeOS ในเดือนกรกฎาคม 2025 ลองใช้แอปอื่น</translation> <translation id="3490695139702884919">กำลังดาวน์โหลด... <ph name="PERCENT" />%</translation> <translation id="3491171603443463516">กู้คืนข้อมูลในเครื่องได้หากคุณลืม PIN หรือรหัสผ่าน</translation> <translation id="3491616972057195633">คีย์ตีกลับ</translation> @@ -4031,6 +4035,7 @@ <translation id="3792973596468118484">ส่วนขยาย <ph name="NUM_EXTENSIONS" /> รายการ</translation> <translation id="3794792524918736965">เปิด Windows Hello</translation> <translation id="379509625511193653">ปิด</translation> +<translation id="3795624560191557077">คุณเพิ่งเปลี่ยนรหัสผ่านที่พบในการละเมิดข้อมูลสาธารณะ ในกรณีที่เกิดปัญหา เครื่องมือจัดการรหัสผ่านบน Google จะช่วยให้คุณลงชื่อเข้าใช้ได้</translation> <translation id="3796215473395753611">Alt + ลูกศรขึ้น</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" /> ใช้ปุ่มลูกศรขวาเพื่อฟังตัวอย่างเสียง</translation> <translation id="3796648294839530037">เครือข่ายที่ชื่นชอบ:</translation> @@ -5848,6 +5853,7 @@ <translation id="5088534251099454936">PKCS #1 SHA-512 พร้อมการเข้ารหัส RSA</translation> <translation id="5090637338841444533">ไม่ได้รับอนุญาตให้ติดตามตำแหน่งของกล้อง</translation> <translation id="5091636240353511739">แสดง PIN</translation> +<translation id="5093417502834168387">หากมีปัญหาในการลงชื่อเข้าใช้ ลองวิธีอื่น</translation> <translation id="5093477827231450397">รายการเว็บไซต์ที่คุณบล็อกและไม่ต้องการให้แนะนำโฆษณาไปยังเว็บไซต์อื่นๆ</translation> <translation id="5093569275467863761">ซับเฟรมแคชย้อนหลังในโหมดไม่ระบุตัวตน: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">คุณสามารถเปิดและแก้ไขไฟล์ที่ระบบรองรับด้วยแอปนี้ได้จากแอป Files หรือจากแอปอื่นๆ หากต้องการควบคุมว่ามีไฟล์ใดบ้างที่เปิดในแอปนี้ได้โดยค่าเริ่มต้น ให้<ph name="BEGIN_LINK" />ดูวิธีตั้งค่าแอปเริ่มต้นในอุปกรณ์<ph name="END_LINK" /></translation> @@ -6782,6 +6788,7 @@ <translation id="5785583009707899920">ยูทิลิตีไฟล์ของ Chrome</translation> <translation id="5787146423283493983">ข้อตกลงเกี่ยวกับคีย์</translation> <translation id="5787420647064736989">ชื่ออุปกรณ์</translation> +<translation id="5787582109651427233">ไปที่ Google Wallet เพื่อเพิ่มหรือจัดการ<ph name="BEGIN_LINK_LOYALTY_CARDS" />บัตรสะสมคะแนน<ph name="END_LINK_LOYALTY_CARDS" />หรือ<ph name="BEGIN_LINK_PAYMENT_METHODS" />วิธีการชำระเงิน<ph name="END_LINK_PAYMENT_METHODS" />ของ Google Pay</translation> <translation id="5788367137662787332">ขออภัย ไม่สามารถติดตั้งอย่างน้อยหนึ่งพาร์ทิชันลงในอุปกรณ์ <ph name="DEVICE_LABEL" /> ได้</translation> <translation id="5789581866075720267">หากต้องการนำเข้ารหัสผ่านไปยัง<ph name="BRAND" /> ในอุปกรณ์นี้ ให้เลือกไฟล์ CSV</translation> <translation id="5790085346892983794">สำเร็จ</translation> @@ -7266,6 +7273,7 @@ <translation id="6131511889181741773">การสาดสี</translation> <translation id="6132251717264923430">ปักหมุดปุ่มแล้ว</translation> <translation id="6132714462430777655">ข้ามการลงทะเบียนโรงเรียนไหม</translation> +<translation id="6134418895482326458">ซ่อนส่วนท้ายในหน้าแท็บใหม่</translation> <translation id="6134428719487602109">นําบัญชีผู้ใช้ทั้งหมดออกและรีเซ็ต Chromebook ให้เหมือนใหม่</translation> <translation id="6135826623269483856">ไม่อนุญาตให้จัดการหน้าต่างบนจอแสดงผลทั้งหมด</translation> <translation id="6136114942382973861">ปิดแถบดาวน์โหลด</translation> @@ -7622,6 +7630,7 @@ <translation id="6388577073199278153">เข้าถึงบัญชีในอุปกรณ์เคลื่อนที่ไม่ได้ใช่ไหม</translation> <translation id="6390020764191254941">ย้ายแท็บไปที่หน้าต่างใหม่</translation> <translation id="6390046581187330789">{COUNT,plural, =0{ไม่มี}=1{สำหรับ <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> และอีก 1 โดเมน}other{สำหรับ <ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" /> และอีก {COUNT} โดเมน}}</translation> +<translation id="6390533465682072118">การกู้คืน</translation> <translation id="6391131092053186625">IMEI ของอุปกรณ์คือ <ph name="IMEI_NUMBER" /> คุณใช้หมายเลขนี้เพื่อช่วยเปิดใช้งานบริการได้</translation> <translation id="6393156038355142111">แนะนำรหัสผ่านที่รัดกุม</translation> <translation id="6393550101331051049">ได้รับอนุญาตให้แสดงเนื้อหาที่ไม่ปลอดภัย</translation> @@ -7706,6 +7715,7 @@ <translation id="6455521402703088376">ปิด • นักพัฒนาเลิกเผยแพร่ส่วนขยายนี้แล้ว</translation> <translation id="6455894534188563617">และโฟลเดอร์ใหม่</translation> <translation id="645705751491738698">บล็อกการเรียกใช้ JavaScript</translation> +<translation id="6457572529564180082">เปิดใช้งาน <ph name="APP_NAME" /> ไม่ได้</translation> <translation id="6458606150257356946">วางเลย</translation> <translation id="6458701200018867744">อัปโหลดไม่สำเร็จ (<ph name="WEBRTC_LOG_UPLOAD_TIME" />)</translation> <translation id="6459488832681039634">ใช้สิ่งที่เลือกเพื่อค้นหา</translation> @@ -7998,6 +8008,7 @@ <translation id="6667187897999649121">เฉพาะตอนนี้ คุณจะแชร์รหัสผ่านกับสมาชิกในครอบครัวได้เท่านั้น <ph name="BEGIN_LINK" />สร้างกลุ่มครอบครัว<ph name="END_LINK" />ที่มีสมาชิกได้สูงสุด 6 คนและใช้ประโยชน์จากผลิตภัณฑ์และการสมัครใช้บริการใน Google ได้มากขึ้น</translation> <translation id="666731172850799929">เปิดใน <ph name="APP_NAME" /></translation> <translation id="6669195257625975787">ระบบจะดำเนินการกับข้อมูลเช่นเดียวกับเว็บไซต์ที่คุณกําลังดู</translation> +<translation id="6669637573228217624">อัปโหลดไฟล์</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> พร้อมใช้งานแล้ว</translation> <translation id="6670767097276846646">ส่วนขยายบางอย่างจะเพิ่มเครื่องมือค้นหาลงใน Chrome ได้</translation> <translation id="6670983860904543332">การอัปเดตอัตโนมัติทำให้คุณได้ใช้ฟีเจอร์ล่าสุด สำรวจไฮไลต์จากการอัปเดตล่าสุด</translation> @@ -8137,6 +8148,7 @@ <translation id="6771503742377376720">เป็นผู้ออกใบรับรอง</translation> <translation id="6772974422346500939">เปิดและแก้ไข</translation> <translation id="6773595613448852535">Chrome Root Store</translation> +<translation id="677394079035748956">เว็บไซต์ต้องการรหัสผ่านที่สามารถใช้งานได้เพียงครั้งเดียว</translation> <translation id="6774710250118040929">เพิ่มรหัสผ่านใหม่</translation> <translation id="6775163072363532304">อุปกรณ์ที่ใช้ได้จะแสดงที่นี่</translation> <translation id="6775992990195573904">จัดเรียงแท็บ</translation> @@ -9255,6 +9267,7 @@ <translation id="7566118625369982896">จัดการลิงก์ของแอป Play</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">สร้างชุดแป้น</translation> +<translation id="7567100268516475532">ย้ายแท็บไปยังมุมมองแบบแยก</translation> <translation id="7568014768212280234">กลุ่มแท็บเต็มแล้ว สมาชิกใหม่จึงเข้าร่วมโดยใช้ลิงก์ไม่ได้</translation> <translation id="7568759527730933493">ใช้การเชื่อมต่อที่ปลอดภัยเพื่อค้นหาที่อยู่ IP ของเว็บไซต์ใน DNS (ระบบชื่อโดเมน) ระบบนี้ใช้ผู้ให้บริการที่มีการจัดการที่ <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" /> ระบบจะไม่ใช้การเชื่อมต่อที่ปลอดภัยกับบางโดเมนที่ผู้ดูแลระบบกำหนดค่าไว้</translation> <translation id="756876171895853918">ปรับแต่งรูปโปรไฟล์</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 2d2ac0b5..2735f02 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -52,6 +52,7 @@ <translation id="1031362278801463162">پیش منظر لوڈ کیا جا رہا ہے</translation> <translation id="1032605640136438169">براہ کرم نئی شرائط کا جائزہ لیں</translation> <translation id="103279545524624934">Android ایپس شروع کرنے کیلئے ڈسک اسپیس خالی کریں۔</translation> +<translation id="1033060461778467949">ٹیب کو اسپلٹ ویو میں منتقل کریں</translation> <translation id="1033780634303702874">اپنے سلسلہ وار آلات تک رسائی حاصل کریں</translation> <translation id="1034484273907870301">ٹیبلیٹ وضع کے لیے تھمب نیل ٹیب اسٹرپ</translation> <translation id="1035289631433631911">مواد کی منتقلی کا ٹول</translation> @@ -1916,6 +1917,7 @@ <translation id="2312219318583366810">صفحہ کا URL</translation> <translation id="2314165183524574721">موجودہ نظر آنے کی ترتیب پوشیدہ ہے</translation> <translation id="2314774579020744484">صفحات کا ترجمہ کرتے وقت استعمال کی جانے والی زبان</translation> +<translation id="2316090909467242775">اس بازیابی پاس ورڈ کو آزمائیں</translation> <translation id="2316129865977710310">نہیں، شکریہ</translation> <translation id="2316433409811863464">ایپ کی سلسلہ بندی</translation> <translation id="2316709634732130529">تجویز کردہ پاس ورڈ استعمال کریں</translation> @@ -3539,6 +3541,7 @@ <translation id="3462413494201477527">اکاؤنٹ سیٹ اپ منسوخ کریں؟</translation> <translation id="346298925039590474">یہ موبائل نیٹ ورک اس آلہ پر سبھی صارفین کیلئے دستیاب ہوگا</translation> <translation id="3464145797867108663">دفتری پروفائل شامل کریں</translation> +<translation id="34673353983913587">اپنا نیا پاس ورڈ محفوظ کرنے سے پہلے، سائٹ کو اضافی تصدیق کی ضرورت ہے</translation> <translation id="3468298837301810372">لیبل</translation> <translation id="3468999815377931311">Android فون</translation> <translation id="3469583217479686109">انتخاب کرنے کا ٹول</translation> @@ -3566,6 +3569,7 @@ <translation id="3487007233252413104">گمنام فنکشن</translation> <translation id="3487649228420469005">اسکین ہو گیا</translation> <translation id="3488199663160411179">نام</translation> +<translation id="3489457144969823485">Chrome Apps نے جولائی 2025 میں ChromeOS آلات پر چلنا بند کر دیا۔ ایک متبادل ایپ پر غور کریں۔</translation> <translation id="3490695139702884919">ڈاؤن لوڈ ہو رہا ہے… %<ph name="PERCENT" /></translation> <translation id="3491171603443463516">آپ کا PIN یا پاس ورڈ بھول جانے پر مقامی ڈیٹا کو بحال کیا جا سکتا ہے</translation> <translation id="3491616972057195633">باؤنس کلیدیں</translation> @@ -4033,6 +4037,7 @@ <translation id="3792973596468118484"><ph name="NUM_EXTENSIONS" /> ایکسٹینشنز</translation> <translation id="3794792524918736965">Windows Hello کو آن کریں</translation> <translation id="379509625511193653">آف</translation> +<translation id="3795624560191557077">آپ نے حال ہی میں عوامی ڈیٹا کی خلاف ورزی میں پایا جانے والا پاس ورڈ تبدیل کیا ہے۔ دشواری کی صورت میں، Google پاس ورڈ مینیجر سائن ان کرنے میں آپ کی مدد کر سکتا ہے۔</translation> <translation id="3796215473395753611">alt + اوپر تیر کا نشان</translation> <translation id="3796421550129770366"><ph name="LANGUAGE" />، پیش منظر آواز کیلئے دائیں تیر کے نشان کی کلید استعمال کریں</translation> <translation id="3796648294839530037">پسندیدہ نیٹ ورکس:</translation> @@ -5850,6 +5855,7 @@ <translation id="5088534251099454936">PKCS #1 SHA-512 مع RSA مرموز کاری</translation> <translation id="5090637338841444533">آپ کے کیمرا کی پوزیشن کو ٹریک کرنے کی اجازت نہیں ہے</translation> <translation id="5091636240353511739">PIN دکھائیں</translation> +<translation id="5093417502834168387">سائن ان کرنے میں پریشانی؟ دوسرا طریقہ آزمائیں</translation> <translation id="5093477827231450397">آپ کی مسدود کردہ سائٹس کی فہرست جن سے آپ نہیں چاہتے ہیں کہ وہ دوسری سائٹس پر اشتہارات تجویز کرے</translation> <translation id="5093569275467863761">بیک/فارورڈ کیش کردہ پوشیدگی کا سب فریم: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">آپ اس ایپ کے ساتھ فائلز کی ایپس یا دیگر ایپس سے تعاون یافتہ فائلز کو کھول اور ان میں ترمیم کر سکتے ہیں۔ جو فائلز بطور ڈیفالٹ اس ایپ کو کھولتی ہیں انہیں کنٹرول کرنے کے لیے، <ph name="BEGIN_LINK" />جانیں کہ اپنے آلے پر ڈیفالٹ ایپس کیسے سیٹ کریں<ph name="END_LINK" />۔</translation> @@ -6785,6 +6791,7 @@ <translation id="5785583009707899920">Chrome فائل کی افادیتیں</translation> <translation id="5787146423283493983">کلیدی اقرارنامہ</translation> <translation id="5787420647064736989">آلہ کا نام</translation> +<translation id="5787582109651427233"><ph name="BEGIN_LINK_LOYALTY_CARDS" />لائلٹی کارڈز<ph name="END_LINK_LOYALTY_CARDS" /> یا Google Pay <ph name="BEGIN_LINK_PAYMENT_METHODS" />ادائیگی کے طریقے<ph name="END_LINK_PAYMENT_METHODS" /> شامل کرنے یا ان کا نظم کرنے کے لیے Google والٹ ملاحظہ کریں</translation> <translation id="5788367137662787332">معذرت، کم از کم ایک حصہ آلہ <ph name="DEVICE_LABEL" /> پر ماؤنٹ نہیں کیا جا سکا۔</translation> <translation id="5789581866075720267">اس آلے پر <ph name="BRAND" /> میں پاس ورڈز درآمد کرنے کے لیے، ایک CSV فائل منتخب کریں۔</translation> <translation id="5790085346892983794">کامیاب</translation> @@ -7270,6 +7277,7 @@ <translation id="6131511889181741773">اسپلیٹر</translation> <translation id="6132251717264923430">بٹن کو پن کیا گیا</translation> <translation id="6132714462430777655">اسکول میں اندراج کو نظر انداز کریں؟</translation> +<translation id="6134418895482326458">نئے ٹیب صفحہ پر فوٹر چھپائیں</translation> <translation id="6134428719487602109">بالکل نئے کی طرح ہونے کیلئے صارف کے سبھی اکاؤنٹس ہٹائیں اور اپنا Chromebook ری سیٹ کریں۔</translation> <translation id="6135826623269483856">آپ کے سبھی ڈسپلیز پر ونڈوز کا نظم کرنے کی اجازت نہیں ہے</translation> <translation id="6136114942382973861">ڈاؤن لوڈز بار بند کریں</translation> @@ -7626,6 +7634,7 @@ <translation id="6388577073199278153">اپنے موبائل اکاؤنٹ تک رسائی حاصل نہیں کر سکتے</translation> <translation id="6390020764191254941">ٹیب کو نئی ونڈو میں منتقل کریں</translation> <translation id="6390046581187330789">{COUNT,plural, =0{کوئی نہیں}=1{<ph name="EXAMPLE_DOMAIN_1" />، <ph name="EXAMPLE_DOMAIN_2" /> اور 1 مزید کے لیے}other{<ph name="EXAMPLE_DOMAIN_1" />،<ph name="EXAMPLE_DOMAIN_2" /> اور {COUNT} مزید کے لیے}}</translation> +<translation id="6390533465682072118">بازیابی</translation> <translation id="6391131092053186625">آپ کے آلے کی IMEI <ph name="IMEI_NUMBER" /> ہے۔ سروس کو فعال کرنے میں مدد کے لیے اس نمبر کا استعمال کیا جا سکتا ہے۔</translation> <translation id="6393156038355142111">مضبوط پاس ورڈ تجویز کریں</translation> <translation id="6393550101331051049">غیر محفوظ مواد دکھانے کی اجازت ہے</translation> @@ -7710,6 +7719,7 @@ <translation id="6455521402703088376">آف ہے • اس ایکسٹینشن کی اشاعت اس کے ڈویلپر نے ختم کی تھی</translation> <translation id="6455894534188563617">&نیا فولڈر</translation> <translation id="645705751491738698">JavaScript کو مسدود کرنا جاری رکھیں</translation> +<translation id="6457572529564180082"><ph name="APP_NAME" /> کو لانچ نہیں کیا جا سکتا</translation> <translation id="6458606150257356946">بہر حال پیسٹ کریں</translation> <translation id="6458701200018867744">اپ لوڈ نہیں ہو سکا (<ph name="WEBRTC_LOG_UPLOAD_TIME" />)۔</translation> <translation id="6459488832681039634">تلاش کیلئے انتخاب کا استعمال کریں</translation> @@ -8002,6 +8012,7 @@ <translation id="6667187897999649121">ابھی کے لیے، آپ صرف فیملی ممبرز کے ساتھ پاس ورڈز کا اشتراک کر سکتے ہیں۔ 6 اراکین تک کا <ph name="BEGIN_LINK" />ایک فیملی گروپ بنائیں<ph name="END_LINK" /> اور Google پر اپنے پروڈکٹس اور سبسکرپشنز سے مزید حاصل کریں۔</translation> <translation id="666731172850799929"><ph name="APP_NAME" /> میں کھولیں</translation> <translation id="6669195257625975787">ڈیٹا کے ساتھ اس سائٹ کی طرح سلوک کیا جاتا ہے جسے آپ دیکھ رہے ہیں</translation> +<translation id="6669637573228217624">ایک فائل اپ لوڈ کریں</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> ابھی دستیاب ہے</translation> <translation id="6670767097276846646">کچھ ایکسٹینشنز سرچ انجنز کو Chrome میں شامل کر سکتی ہیں</translation> <translation id="6670983860904543332">خودکار اپ ڈیٹس آپ کو تازہ ترین خصوصیات فراہم کرتی ہیں۔ حالیہ اپ ڈیٹس سے ہائی لائٹس دریافت کریں۔</translation> @@ -8141,6 +8152,7 @@ <translation id="6771503742377376720">ایک سرٹیفیکیشن ادارہ ہے</translation> <translation id="6772974422346500939">کھولیں اور ترمیم کریں</translation> <translation id="6773595613448852535">Chrome روٹ اسٹور</translation> +<translation id="677394079035748956">سائٹ کو ون ٹائم پاس ورڈ کی ضرورت ہے</translation> <translation id="6774710250118040929">نیا پاس ورڈ شامل کریں</translation> <translation id="6775163072363532304">دستیاب آلات یہاں دکھائی دیں گے۔</translation> <translation id="6775992990195573904">اپنے ٹیبز کو ترتیب دیں</translation> @@ -9259,6 +9271,7 @@ <translation id="7566118625369982896">Play ایپ لنکس کا نظم کریں</translation> <translation id="7566723889363720618">F12</translation> <translation id="7566969018588966785">کلید کا جوڑا تخلیق کریں</translation> +<translation id="7567100268516475532">ٹیب کو اسپلٹ ویو میں منتقل کریں</translation> <translation id="7568014768212280234">آپ کا ٹیب گروپ بھرا ہوا ہے، نئے اراکین اس لنک سے شامل نہیں ہو سکتے</translation> <translation id="7568759527730933493">DNS (ڈومین ناموں کا نظام) میں سائٹ کا IP پتہ تلاش کرنے کے لیے محفوظ کنکشن استعمال کریں۔ یہ <ph name="DNS_SERVER_TEMPLATE_WITH_IDENTIFIER" /> پر نظم کردہ سروس فراہم کنندہ کا استعمال کرتا ہے۔ آپ کے منتظم کے ذریعے کنفیگر کیے گئے کچھ ڈومینز کے لیے محفوظ کنکشنز استعمال نہیں کیے جاتے ہیں۔</translation> <translation id="756876171895853918">اوتار کو حسب ضرورت بنائیں</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb index cfce57a..3edd6a2 100644 --- a/chrome/app/resources/google_chrome_strings_bn.xtb +++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -270,6 +270,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{আপনার ব্রাউজারের গতি কমিয়ে দেয় এমন ট্যাব পজ করার জন্য Chrome সাজেস্ট করে}one{আপনার ব্রাউজারের গতি কমিয়ে দেয় এমন ট্যাব পজ করার জন্য Chrome সাজেস্ট করে}other{আপনার ব্রাউজারের গতি কমিয়ে দেয় এমন ট্যাবগুলি পজ করার জন্য Chromium সাজেস্ট করে}}</translation> <translation id="4328355335528187361">Google Chrome ডেভেলপার (mDNS-In)</translation> <translation id="4329315893554541805">পছন্দমতো সুবিধা ও অন্যান্য ফিচার ব্যবহার করতে ওয়েব ও অ্যাপ অ্যাক্টিভিটি ও লিঙ্ক করা Google পরিষেবায় Chrome যোগ করে নিন</translation> +<translation id="4334241893986177674">এই স্ক্রিনশট সার্চ করুন</translation> <translation id="4334294535648607276">ডাউনলোড সম্পূর্ণ।</translation> <translation id="4337324600316876133">আপনার কাছে macOS 12 বা তার পরের ভার্সন থাকলে, তবেই ভবিষ্যতে Google Chrome সম্পর্কিত আপডেট পাবেন। এই কম্পিউটারে macOS 11 ভার্সন ব্যবহার করা হচ্ছে।</translation> <translation id="4343195214584226067">Chrome-এ <ph name="EXTENSION_NAME" /> যোগ করা হয়েছে</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb index 879618d0..95f4bbb 100644 --- a/chrome/app/resources/google_chrome_strings_el.xtb +++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -270,6 +270,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Το Chrome συνιστά να θέσετε σε παύση την καρτέλα που επιβραδύνει το πρόγραμμα περιήγησης}other{Το Chrome συνιστά να θέσετε σε παύση τις καρτέλες που επιβραδύνουν το πρόγραμμα περιήγησης}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">Για να αξιοποιήσετε την εξατομίκευση και άλλες λειτουργίες, συμπεριλάβετε το Chrome στη Δραστηριότητα ιστού και εφαρμογών και στις συνδεδεμένες υπηρεσίες Google</translation> +<translation id="4334241893986177674">Αναζήτηση αυτού του στιγμιότυπου οθόνης</translation> <translation id="4334294535648607276">Η λήψη ολοκληρώθηκε.</translation> <translation id="4337324600316876133">Για τη λήψη μελλοντικών ενημερώσεων του Google Chrome, θα χρειαστείτε macOS 12 ή νεότερη έκδοση. Αυτός ο υπολογιστής χρησιμοποιεί macOS 11.</translation> <translation id="4343195214584226067">Η επέκταση <ph name="EXTENSION_NAME" /> προστέθηκε στο Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb index 295f870..7206e85 100644 --- a/chrome/app/resources/google_chrome_strings_es.xtb +++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -272,6 +272,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome recomienda pausar la pestaña que ralentiza tu navegador}other{Chrome recomienda pausar las pestañas que ralentizan tu navegador}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">Para disfrutar de personalización y otras funciones, incluye Chrome en Actividad en la Web y en Aplicaciones y en los servicios de Google vinculados</translation> +<translation id="4334241893986177674">Buscar en esta captura de pantalla</translation> <translation id="4334294535648607276">Descarga completa.</translation> <translation id="4337324600316876133">Para recibir futuras actualizaciones de Google Chrome, necesitarás macOS 12 o una versión posterior. Este ordenador usa macOS 11.</translation> <translation id="4343195214584226067"><ph name="EXTENSION_NAME" /> se ha añadido a Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb index 6315be3..49277a0 100644 --- a/chrome/app/resources/google_chrome_strings_fa.xtb +++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -545,7 +545,7 @@ <translation id="7959172989483770734">مدیریت نمایههای Chrome</translation> <translation id="7962410387636238736">این رایانه دیگر بهروزرسانیهای Google Chrome را دریافت نمیکند زیرا Windows XP و Windows Vista دیگر پشتیبانی نمیشوند</translation> <translation id="8004582292198964060">مرورگر</translation> -<translation id="8005666035647241369">به «مدیر گذرواژه Google» در این دستگاه</translation> +<translation id="8005666035647241369">در «مدیر گذرواژه Google» در این دستگاه</translation> <translation id="8008534537613507642">نصب مجدد Chrome</translation> <translation id="8009904340233602924">استفاده از Chrome بدون حساب</translation> <translation id="8010081455002666927">شناسایی خودکار</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gu.xtb b/chrome/app/resources/google_chrome_strings_gu.xtb index c517c72..a8d2f4e1 100644 --- a/chrome/app/resources/google_chrome_strings_gu.xtb +++ b/chrome/app/resources/google_chrome_strings_gu.xtb
@@ -272,6 +272,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chromeનો સુઝાવ છે કે તમારા બ્રાઉઝરની સ્પીડને ધીમી કરી રહ્યું હોય એવા ટૅબને થોભાવી દો}one{Chromeનો સુઝાવ છે કે તમારા બ્રાઉઝરની સ્પીડને ધીમી કરી રહ્યું હોય એવા ટૅબને થોભાવી દો}other{Chromeનો સુઝાવ છે કે તમારા બ્રાઉઝરની સ્પીડને ધીમી કરી રહ્યાં હોય એવા ટૅબને થોભાવી દો}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">મનગમતું બનાવવાની અને અન્ય સુવિધાઓ મેળવવા માટે, Chromeનો વેબ અને ઍપ ઍક્ટિવિટી અને લિંક કરેલી Google સેવાઓમાં સમાવેશ કરો</translation> +<translation id="4334241893986177674">આ સ્ક્રીનશૉટ શોધો</translation> <translation id="4334294535648607276">ડાઉનલોડ પૂર્ણ.</translation> <translation id="4337324600316876133">Google Chromeની ભાવિ અપડેટ મેળવવા માટે, તમારે macOS 12 કે તે પછીના વર્ઝન પર અપડેટ કરવું જરૂરી રહેશે. આ કમ્પ્યૂટર macOS 11નો ઉપયોગ કરી રહ્યું છે.</translation> <translation id="4343195214584226067"><ph name="EXTENSION_NAME" />ને Chromeમાં ઉમેરવામાં આવ્યું છે</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb index 8823ba3..e1ff7d83 100644 --- a/chrome/app/resources/google_chrome_strings_ja.xtb +++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -267,6 +267,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{ブラウザの動作を遅くしているタブを一時停止することをおすすめします}other{ブラウザの動作を遅くしているタブを一時停止することをおすすめします}}</translation> <translation id="4328355335528187361">Google Chrome Dev(mDNS-In)</translation> <translation id="4329315893554541805">パーソナライズなどの機能を利用するには、Chrome をウェブとアプリのアクティビティと、リンクされた Google サービスに追加します</translation> +<translation id="4334241893986177674">このスクリーンショットを検索</translation> <translation id="4334294535648607276">ダウンロードが完了しました。</translation> <translation id="4337324600316876133">今後、Google Chrome のアップデートを受信するには、macOS 12 以降が必要となります。このコンピュータでは macOS 11 が実行されています。</translation> <translation id="4343195214584226067">「<ph name="EXTENSION_NAME" />」が Chrome に追加されました</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ka.xtb b/chrome/app/resources/google_chrome_strings_ka.xtb index a9b6b0f..87a5029a9 100644 --- a/chrome/app/resources/google_chrome_strings_ka.xtb +++ b/chrome/app/resources/google_chrome_strings_ka.xtb
@@ -272,6 +272,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome გირჩევთ, დააპაუზოთ ჩანართი, რომელიც ანელებს თქვენი ბრაუზერის მუშაობას}other{Chrome გირჩევთ, დააპაუზოთ ჩანართები, რომლებიც ანელებს თქვენი ბრაუზერის მუშაობას}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">პერსონალიზაციის და სხვა ფუნქციებით რომ ისარგებლოთ, დაურთეთ Chrome როგორც ვებსა და აპებში აქტივობას, ისე მიბმულ Google სერვისებს</translation> +<translation id="4334241893986177674">ეკრანის ამ ანაბეჭდის მოძიება</translation> <translation id="4334294535648607276">ჩამოტვირთვა დასრულდა.</translation> <translation id="4337324600316876133">მომავალში Google Chrome-ის განახლებების მისაღებად დაგჭირდებათ macOS 12 ან უფრო ახალი ვერსია. ეს კომპიუტერი იყენებს macOS 11-ს.</translation> <translation id="4343195214584226067"><ph name="EXTENSION_NAME" /> დაემატა Chrome-ს</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kk.xtb b/chrome/app/resources/google_chrome_strings_kk.xtb index 674fefc..2d40891 100644 --- a/chrome/app/resources/google_chrome_strings_kk.xtb +++ b/chrome/app/resources/google_chrome_strings_kk.xtb
@@ -271,6 +271,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome браузер жұмысын баяулататын қойындыны кідіртуді ұсынады}other{Chrome браузер жұмысын баяулататын қойындыларды кідіртуді ұсынады}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">Жекелендіру мен басқа функцияларды алу үшін Chrome-ды интернет пен қолданбаларды пайдалану тарихы мен байланысқан Google қызметтеріне қосыңыз.</translation> +<translation id="4334241893986177674">Осы скриншотты іздеу</translation> <translation id="4334294535648607276">Жүктеп алынды.</translation> <translation id="4337324600316876133">Google Chrome-ның жаңа нұсқаларын алып тұру үшін macOS 12 не одан кейінгі операциялық жүйе керек болады. Бұл компьютерде macOS 11 нұсқасы орнатылған.</translation> <translation id="4343195214584226067"><ph name="EXTENSION_NAME" /> кеңейтімі Chrome браузеріне енгізілді</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lt.xtb b/chrome/app/resources/google_chrome_strings_lt.xtb index 930880e..243342b 100644 --- a/chrome/app/resources/google_chrome_strings_lt.xtb +++ b/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -272,6 +272,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{„Chrome“ rekomenduoja pristabdyti skirtuką, kuris lėtina naršyklę}one{„Chrome“ rekomenduoja pristabdyti skirtukus, kurie lėtina naršyklę}few{„Chrome“ rekomenduoja pristabdyti skirtukus, kurie lėtina naršyklę}many{„Chrome“ rekomenduoja pristabdyti skirtukus, kurie lėtina naršyklę}other{„Chrome“ rekomenduoja pristabdyti skirtukus, kurie lėtina naršyklę}}</translation> <translation id="4328355335528187361">„Google Chrome Dev“ („mDNS-In“)</translation> <translation id="4329315893554541805">Jei norite naudoti suasmeninimo ir kitas funkcijas, įtraukite „Chrome“ į Žiniatinklio ir programų veiklą bei susietas „Google“ paslaugas</translation> +<translation id="4334241893986177674">Ieškoti šioje ekrano kopijoje</translation> <translation id="4334294535648607276">Atsisiuntimas baigtas.</translation> <translation id="4337324600316876133">Jei norite gauti būsimus „Google Chrome“ naujinius, jums reikės 12 ar naujesnės „macOS“ versijos. Šiame kompiuteryje naudojama 11 versijos „macOS“.</translation> <translation id="4343195214584226067">Plėtinys „<ph name="EXTENSION_NAME" />“ pridėtas prie „Chrome“</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ne.xtb b/chrome/app/resources/google_chrome_strings_ne.xtb index dd3d285..fd8fb2a 100644 --- a/chrome/app/resources/google_chrome_strings_ne.xtb +++ b/chrome/app/resources/google_chrome_strings_ne.xtb
@@ -270,6 +270,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome ले तपाईंको ब्राउजर सुस्त बनाउने ट्याब पज गर्न सिफारिस गर्छ}other{Chrome ले तपाईंको ब्राउजर सुस्त बनाउने ट्याबहरू पज गर्न सिफारिस गर्छ}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">पर्सनलाइजेसन र अन्य सुविधाहरू प्राप्त गर्न Chrome लाई वेब तथा एपसम्बन्धी गतिविधि र Google का लिंक गरिएका सेवाहरूमा समावेश गर्नुहोस्</translation> +<translation id="4334241893986177674">यो स्क्रिनसट खोज्नुहोस्</translation> <translation id="4334294535648607276">डाउनलोड सम्पन्न भयो</translation> <translation id="4337324600316876133">तपाईंको कम्प्युटरमा macOS 12 वा सोभन्दा नयाँ संस्करण इन्स्टल गरिएको छ भने मात्र तपाईं भविष्यमा Google Chrome का अपडेट प्राप्त गर्नुहुन्छ। यो कम्प्युटरमा macOS 11 प्रयोग भइरहेको छ।</translation> <translation id="4343195214584226067"><ph name="EXTENSION_NAME" /> लाई Chrome मा थपिएको छ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb index 6d1856c6..452e064 100644 --- a/chrome/app/resources/google_chrome_strings_nl.xtb +++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -271,6 +271,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome raadt aan het tabblad dat je browser vertraagt te onderbreken}other{Chrome raadt aan de tabbladen die je browser vertragen te onderbreken}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">Als je personalisatie en andere functies wilt krijgen, neem je Chrome op in Web- en app-activiteit en gekoppelde Google-services</translation> +<translation id="4334241893986177674">Zoeken in dit screenshot</translation> <translation id="4334294535648607276">Downloaden voltooid.</translation> <translation id="4337324600316876133">Als je toekomstige Google Chrome-updates wilt krijgen, heb je macOS 12 of hoger nodig. Deze computer gebruikt macOS 11.</translation> <translation id="4343195214584226067"><ph name="EXTENSION_NAME" /> is toegevoegd aan Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index 2f66a1b..cc7b5e7f 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -267,6 +267,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome рекомендует приостановить работу вкладки, замедляющей браузер}one{Chrome рекомендует приостановить работу вкладок, замедляющих браузер}few{Chrome рекомендует приостановить работу вкладок, замедляющих браузер}many{Chrome рекомендует приостановить работу вкладок, замедляющих браузер}other{Chrome рекомендует приостановить работу вкладок, замедляющих браузер}}</translation> <translation id="4328355335528187361">Google Chrome для разработчиков (mDNS-In)</translation> <translation id="4329315893554541805">Чтобы настроить персонализацию и другие функции, добавьте Chrome в историю приложений и веб-поиска и связанные сервисы Google</translation> +<translation id="4334241893986177674">Поиск по скриншоту</translation> <translation id="4334294535648607276">Скачивание завершено.</translation> <translation id="4337324600316876133">На вашем устройстве используется macOS 11. Чтобы получать обновления Google Chrome, установите macOS 12 или более поздней версии.</translation> <translation id="4343195214584226067">Расширение "<ph name="EXTENSION_NAME" />" установлено</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb index 78b8afa..cb0d9d63 100644 --- a/chrome/app/resources/google_chrome_strings_th.xtb +++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -267,6 +267,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome แนะนำให้หยุดแท็บที่ทำให้เบราว์เซอร์ทำงานช้าลงชั่วคราว}other{Chrome แนะนำให้หยุดแท็บที่ทําให้เบราว์เซอร์ทำงานช้าลงชั่วคราว}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">รวม Chrome ไว้ในกิจกรรมบนเว็บและแอป ตลอดจนบริการของ Google ที่ลิงก์ไว้เพื่อรับการปรับเปลี่ยนในแบบของคุณและฟีเจอร์อื่นๆ</translation> +<translation id="4334241893986177674">ค้นหาในภาพหน้าจอนี้</translation> <translation id="4334294535648607276">ดาวน์โหลดเสร็จสมบูรณ์</translation> <translation id="4337324600316876133">คุณจะต้องใช้ macOS 12 ขึ้นไปเพื่อรับการอัปเดต Google Chrome ในอนาคต คอมพิวเตอร์เครื่องนี้ใช้ macOS 11</translation> <translation id="4343195214584226067">เพิ่ม <ph name="EXTENSION_NAME" /> ลงใน Chrome แล้ว</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ur.xtb b/chrome/app/resources/google_chrome_strings_ur.xtb index 8e17df7..d01d2163 100644 --- a/chrome/app/resources/google_chrome_strings_ur.xtb +++ b/chrome/app/resources/google_chrome_strings_ur.xtb
@@ -271,6 +271,7 @@ <translation id="4326552909330437744">{NUM_TABS,plural, =1{Chrome آپ کے براؤزر کی رفتار کو کم کرنے والے ٹیب کو روکنے کی تجویز دیتا ہے}other{Chrome آپ کے براؤزر کی رفتار کو کم کرنے والے ٹیبز کو روکنے کی تجویز دیتا ہے}}</translation> <translation id="4328355335528187361">Google Chrome Dev (mDNS-In)</translation> <translation id="4329315893554541805">ذاتی نوعيت سازی اور ديگر خصوصيات حاصل کرنے کے ليے ويب اور ايپ سرگرمی اور لنک کردہ Google سروسز ميں Chrome شامل کريں</translation> +<translation id="4334241893986177674">اس اسکرین شاٹ کو تلاش کریں</translation> <translation id="4334294535648607276">ڈاؤن لوڈ مکمل ہوگیا۔</translation> <translation id="4337324600316876133">مستقبل میں Google Chrome اپ ڈیٹس حاصل کرنے کے لیے آپ کو macOS 12 یا اس کے بعد کے ورژن کی ضرورت ہوگی۔ یہ کمپیوٹر macOS 11 کا استعمال کر رہا ہے۔</translation> <translation id="4343195214584226067"><ph name="EXTENSION_NAME" /> کو Chrome میں شامل کر دیا گیا ہے</translation>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 7b22c75b..48cbba3 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1038,13 +1038,19 @@ const FeatureEntry::FeatureParam kSoftNavigationHeuristicsAdvancedPaintAttribution[] = { {"mode", "advanced_paint_attribution"}}; +const FeatureEntry::FeatureParam + kSoftNavigationHeuristicsPrePaintBasedAttribution[] = { + {"mode", "pre_paint_based_attriubution"}}; const FeatureEntry::FeatureVariation kSoftNavigationHeuristicsVariations[] = { {"Basic (default)", kSoftNavigationHeuristicsBasic, std::size(kSoftNavigationHeuristicsBasic), nullptr}, - {"Advanced Paint Attribution", + {"Advanced Paint Attribution (Lazy Uncached Paint Walk)", kSoftNavigationHeuristicsAdvancedPaintAttribution, - std::size(kSoftNavigationHeuristicsAdvancedPaintAttribution), nullptr}}; + std::size(kSoftNavigationHeuristicsAdvancedPaintAttribution), nullptr}, + {"Advanced Paint Attribution (Eager Cached Pre-Paint Walk)", + kSoftNavigationHeuristicsPrePaintBasedAttribution, + std::size(kSoftNavigationHeuristicsPrePaintBasedAttribution), nullptr}}; const FeatureEntry::Choice kTopChromeTouchUiChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""},
diff --git a/chrome/browser/apps/app_service/metrics/app_platform_metrics_service_unittest.cc b/chrome/browser/apps/app_service/metrics/app_platform_metrics_service_unittest.cc index 817981d0..6091ab7 100644 --- a/chrome/browser/apps/app_service/metrics/app_platform_metrics_service_unittest.cc +++ b/chrome/browser/apps/app_service/metrics/app_platform_metrics_service_unittest.cc
@@ -433,7 +433,7 @@ browser_window1_ = std::make_unique<TestBrowserWindowAura>(std::move(window)); params.window = browser_window1_.get(); - return std::unique_ptr<Browser>(Browser::Create(params)); + return Browser::DeprecatedCreateOwnedForTesting(params); } std::unique_ptr<Browser> CreateBrowserWithAuraWindow2() { @@ -446,7 +446,7 @@ browser_window2_ = std::make_unique<TestBrowserWindowAura>(std::move(window)); params.window = browser_window2_.get(); - return std::unique_ptr<Browser>(Browser::Create(params)); + return Browser::DeprecatedCreateOwnedForTesting(params); } std::unique_ptr<Browser> CreateBrowserWindow( @@ -1837,7 +1837,7 @@ params.window = browser_window_.get(); browser_window_->SetNativeWindow(window()); params.window = browser_window_.get(); - return std::unique_ptr<Browser>(Browser::Create(params)); + return Browser::DeprecatedCreateOwnedForTesting(params); } TestApp& ActivatePreInstalledApp(const std::string& app_id) {
diff --git a/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc b/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc index 4743b025..02031903 100644 --- a/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc +++ b/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc
@@ -801,7 +801,7 @@ Browser::CreateParams params = Browser::CreateParams::CreateForApp( app_name, true, browser_window->GetBounds(), &profile_a_, true); params.window = browser_window.get(); - auto browser = std::unique_ptr<Browser>(Browser::Create(params)); + auto browser = Browser::DeprecatedCreateOwnedForTesting(params); manager_->OnBrowserAdded(browser.get()); // Validate that OnAppLaunchCancelled does not close the app, @@ -1506,7 +1506,7 @@ Browser::CreateParams params_a = Browser::CreateParams::CreateForApp( app_name, true, browser_window_a->GetBounds(), &profile_a_, true); params_a.window = browser_window_a.get(); - auto browser_a = std::unique_ptr<Browser>(Browser::Create(params_a)); + auto browser_a = Browser::DeprecatedCreateOwnedForTesting(params_a); manager_->OnBrowserAdded(browser_a.get()); // Select profile B from the menu. This should request that the app be @@ -1523,7 +1523,7 @@ Browser::CreateParams params_b = Browser::CreateParams::CreateForApp( app_name, true, browser_window_b->GetBounds(), &profile_b_, true); params_b.window = browser_window_b.get(); - auto browser_b = std::unique_ptr<Browser>(Browser::Create(params_b)); + auto browser_b = Browser::DeprecatedCreateOwnedForTesting(params_b); manager_->OnBrowserAdded(browser_b.get()); EXPECT_FALSE(browser_window_a->did_show); @@ -1897,7 +1897,7 @@ Browser::CreateParams params = Browser::CreateParams::CreateForApp( app_name, true, browser_window_a->GetBounds(), &profile_a_, true); params.window = browser_window_a.get(); - browser_profile_a = std::unique_ptr<Browser>(Browser::Create(params)); + browser_profile_a = Browser::DeprecatedCreateOwnedForTesting(params); } { @@ -1905,7 +1905,7 @@ Browser::CreateParams params = Browser::CreateParams::CreateForApp( app_name, true, browser_window_b->GetBounds(), &profile_b_, true); params.window = browser_window_b.get(); - browser_profile_b = std::unique_ptr<Browser>(Browser::Create(params)); + browser_profile_b = Browser::DeprecatedCreateOwnedForTesting(params); } // Set profile A browser as last active, and validate the application dock
diff --git a/chrome/browser/ash/child_accounts/family_user_chrome_activity_metrics_unittest.cc b/chrome/browser/ash/child_accounts/family_user_chrome_activity_metrics_unittest.cc index 4ab3e214..7bda834 100644 --- a/chrome/browser/ash/child_accounts/family_user_chrome_activity_metrics_unittest.cc +++ b/chrome/browser/ash/child_accounts/family_user_chrome_activity_metrics_unittest.cc
@@ -146,7 +146,7 @@ browser_window_ = std::make_unique<TestBrowserWindowAura>(std::move(window)); params.window = browser_window_.get(); - test_browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + test_browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } void SetSessionState(session_manager::SessionState state) { @@ -188,7 +188,7 @@ auto another_browser_window = std::make_unique<TestBrowserWindowAura>(std::move(window)); params.window = another_browser_window.get(); - auto another_browser = std::unique_ptr<Browser>(Browser::Create(params)); + auto another_browser = Browser::DeprecatedCreateOwnedForTesting(params); EXPECT_EQ(2U, BrowserList::GetInstance()->size());
diff --git a/chrome/browser/ash/notifications/multi_capture_notifications.cc b/chrome/browser/ash/notifications/multi_capture_notifications.cc index 0f39ed5e..717e4bb 100644 --- a/chrome/browser/ash/notifications/multi_capture_notifications.cc +++ b/chrome/browser/ash/notifications/multi_capture_notifications.cc
@@ -28,6 +28,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/grit/generated_resources.h" #include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" +#include "chromeos/constants/chromeos_features.h" #include "components/content_settings/core/common/pref_names.h" #include "components/prefs/pref_service.h" #include "components/user_manager/user.h" @@ -94,6 +95,11 @@ } void ShowLoginNotificationIfMultiCaptureAllowed() { + if (base::FeatureList::IsEnabled( + chromeos::features::kMultiCaptureReworkedUsageIndicators)) { + return; + } + auto* active_user = user_manager::UserManager::Get()->GetActiveUser(); if (!active_user) { return; @@ -198,9 +204,8 @@ const std::string& notification_id, const std::string& app_name, const url::Origin& app_origin) { - if (base::Contains(web_app::IwaKeyDistributionInfoProvider::GetInstance() - .GetSkipMultiCaptureNotificationBundleIds(), - app_origin.host())) { + if (base::FeatureList::IsEnabled( + chromeos::features::kMultiCaptureReworkedUsageIndicators)) { return; }
diff --git a/chrome/browser/ash/notifications/multi_capture_notifications_unittest.cc b/chrome/browser/ash/notifications/multi_capture_notifications_unittest.cc index 440dfd0b..ad64ac9 100644 --- a/chrome/browser/ash/notifications/multi_capture_notifications_unittest.cc +++ b/chrome/browser/ash/notifications/multi_capture_notifications_unittest.cc
@@ -27,6 +27,7 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" #include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h" +#include "chromeos/constants/chromeos_features.h" #include "components/account_id/account_id.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/sync_preferences/testing_pref_service_syncable.h" @@ -276,6 +277,8 @@ TEST_F(MultiCaptureNotificationsTest, AppOnSkipNotificationAllowlistNoNotification) { + base::test::ScopedFeatureList scoped_feature_list_{ + chromeos::features::kMultiCaptureReworkedUsageIndicators}; const url::Origin origin_with_allowlisted_exception = url::Origin::CreateFromNormalizedTuple( /*scheme=*/"isolated-app",
diff --git a/chrome/browser/download/bubble/download_bubble_ui_controller_unittest.cc b/chrome/browser/download/bubble/download_bubble_ui_controller_unittest.cc index e4c1fb9..68c9655 100644 --- a/chrome/browser/download/bubble/download_bubble_ui_controller_unittest.cc +++ b/chrome/browser/download/bubble/download_bubble_ui_controller_unittest.cc
@@ -176,7 +176,7 @@ Browser::CreateParams params(profile_, true); params.type = Browser::TYPE_NORMAL; params.window = window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); controller_ = std::make_unique<DownloadBubbleUIController>( browser_.get(), mock_update_service_.get()); display_controller_ =
diff --git a/chrome/browser/download/bubble/download_display_controller_unittest.cc b/chrome/browser/download/bubble/download_display_controller_unittest.cc index f7343a5f..169fd9da 100644 --- a/chrome/browser/download/bubble/download_display_controller_unittest.cc +++ b/chrome/browser/download/bubble/download_display_controller_unittest.cc
@@ -306,7 +306,7 @@ Browser::CreateParams params(profile_, true); params.type = Browser::TYPE_NORMAL; params.window = window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); bubble_controller_ = std::make_unique<DownloadBubbleUIController>( browser_.get(), mock_update_service_.get()); controller_ = std::make_unique<DownloadDisplayController>(
diff --git a/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api_unittest.cc b/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api_unittest.cc index 716debdb..0c2c0fc 100644 --- a/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api_unittest.cc +++ b/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api_unittest.cc
@@ -41,7 +41,7 @@ Browser::CreateParams browser_params(profile(), true); browser_params.type = Browser::TYPE_NORMAL; browser_params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(browser_params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(browser_params); model_ = BookmarkModelFactory::GetForBrowserContext(profile()); bookmarks::test::WaitForBookmarkModelToLoad(model_);
diff --git a/chrome/browser/extensions/api/management/management_api_unittest.cc b/chrome/browser/extensions/api/management/management_api_unittest.cc index 5ee93ed..8f845f0c 100644 --- a/chrome/browser/extensions/api/management/management_api_unittest.cc +++ b/chrome/browser/extensions/api/management/management_api_unittest.cc
@@ -176,7 +176,7 @@ Browser::CreateParams params(profile(), true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } void ManagementApiUnitTest::TearDown() {
diff --git a/chrome/browser/extensions/api/page_capture/page_capture_api_unittest.cc b/chrome/browser/extensions/api/page_capture/page_capture_api_unittest.cc index efc861e..8aa69e4 100644 --- a/chrome/browser/extensions/api/page_capture/page_capture_api_unittest.cc +++ b/chrome/browser/extensions/api/page_capture/page_capture_api_unittest.cc
@@ -31,7 +31,7 @@ Browser::CreateParams params(profile(), true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } void TearDown() override {
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc index 6e92545..83f0a1ce 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc
@@ -1394,7 +1394,7 @@ params.type = Browser::TYPE_NORMAL; auto window = std::make_unique<TestBrowserWindow>(); params.window = window.get(); - auto browser = std::unique_ptr<Browser>(Browser::Create(params)); + auto browser = Browser::DeprecatedCreateOwnedForTesting(params); NavigateParams nav_params(browser.get(), GURL("chrome://password-manager"), ui::PAGE_TRANSITION_TYPED); nav_params.tabstrip_index = 0;
diff --git a/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc b/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc index 855949b..91bc950a 100644 --- a/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc +++ b/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc
@@ -787,7 +787,7 @@ Browser::CreateParams params(profile(), true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); std::unique_ptr<content::WebContents> web_contents = content::WebContentsTester::CreateTestWebContents(profile(), nullptr);
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc index 83f4528..a91c0ea 100644 --- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc +++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc
@@ -101,7 +101,7 @@ Browser::CreateParams params(profile(), true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); ProfilePasswordStoreFactory::GetInstance()->SetTestingFactoryAndUse( profile(),
diff --git a/chrome/browser/extensions/api/search/search_api_unittest.cc b/chrome/browser/extensions/api/search/search_api_unittest.cc index d2227ec..1a0285b 100644 --- a/chrome/browser/extensions/api/search/search_api_unittest.cc +++ b/chrome/browser/extensions/api/search/search_api_unittest.cc
@@ -89,7 +89,7 @@ Browser::CreateParams params(profile(), /*user_gesture*/ true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); // Mock TemplateURLService. auto* template_url_service = static_cast<TemplateURLService*>(
diff --git a/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc b/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc index f6c7c75..707342a 100644 --- a/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc +++ b/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc
@@ -144,7 +144,7 @@ Browser::CreateParams params(profile(), /* user_gesture */ true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); BrowserList::SetLastActive(browser_.get()); // Add several tabs to the browser and get their tab IDs and web contents. @@ -194,7 +194,7 @@ // |window2|. new TestBrowserWindowOwner(std::move(window2)); - std::unique_ptr<Browser> browser2(Browser::Create(params)); + auto browser2 = Browser::DeprecatedCreateOwnedForTesting(params); BrowserList::SetLastActive(browser2.get()); ASSERT_FALSE(browser2->tab_strip_model()->SupportsTabGroups()); @@ -670,7 +670,7 @@ // |window2|. new TestBrowserWindowOwner(std::move(window2)); - std::unique_ptr<Browser> browser2(Browser::Create(params)); + auto browser2 = Browser::DeprecatedCreateOwnedForTesting(params); BrowserList::SetLastActive(browser2.get()); int window_id2 = ExtensionTabUtil::GetWindowId(browser2.get());
diff --git a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc index 61aaa40..1342306 100644 --- a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc +++ b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
@@ -164,7 +164,7 @@ Browser::CreateParams params(profile(), true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); tab_groups::TabGroupSyncService* saved_service = sync_service(); ASSERT_TRUE(saved_service); @@ -815,7 +815,7 @@ // TestBrowserWindowOwner handles its own lifetime, and also cleans up // |window2|. new TestBrowserWindowOwner(std::move(window2)); - std::unique_ptr<Browser> browser2(Browser::Create(params)); + auto browser2 = Browser::DeprecatedCreateOwnedForTesting(params); BrowserList::SetLastActive(browser2.get()); int window_id2 = ExtensionTabUtil::GetWindowId(browser2.get()); @@ -886,7 +886,7 @@ // TestBrowserWindowOwner handles its own lifetime, and also cleans up // |window2|. new TestBrowserWindowOwner(std::move(window2)); - std::unique_ptr<Browser> browser2(Browser::Create(params)); + auto browser2 = Browser::DeprecatedCreateOwnedForTesting(params); BrowserList::SetLastActive(browser2.get()); int window_id2 = ExtensionTabUtil::GetWindowId(browser2.get()); @@ -1149,7 +1149,7 @@ // TestBrowserWindowOwner handles its own lifetime, and also cleans up // |window2|. new TestBrowserWindowOwner(std::move(window2)); - std::unique_ptr<Browser> browser2(Browser::Create(params)); + auto browser2 = Browser::DeprecatedCreateOwnedForTesting(params); constexpr int kNumTabs2 = 3; for (int i = 0; i < kNumTabs2; ++i) { @@ -1668,7 +1668,7 @@ params.type = Browser::TYPE_PICTURE_IN_PICTURE; params.window = pip_window.get(); std::unique_ptr<Browser> pip_browser; - pip_browser.reset(Browser::Create(params)); + pip_browser = Browser::DeprecatedCreateOwnedForTesting(params); std::unique_ptr<content::WebContents> contents( content::WebContentsTester::CreateTestWebContents(profile(), nullptr)); CreateSessionServiceTabHelper(contents.get());
diff --git a/chrome/browser/extensions/app_tab_helper_unittest.cc b/chrome/browser/extensions/app_tab_helper_unittest.cc index af653c6..37eb78a 100644 --- a/chrome/browser/extensions/app_tab_helper_unittest.cc +++ b/chrome/browser/extensions/app_tab_helper_unittest.cc
@@ -50,7 +50,7 @@ Browser::CreateParams params(profile(), true); browser_window_ = std::make_unique<TestBrowserWindow>(); params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } return browser_.get(); }
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc index fd3c604..41f072e 100644 --- a/chrome/browser/extensions/extension_browsertest.cc +++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -56,8 +56,10 @@ #if BUILDFLAG(IS_ANDROID) #include "base/check.h" +#include "chrome/browser/android/tab_android.h" #include "chrome/browser/ui/android/tab_model/tab_model.h" #include "chrome/browser/ui/android/tab_model/tab_model_list.h" +#include "chrome/browser/ui/android/tab_model/tab_model_test_helper.h" #include "chrome/test/base/android/android_ui_test_utils.h" #include "content/public/browser/web_contents.h" #endif // BUILDFLAG(IS_ANDROID) @@ -159,79 +161,6 @@ } // namespace -#if BUILDFLAG(IS_ANDROID) -// TestTabModel provides a means of creating a tab associated with a given -// profile. The new tab can then be added to Android's TabModelList. -class ExtensionBrowserTest::TestTabModel : public TabModel { - public: - explicit TestTabModel(Profile* profile) - : TabModel(profile, kTestActivityType), - web_contents_(content::WebContents::Create( - content::WebContents::CreateParams(GetProfile()))) {} - - ~TestTabModel() override = default; - - // TabModel: - int GetTabCount() const override { return 0; } - int GetActiveIndex() const override { return 0; } - base::android::ScopedJavaLocalRef<jobject> GetJavaObject() const override { - return nullptr; - } - content::WebContents* GetActiveWebContents() const override { - return web_contents_.get(); - } - content::WebContents* GetWebContentsAt(int index) const override { - return web_contents_.get(); - } - TabAndroid* GetTabAt(int index) const override { return nullptr; } - void SetActiveIndex(int index) override {} - void ForceCloseAllTabs() override {} - void CloseTabAt(int index) override {} - void CreateTab(TabAndroid* parent, - content::WebContents* web_contents, - bool select) override {} - void HandlePopupNavigation(TabAndroid* parent, - NavigateParams* params) override {} - content::WebContents* CreateNewTabForDevTools(const GURL& url, - bool new_window) override { - return nullptr; - } - bool IsSessionRestoreInProgress() const override { return false; } - bool IsActiveModel() const override { return false; } - void AddObserver(TabModelObserver* observer) override {} - void RemoveObserver(TabModelObserver* observer) override {} - int GetTabCountNavigatedInTimeWindow( - const base::Time& begin_time, - const base::Time& end_time) const override { - return 0; - } - void CloseTabsNavigatedInTimeWindow(const base::Time& begin_time, - const base::Time& end_time) override {} - - // TODO(crbug.com/415351293): Implement these. - // TabListInterface implementation. - void OpenTab(const GURL& url, int index) override {} - void DiscardTab(int index) override {} - void DuplicateTab(int index) override {} - tabs::TabInterface* GetTab(int index) override { return nullptr; } - void HighlightTabs(std::set<int> indicies) override {} - void MoveTab(int from_index, int to_index) override {} - void CloseTab(int index) override {} - std::vector<tabs::TabInterface*> GetAllTabs() override { return {}; } - void PinTab(int index) override {} - void UnpinTab(int index) override {} - std::optional<tab_groups::TabGroupId> CreateGroup( - std::set<int> indicies) override { - return std::nullopt; - } - void MoveGroupTo(tab_groups::TabGroupId group_id, int index) override {} - - private: - // The WebContents associated with this tab's profile. - std::unique_ptr<content::WebContents> web_contents_; -}; -#endif // BUILDFLAG(IS_ANDROID) - ExtensionBrowserTest::ExtensionBrowserTest(ContextType context_type) : context_type_(context_type), platform_delegate_(*this), @@ -362,10 +291,8 @@ TearDownTestProtocolHandler(); #if BUILDFLAG(IS_ANDROID) - if (tab_model_) { - TabModelList::RemoveTabModel(tab_model_.get()); - tab_model_.reset(); - } + // Close any incognito tabs. + incognito_tab_model_.reset(); #endif // Stop observing any notifications when we're tearing down the test. @@ -877,14 +804,16 @@ // Android doesn't have an OpenURLOffTheRecord() helper so we roll our own. Profile* incognito_profile = this->profile()->GetPrimaryOTRProfile(/*create_if_needed=*/true); - if (tab_model_) { - TabModelList::RemoveTabModel(tab_model_.get()); - tab_model_.reset(); - } - // Create a tab model for the incognito profile then navigate to the URL. - tab_model_ = std::make_unique<TestTabModel>(incognito_profile); - TabModelList::AddTabModel(tab_model_.get()); - content::WebContents* web_contents = tab_model_->GetActiveWebContents(); + // Close any old incognito tabs before creating the new tab model. + incognito_tab_model_.reset(); + // Create a tab model for the incognito profile. + incognito_tab_model_ = std::make_unique<OwningTestTabModel>( + incognito_profile, kTestActivityType); + incognito_tab_model_->SetIsActiveModel(true); + incognito_tab_model_->AddEmptyTab(0, /*select=*/true); + content::WebContents* web_contents = + incognito_tab_model_->GetActiveWebContents(); + TabAndroid::AttachTabHelpers(web_contents); // This blocks until the navigation completes. The return value is ignored // because some tests intentionally navigate to blocked URLs which fail to // load.
diff --git a/chrome/browser/extensions/extension_browsertest.h b/chrome/browser/extensions/extension_browsertest.h index 478b007..b647518 100644 --- a/chrome/browser/extensions/extension_browsertest.h +++ b/chrome/browser/extensions/extension_browsertest.h
@@ -29,6 +29,7 @@ #include "extensions/common/feature_switch.h" #include "extensions/common/features/feature_channel.h" +class OwningTestTabModel; class Profile; namespace content { @@ -418,8 +419,8 @@ ExtensionId last_loaded_extension_id_; #if BUILDFLAG(IS_ANDROID) - class TestTabModel; - std::unique_ptr<TestTabModel> tab_model_; + // Tab model used for incognito tab support. + std::unique_ptr<OwningTestTabModel> incognito_tab_model_; #endif // Used for setting the default scoped current channel for extension browser
diff --git a/chrome/browser/extensions/extension_context_menu_model_unittest.cc b/chrome/browser/extensions/extension_context_menu_model_unittest.cc index 4ebf25c..38da14d95 100644 --- a/chrome/browser/extensions/extension_context_menu_model_unittest.cc +++ b/chrome/browser/extensions/extension_context_menu_model_unittest.cc
@@ -349,7 +349,7 @@ Browser::CreateParams params(profile(), true); test_window_ = std::make_unique<TestBrowserWindow>(); params.window = test_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } return browser_.get(); }
diff --git a/chrome/browser/extensions/permissions/host_access_requests_helper_unittest.cc b/chrome/browser/extensions/permissions/host_access_requests_helper_unittest.cc index ab64ebb4..1d4a0141 100644 --- a/chrome/browser/extensions/permissions/host_access_requests_helper_unittest.cc +++ b/chrome/browser/extensions/permissions/host_access_requests_helper_unittest.cc
@@ -116,7 +116,7 @@ Browser::CreateParams params(profile(), true); browser_window_ = std::make_unique<TestBrowserWindow>(); params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } return browser_.get(); }
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 2fdc5f3..95a02e62 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -1306,7 +1306,7 @@ BASE_FEATURE(kTabArchivalDragDropAndroid, "TabArchivalDragDropAndroid", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kTabCollectionAndroid, "TabCollectionAndroid",
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 f84c7d25..82e87ee 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
@@ -1226,7 +1226,7 @@ public static final MutableFlagWithSafeDefault sSwapNewTabAndNewTabInGroupAndroid = newMutableFlagWithSafeDefault(SWAP_NEW_TAB_AND_NEW_TAB_IN_GROUP_ANDROID, false); public static final MutableFlagWithSafeDefault sTabArchivalDragDropAndroid = - newMutableFlagWithSafeDefault(TAB_ARCHIVAL_DRAG_DROP_ANDROID, false); + newMutableFlagWithSafeDefault(TAB_ARCHIVAL_DRAG_DROP_ANDROID, true); public static final MutableFlagWithSafeDefault sTabCollectionAndroid = newMutableFlagWithSafeDefault(TAB_COLLECTION_ANDROID, false); // Default value will only ever be reached in tests.
diff --git a/chrome/browser/glic/BUILD.gn b/chrome/browser/glic/BUILD.gn index 045293f5..96bd15233 100644 --- a/chrome/browser/glic/BUILD.gn +++ b/chrome/browser/glic/BUILD.gn
@@ -221,6 +221,7 @@ "glic_enabling_unittest.cc", "glic_metrics_unittest.cc", "host/context/glic_screenshot_capturer_unittest.cc", + "host/context/glic_tab_data_unittest.cc", "host/glic_cookie_synchronizer_unittest.cc", "widget/local_hotkey_manager_unittest.cc", ]
diff --git a/chrome/browser/glic/host/context/glic_tab_data.cc b/chrome/browser/glic/host/context/glic_tab_data.cc index b408e800..224d260 100644 --- a/chrome/browser/glic/host/context/glic_tab_data.cc +++ b/chrome/browser/glic/host/context/glic_tab_data.cc
@@ -4,9 +4,13 @@ #include "chrome/browser/glic/host/context/glic_tab_data.h" +#include <cstdint> #include <optional> #include <utility> +// #include <cstring> +#include "base/check_op.h" +#include "base/containers/span.h" #include "base/memory/weak_ptr.h" #include "base/strings/utf_string_conversions.h" #include "components/favicon/content/content_favicon_driver.h" @@ -153,4 +157,23 @@ return base::unexpected(std::get<1>(data_)); } +bool FaviconEquals(const ::SkBitmap& a, const ::SkBitmap& b) { + if (&a == &b) { + return true; + } + // Compare image properties. + if (a.info() != b.info()) { + return false; + } + // Compare image pixels. + for (int y = 0; y < a.height(); ++y) { + for (int x = 0; x < a.width(); ++x) { + if (a.getColor(x, y) != b.getColor(x, y)) { + return false; + } + } + } + return true; +} + } // namespace glic
diff --git a/chrome/browser/glic/host/context/glic_tab_data.h b/chrome/browser/glic/host/context/glic_tab_data.h index 51304ad..92072c6 100644 --- a/chrome/browser/glic/host/context/glic_tab_data.h +++ b/chrome/browser/glic/host/context/glic_tab_data.h
@@ -19,6 +19,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +class SkBitmap; namespace glic { // TODO: Detect changes to windowID. @@ -116,6 +117,12 @@ // Populates and returns a FocusedTabDataPtr from a given FocusedTabData. glic::mojom::FocusedTabDataPtr CreateFocusedTabData( const FocusedTabData& focused_tab_data); + +// Checks if two SkBitmap images -- used for favicons -- are visually the same. +// This is not a highly optimized comparison but should be good enough for +// comparing (small) favicon images. +bool FaviconEquals(const ::SkBitmap& a, const ::SkBitmap& b); + } // namespace glic #endif // CHROME_BROWSER_GLIC_HOST_CONTEXT_GLIC_TAB_DATA_H_
diff --git a/chrome/browser/glic/host/context/glic_tab_data_unittest.cc b/chrome/browser/glic/host/context/glic_tab_data_unittest.cc new file mode 100644 index 0000000..62e7b82 --- /dev/null +++ b/chrome/browser/glic/host/context/glic_tab_data_unittest.cc
@@ -0,0 +1,85 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/glic/host/context/glic_tab_data.h" + +#include <string_view> +#include <utility> + +#include "base/files/file_util.h" +#include "base/path_service.h" +#include "chrome/common/chrome_paths.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/codec/png_codec.h" + +namespace { + +base::FilePath GlicTestDataPath(std::string_view filename) { + return base::PathService::CheckedGet(chrome::DIR_TEST_DATA) + .AppendASCII("glic") + .AppendASCII(filename); +} + +} // namespace + +namespace glic { + +TEST(GlicTabDataTest, CompareIdenticalFaviconImages) { + std::optional<std::vector<uint8_t>> png_data = + base::ReadFileToBytes(GlicTestDataPath("youtube_favicon_32x32.png")); + ASSERT_TRUE(png_data.has_value()); + SkBitmap bitmap_from_png = gfx::PNGCodec::Decode(png_data.value()); + std::optional<std::vector<uint8_t>> other_png_data = + base::ReadFileToBytes(GlicTestDataPath("youtube_favicon_32x32.png")); + ASSERT_TRUE(other_png_data.has_value()); + SkBitmap bitmap_from_other_png = + gfx::PNGCodec::Decode(other_png_data.value()); + + EXPECT_TRUE(FaviconEquals(bitmap_from_png, bitmap_from_other_png)); +} + +TEST(GlicTabDataTest, CompareFaviconImagesWithDifferentColorSpaces) { + std::optional<std::vector<uint8_t>> png_data = + base::ReadFileToBytes(GlicTestDataPath("youtube_favicon_32x32.png")); + ASSERT_TRUE(png_data.has_value()); + SkBitmap bitmap_from_png = gfx::PNGCodec::Decode(png_data.value()); + std::optional<std::vector<uint8_t>> other_png_data = base::ReadFileToBytes( + GlicTestDataPath("youtube_favicon_32x32_16bit_fp.png")); + ASSERT_TRUE(other_png_data.has_value()); + SkBitmap bitmap_from_other_png = + gfx::PNGCodec::Decode(other_png_data.value()); + + EXPECT_FALSE(FaviconEquals(bitmap_from_png, bitmap_from_other_png)); +} + +TEST(GlicTabDataTest, CompareFaviconImagesWithDifferentSizes) { + std::optional<std::vector<uint8_t>> png_data = + base::ReadFileToBytes(GlicTestDataPath("youtube_favicon_32x32.png")); + ASSERT_TRUE(png_data.has_value()); + SkBitmap bitmap_from_png = gfx::PNGCodec::Decode(png_data.value()); + std::optional<std::vector<uint8_t>> smaller_png_data = + base::ReadFileToBytes(GlicTestDataPath("youtube_favicon_16x16.png")); + ASSERT_TRUE(smaller_png_data.has_value()); + SkBitmap bitmap_from_smaller_png = + gfx::PNGCodec::Decode(smaller_png_data.value()); + + EXPECT_FALSE(FaviconEquals(bitmap_from_png, bitmap_from_smaller_png)); +} + +TEST(GlicTabDataTest, CompareFaviconImagesWithDifferentPixels) { + std::optional<std::vector<uint8_t>> png_data = + base::ReadFileToBytes(GlicTestDataPath("youtube_favicon_32x32.png")); + ASSERT_TRUE(png_data.has_value()); + SkBitmap bitmap_from_png = gfx::PNGCodec::Decode(png_data.value()); + std::optional<std::vector<uint8_t>> different_png_data = + base::ReadFileToBytes( + GlicTestDataPath("youtube_favicon_32x32_different_pixels.png")); + ASSERT_TRUE(different_png_data.has_value()); + SkBitmap bitmap_from_different_png = + gfx::PNGCodec::Decode(different_png_data.value()); + + EXPECT_FALSE(FaviconEquals(bitmap_from_png, bitmap_from_different_png)); +} + +} // namespace glic
diff --git a/chrome/browser/glic/host/glic_api_browsertest.cc b/chrome/browser/glic/host/glic_api_browsertest.cc index 9e57740..2bc2498 100644 --- a/chrome/browser/glic/host/glic_api_browsertest.cc +++ b/chrome/browser/glic/host/glic_api_browsertest.cc
@@ -100,6 +100,7 @@ "GlicApiTestWithOneTabAndContextualCueing", "GlicApiTestWithOneTabAndPreloading", "GlicApiTestUserStatusCheckTest", + "GlicApiTestWithOneTabMoreDebounceDelay", }; } @@ -338,8 +339,8 @@ void SetUpOnMainThread() override { GlicApiTest::SetUpOnMainThread(); - // Load the test page in a tab, so that there is some page context. histogram_tester = std::make_unique<base::HistogramTester>(); + // Load the test page in a tab, so that there is some page context. RunTestSequence(InstrumentTab(kFirstTab), NavigateWebContents(kFirstTab, page_url()), OpenGlicWindow(GlicWindowMode::kDetached, @@ -1517,5 +1518,60 @@ << "We should not send most of the fetches"; } +// Given the time-based nature of debouncing, testing with non-mocked clocks can +// be flaky. This suite increases the applied delays to reduce the the chance of +// flakiness. +class GlicApiTestWithOneTabMoreDebounceDelay : public GlicApiTestWithOneTab { + public: + GlicApiTestWithOneTabMoreDebounceDelay() { + features2_.InitWithFeaturesAndParameters( + /*enabled_features=*/ + {{ + features::kGlicTabFocusDataDedupDebounce, + { +// For slow binaries, use a longer debounce delay. +#if defined(SLOW_BINARY) + {features::kGlicTabFocusDataDebounceDelayMs.name, "200"}, +#else + {features::kGlicTabFocusDataDebounceDelayMs.name, "100"}, +#endif + }, + }}, + /*disabled_features=*/ + {}); + } + + private: + base::test::ScopedFeatureList features2_; +}; + +// Confirm that the web client receives a minimal number of focused tab updates +// by triggering events that generate such updates. +// TODO(b/424242331): figure out why this is failing on linux-rel bot. +#if BUILDFLAG(IS_LINUX) +#define MAYBE_testSingleFocusedTabUpdatesOnTabEvents \ + DISABLED_testSingleFocusedTabUpdatesOnTabEvents +#else +#define MAYBE_testSingleFocusedTabUpdatesOnTabEvents \ + testSingleFocusedTabUpdatesOnTabEvents +#endif +IN_PROC_BROWSER_TEST_F(GlicApiTestWithOneTabMoreDebounceDelay, + MAYBE_testSingleFocusedTabUpdatesOnTabEvents) { + // Initial state with first tab. + ExecuteJsTest(); + + // Navigate to another page in the first tab. + RunTestSequence(NavigateWebContents( + kFirstTab, InProcessBrowserTest::embedded_test_server()->GetURL( + "/scrollable_page_with_content.html"))); + ContinueJsTest(); + + // Open a new tab that becomes active and navigate to a another page. + RunTestSequence(AddInstrumentedTab( + kSecondTab, + InProcessBrowserTest::embedded_test_server()->GetURL("/glic/test.html"))); + ContinueJsTest(); +} + } // namespace } // namespace glic
diff --git a/chrome/browser/glic/host/glic_page_handler.cc b/chrome/browser/glic/host/glic_page_handler.cc index b5fab98e..57d7c21 100644 --- a/chrome/browser/glic/host/glic_page_handler.cc +++ b/chrome/browser/glic/host/glic_page_handler.cc
@@ -6,6 +6,8 @@ #include "base/callback_list.h" #include "base/feature_list.h" +#include "base/functional/bind.h" +#include "base/functional/callback_forward.h" #include "base/functional/callback_helpers.h" #include "base/memory/raw_ptr.h" #include "base/metrics/histogram_functions.h" @@ -56,10 +58,26 @@ #include "extensions/browser/guest_view/web_view/web_view_guest.h" #include "mojo/public/cpp/bindings/callback_helpers.h" #include "mojo/public/cpp/bindings/message.h" +#include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/geometry/mojom/geometry.mojom.h" #include "ui/gfx/geometry/size.h" #include "ui/views/widget/widget.h" +namespace mojo { + +// Specializes a Mojo EqualsTraits to allow equality checks of SkBitmaps, so +// that `FocusedTabData` can be compared for equality. Given the unoptimized +// nature of the image comparison logic, this trait is being made available only +// within this compilation unit. +template <> +struct EqualsTraits<::SkBitmap> { + static bool Equals(const ::SkBitmap& a, const ::SkBitmap& b) { + return glic::FaviconEquals(a, b); + } +}; + +} // namespace mojo + namespace glic { namespace { @@ -221,6 +239,54 @@ int open_browser_count_ = 0; }; +// Does time-based debouncing and cache-based deduping of FocusedTabData +// updates. +// TODO(b/424242331): Debouncing & deduping should happen closer to where +// focused tab updates are generated. +// TODO(b/424242331): This logic should be moved to a separate file and be made +// more generic and configurable. +class DebouncerDeduper { + public: + using DataCallback = void(glic::mojom::FocusedTabDataPtr); + + DebouncerDeduper(base::TimeDelta debounce_delay, + int max_debounces, + base::RepeatingCallback<DataCallback> callback) + : max_debounces_(max_debounces), + update_callback_(callback), + debounce_timer_(FROM_HERE, + debounce_delay, + base::BindRepeating(&DebouncerDeduper::MaybeSendUpdate, + base::Unretained(this))), + remaining_debounces_(max_debounces_) {} + ~DebouncerDeduper() = default; + + void HandleUpdate(const glic::mojom::FocusedTabDataPtr data) { + next_data_candidate_ = data.Clone(); + if (remaining_debounces_ > 0) { + remaining_debounces_--; + debounce_timer_.Reset(); + } + } + + private: + void MaybeSendUpdate() { + if (next_data_candidate_ != last_sent_data_) { + last_sent_data_ = next_data_candidate_->Clone(); + update_callback_.Run(std::move(next_data_candidate_)); + } + next_data_candidate_ = nullptr; + remaining_debounces_ = max_debounces_; + } + + const int max_debounces_; + base::RepeatingCallback<DataCallback> update_callback_; + base::RetainingOneShotTimer debounce_timer_; + int remaining_debounces_; + glic::mojom::FocusedTabDataPtr last_sent_data_; + glic::mojom::FocusedTabDataPtr next_data_candidate_; +}; + mojom::WebClientSizingMode GetWebClientSizingMode() { return base::FeatureList::IsEnabled(features::kGlicSizingFitWindow) ? glic::mojom::WebClientSizingMode::kFitWindow @@ -295,6 +361,18 @@ base::Unretained(this))); glic_service_->window_controller().AddStateObserver(this); + if (base::FeatureList::IsEnabled( + features::kGlicTabFocusDataDedupDebounce)) { + const base::TimeDelta debounce_delay = + base::Milliseconds(features::kGlicTabFocusDataDebounceDelayMs.Get()); + const int max_debounces = features::kGlicTabFocusDataMaxDebounces.Get(); + debouncer_deduper_ = std::make_unique<DebouncerDeduper>( + debounce_delay, max_debounces, + base::BindRepeating( + &GlicWebClientHandler::NotifyWebClientFocusedTabChanged, + base::Unretained(this))); + } + focus_changed_subscription_ = glic_sharing_manager_->AddFocusedTabChangedCallback( base::BindRepeating(&GlicWebClientHandler::OnFocusedTabChanged, @@ -796,8 +874,7 @@ if (base::FeatureList::IsEnabled(features::kGlicApiActivationGating)) { if (cached_focused_tab_data_) { - web_client_->NotifyFocusedTabChanged( - std::move(cached_focused_tab_data_)); + MaybeNotifyFocusedTabChanged(std::move(cached_focused_tab_data_)); } cached_focused_tab_data_ = nullptr; } @@ -907,8 +984,7 @@ cached_focused_tab_data_ = CreateFocusedTabData(focused_tab_data); return; } - web_client_->NotifyFocusedTabChanged( - CreateFocusedTabData(focused_tab_data)); + MaybeNotifyFocusedTabChanged(CreateFocusedTabData(focused_tab_data)); } void OnFocusedTabDataChanged(const glic::mojom::TabData* tab_data) { @@ -920,7 +996,7 @@ glic::mojom::FocusedTabData::NewFocusedTab(tab_data->Clone()); return; } - web_client_->NotifyFocusedTabChanged( + MaybeNotifyFocusedTabChanged( glic::mojom::FocusedTabData::NewFocusedTab(tab_data->Clone())); } @@ -935,6 +1011,19 @@ !active_state_calculator_.IsActive(); } + void MaybeNotifyFocusedTabChanged( + glic::mojom::FocusedTabDataPtr focused_tab_data) { + if (debouncer_deduper_) { + debouncer_deduper_->HandleUpdate(std::move(focused_tab_data)); + return; + } + NotifyWebClientFocusedTabChanged(std::move(focused_tab_data)); + } + + void NotifyWebClientFocusedTabChanged(glic::mojom::FocusedTabDataPtr data) { + web_client_->NotifyFocusedTabChanged(std::move(data)); + } + glic::mojom::FocusedTabDataPtr cached_focused_tab_data_ = nullptr; PrefChangeRegistrar pref_change_registrar_; PrefChangeRegistrar local_state_pref_change_registrar_; @@ -954,6 +1043,7 @@ std::unique_ptr<system_permission_settings::ScopedObservation> system_permission_settings_observation_; std::vector<base::OnceClosure> on_get_user_profile_info_activation_callbacks_; + std::unique_ptr<DebouncerDeduper> debouncer_deduper_; }; GlicPageHandler::GlicPageHandler(
diff --git a/chrome/browser/glic/host/glic_page_handler.h b/chrome/browser/glic/host/glic_page_handler.h index 1ec7be28f..96685b5 100644 --- a/chrome/browser/glic/host/glic_page_handler.h +++ b/chrome/browser/glic/host/glic_page_handler.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_GLIC_HOST_GLIC_PAGE_HANDLER_H_ #define CHROME_BROWSER_GLIC_HOST_GLIC_PAGE_HANDLER_H_ +#include <memory> #include <vector> #include "base/callback_list.h"
diff --git a/chrome/browser/glic/widget/glic_window_hotkey_delegate_unittest.cc b/chrome/browser/glic/widget/glic_window_hotkey_delegate_unittest.cc index 82ffa40..60da7ee 100644 --- a/chrome/browser/glic/widget/glic_window_hotkey_delegate_unittest.cc +++ b/chrome/browser/glic/widget/glic_window_hotkey_delegate_unittest.cc
@@ -69,7 +69,7 @@ // This Browser instance will be added to the BrowserList automatically. Browser::CreateParams params(profile_.get(), true); params.window = mock_browser_window_.get(); // Assign raw pointer - fake_browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + fake_browser_ = Browser::DeprecatedCreateOwnedForTesting(params); // Create other mocks mock_controller_ = std::make_unique<MockGlicWindowController>();
diff --git a/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc b/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc index e48069f..705ac8f 100644 --- a/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc +++ b/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc
@@ -74,7 +74,7 @@ Browser::CreateParams params(browser_profile, true); params.type = Browser::TYPE_NORMAL; params.window = browser_window.get(); - auto browser = std::unique_ptr<Browser>(Browser::Create(params)); + auto browser = Browser::DeprecatedCreateOwnedForTesting(params); size_t handle = next_browser_id++; open_browsers_[handle] =
diff --git a/chrome/browser/passage_embeddings/passage_embeddings_coordinator.cc b/chrome/browser/passage_embeddings/passage_embeddings_coordinator.cc index 1fb06a49..e1388775 100644 --- a/chrome/browser/passage_embeddings/passage_embeddings_coordinator.cc +++ b/chrome/browser/passage_embeddings/passage_embeddings_coordinator.cc
@@ -122,7 +122,8 @@ base::StrAppend(&str, {" ", str_to_append}); }; - const int max_words_per_aggregate_passage = kMinWordsPerPassage.Get(); + const int max_words_per_aggregate_passage = + kMaxWordsPerAggregatePassage.Get(); const int min_words_per_passage = kMinWordsPerPassage.Get(); const int max_passages_per_page = kMaxPassagesPerPage.Get();
diff --git a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_es.xtb b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_es.xtb index e8faa301..9022cf4 100644 --- a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_es.xtb +++ b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_es.xtb
@@ -67,5 +67,6 @@ <translation id="8481839122437406573">Tranquilo</translation> <translation id="8756370108715456837">Incluía información incorrecta</translation> <translation id="8953618380150219653">El reproductor "Escuchar esta página" está abierto a altura completa.</translation> +<translation id="9087782179025630211">Control deslizante. Tiempo transcurrido: <ph name="ELAPSED" /> de <ph name="TOTAL" />.</translation> <translation id="978117257931832348">Grave</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_et.xtb b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_et.xtb index 5b69d0b..67dab9a 100644 --- a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_et.xtb +++ b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_et.xtb
@@ -67,5 +67,6 @@ <translation id="8481839122437406573">Rahulik</translation> <translation id="8756370108715456837">Faktiliselt vale</translation> <translation id="8953618380150219653">Pleier „Kuula seda lehte“ on avatud täiskõrgusel.</translation> +<translation id="9087782179025630211">Otsimise juhik. <ph name="ELAPSED" />/<ph name="TOTAL" /> möödunud.</translation> <translation id="978117257931832348">Madal</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_km.xtb b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_km.xtb index 37b962e..41ecfb4 100644 --- a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_km.xtb +++ b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_km.xtb
@@ -67,5 +67,6 @@ <translation id="8481839122437406573">ស្ងប់</translation> <translation id="8756370108715456837">មិនត្រឹមត្រូវតាមការពិត</translation> <translation id="8953618380150219653">កម្មវិធីចាក់ “ស្ដាប់ទំព័រនេះ” បានបើកពេញអេក្រង់។</translation> +<translation id="9087782179025630211">របាររាវរក។ បានចាក់រយៈពេល <ph name="ELAPSED" /> នៃ <ph name="TOTAL" />។</translation> <translation id="978117257931832348">សំឡេងទាប</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_pt-PT.xtb b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_pt-PT.xtb index cc204ed..8a60c72 100644 --- a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_pt-PT.xtb +++ b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_pt-PT.xtb
@@ -67,5 +67,6 @@ <translation id="8481839122437406573">Calmo</translation> <translation id="8756370108715456837">Incorreto do ponto de vista factual</translation> <translation id="8953618380150219653">Leitor "Ouvir esta página" aberto à altura total.</translation> +<translation id="9087782179025630211">Controlo de deslize. <ph name="ELAPSED" /> decorrido(s) de <ph name="TOTAL" />.</translation> <translation id="978117257931832348">Tom grave</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc index 4527682..626c931 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc
@@ -448,7 +448,7 @@ Browser::CreateParams create_params(profile(), true); browser_window_ = std::make_unique<TestBrowserWindow>(); create_params.window = browser_window_.get(); - browser_.reset(Browser::Create(create_params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(create_params); } return browser_.get(); } @@ -459,7 +459,7 @@ true); browser_window_ = std::make_unique<TestBrowserWindow>(); create_params.window = browser_window_.get(); - browser_.reset(Browser::Create(create_params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(create_params); } return browser_.get(); }
diff --git a/chrome/browser/resource_coordinator/tab_manager_unittest.cc b/chrome/browser/resource_coordinator/tab_manager_unittest.cc index 143da6d..2badb48 100644 --- a/chrome/browser/resource_coordinator/tab_manager_unittest.cc +++ b/chrome/browser/resource_coordinator/tab_manager_unittest.cc
@@ -135,7 +135,7 @@ Browser::CreateParams params1(profile(), true); params1.type = Browser::TYPE_NORMAL; params1.window = window1.get(); - auto browser1 = std::unique_ptr<Browser>(Browser::Create(params1)); + auto browser1 = Browser::DeprecatedCreateOwnedForTesting(params1); TabStripModel* tab_strip1 = browser1->tab_strip_model(); tab_strip1->AppendWebContents(CreateWebContents(), true); tab_strip1->AppendWebContents(CreateWebContents(), false); @@ -146,7 +146,7 @@ Browser::CreateParams params2(profile(), true); params2.type = Browser::TYPE_NORMAL; params2.window = window2.get(); - auto browser2 = std::unique_ptr<Browser>(Browser::Create(params1)); + auto browser2 = Browser::DeprecatedCreateOwnedForTesting(params1); TabStripModel* tab_strip2 = browser2->tab_strip_model(); tab_strip2->AppendWebContents(CreateWebContents(), true); tab_strip2->AppendWebContents(CreateWebContents(), false); @@ -186,7 +186,7 @@ Browser::CreateParams params(profile(), true); params.type = Browser::TYPE_NORMAL; params.window = window.get(); - auto browser = std::unique_ptr<Browser>(Browser::Create(params)); + auto browser = Browser::DeprecatedCreateOwnedForTesting(params); TabStripModel* tab_strip = browser->tab_strip_model(); const int num_of_tabs_to_test = 20;
diff --git a/chrome/browser/resources/glic/glic_api/glic_api.ts b/chrome/browser/resources/glic/glic_api/glic_api.ts index bc11911d..8bb7c71 100644 --- a/chrome/browser/resources/glic/glic_api/glic_api.ts +++ b/chrome/browser/resources/glic/glic_api/glic_api.ts
@@ -178,7 +178,7 @@ (options: TabContextOptions): Promise<TabContextResult>; /** - * @todo Not yet implemented. https://crbug.com/402086021 + * @deprecated Use CreateTask and PerformActions instead. * * Inform Chrome about an action. Chrome Takes an action based on the * action proto and returns new context based on the tab context options. @@ -192,6 +192,27 @@ (params: ActInFocusedTabParams): Promise<ActInFocusedTabResult>; /** + * Creates a task and returns its ID. + * + * @throws {ActInFocusedTabError} on failure. + * + * @todo Not yet implemented. https://crbug.com/425681926 + */ + createTask?(): Promise<number>; + + /** + * Performs actions on the task with the given ID. + * + * The input corresponds to the Actions proto in + * components/optimization_guide/proto/features/actions_data.proto. + * + * The output corresponds to the ActionsResult proto. + * + * @todo Not yet implemented. https://crbug.com/425681926 + */ + performActions?(actions: ArrayBuffer): Promise<ArrayBuffer>; + + /** * Stops the actor task with the given ID in the browser if it exists. No-op * otherwise. * @@ -247,6 +268,8 @@ captureScreenshot?(): Promise<Screenshot>; /** + * @todo All actuation should eventually be moved onto PerformActions. + * * Creates a tab and navigates to a URL. It is made the active tab by default * but that can be changed using `options.openInBackground`. * @@ -953,6 +976,7 @@ scrollTo: ScrollToErrorReason; webClientInitialize: WebClientInitializeErrorReason; actInFocusedTab: ActInFocusedTabErrorReason; + createTask: CreateTaskErrorReason; } /** Reason why the web client could not initialize. */ @@ -989,6 +1013,13 @@ FAILED_TO_START_TASK = 4, } +/** Reason for failure when trying to create a task. */ +export enum CreateTaskErrorReason { + UNKNOWN = 0, + /** Task system unavailable. */ + TASK_SYSTEM_UNAVAILABLE = 1, +} + /** * Reason why capturing desktop screenshot failed. NOTE: This may be extended in * the future so avoid using complete switches on the currently used enum @@ -1026,6 +1057,9 @@ /** Error type used for actuation errors. */ export type ActInFocusedTabError = ErrorWithReason<'actInFocusedTab'>; +/** Error type used for create task errors. */ +export type CreateTaskError = ErrorWithReason<'createTask'>; + /** Params for scrollTo(). */ export declare interface ScrollToParams { /** @@ -1319,5 +1353,6 @@ webClientInitializeErrorReason: typeof WebClientInitializeErrorReason; invocationSource: typeof InvocationSource; actInFocusedTabErrorReason: typeof ActInFocusedTabErrorReason; + createTaskErrorReason: typeof CreateTaskErrorReason; settingsPageField: typeof SettingsPageField; }
diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.html b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.html index e0d9be4..687db62c 100644 --- a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.html +++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.html
@@ -42,6 +42,11 @@ max-height: var(--dbd-dialog-max-height); } + #deletingDataAlert { + clip: rect(0, 0, 0, 0); + position: fixed; + } + #manageOtherGoogleDataRow { border-radius: var(--dbd-container-border-radius); color: var(--cr-primary-text-color); @@ -154,6 +159,11 @@ isDeletionInProgress_, isNoDatatypeSelected_)]]"> [[deleteButtonLabel_]] </cr-button> + <!-- The alert must be inside the dialog for it to be read while the + dialog is open. --> + <div id="deletingDataAlert" role="alert"> + [[deletingDataAlertString_]] + </div> </div> </cr-dialog>
diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.ts b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.ts index 40fd6fe..2d20150 100644 --- a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.ts +++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_v2.ts
@@ -59,6 +59,7 @@ cancelButton: CrButtonElement, deleteButton: CrButtonElement, deleteBrowsingDataDialog: CrDialogElement, + deletingDataAlert: HTMLElement, manageOtherGoogleDataRow: CrLinkRowElement, moreOptionsList: HTMLElement, showMoreButton: CrButtonElement, @@ -157,6 +158,11 @@ computed: 'computeDeleteButtonLabel_(syncStatus_.signedInState)', }, + deletingDataAlertString_: { + type: String, + value: '', + }, + isDeletionInProgress_: { type: Boolean, value: false, @@ -206,6 +212,7 @@ declare private dataTypesExpanded_: boolean; declare private deleteButtonLabel_: string; + declare private deletingDataAlertString_: string; declare private isDeletionInProgress_: boolean; declare private isNoDatatypeSelected_: boolean; declare private isGoogleDse_: boolean; @@ -367,7 +374,7 @@ * selected TimePeriod. */ private async onDeleteBrowsingDataClick_() { - // TODO(crbug.com/397187800): Trigger the deletion announcements for a11y. + this.deletingDataAlertString_ = loadTimeData.getString('clearingData'); this.isDeletionInProgress_ = true; const dataTypes = this.getSelectedDataTypes_();
diff --git a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service_unittest.cc b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service_unittest.cc index 9882b31..283f75d 100644 --- a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service_unittest.cc +++ b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service_unittest.cc
@@ -190,7 +190,7 @@ Browser::CreateParams params(profile(), true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); chrome_tailored_security_service_ = std::make_unique<TestChromeTailoredSecurityService>(profile_); }
diff --git a/chrome/browser/search_engines/template_url_scraper_browsertest.cc b/chrome/browser/search_engines/template_url_scraper_browsertest.cc index 3de44d8..5215069 100644 --- a/chrome/browser/search_engines/template_url_scraper_browsertest.cc +++ b/chrome/browser/search_engines/template_url_scraper_browsertest.cc
@@ -104,7 +104,7 @@ std::vector<std::unique_ptr<TemplateURLData>> prepopulate_urls = prepopulate_data_resolver->GetPrepopulatedEngines(); std::vector<std::unique_ptr<TemplateURLData>> starter_pack_urls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); EXPECT_EQ(prepopulate_urls.size() + starter_pack_urls.size(), all_urls.size());
diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc index 1c3dee0..6ae61e8 100644 --- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc
@@ -1904,7 +1904,7 @@ data.SetShortName(u"Bookmarks"); data.SetKeyword(u"@bookmarks"); data.SetURL("chrome://bookmarks/?q={searchTerms}"); - data.starter_pack_id = TemplateURLStarterPackData::kBookmarks; + data.starter_pack_id = template_url_starter_pack_data::kBookmarks; data.date_created = Time::FromTimeT(100); data.last_modified = Time::FromTimeT(100); data.sync_guid = "bookmarks_guid"; @@ -1915,7 +1915,8 @@ invalid_data.SetShortName(u"Invalid starter pack"); invalid_data.SetKeyword(u"@invalid"); invalid_data.SetURL("chrome://bookmarks/?q={searchTerms}"); - invalid_data.starter_pack_id = TemplateURLStarterPackData::kMaxStarterPackID; + invalid_data.starter_pack_id = + template_url_starter_pack_data::kMaxStarterPackId; invalid_data.date_created = Time::FromTimeT(100); invalid_data.last_modified = Time::FromTimeT(100); invalid_data.sync_guid = "invalid_guid"; @@ -3123,7 +3124,7 @@ ->GetPrepopulatedEngines(); std::vector<std::unique_ptr<TemplateURLData>> starter_pack_turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); // We have to prematurely exit this test if for some reason this machine does // not have any prepopulate TemplateURLs. @@ -4273,7 +4274,7 @@ ->GetPrepopulatedEngines(); std::vector<std::unique_ptr<TemplateURLData>> starter_pack_turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); // We have to prematurely exit this test if for some reason this machine does // not have any prepopulate TemplateURLs.
diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc index e3182ac..d008f2c40 100644 --- a/chrome/browser/search_engines/template_url_service_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_unittest.cc
@@ -1899,7 +1899,7 @@ // Modify a starter pack template URL. Verify load does NOT modify the title // if current version is compatible (>= to first compatible version). const int first_compatible_version = - TemplateURLStarterPackData::GetFirstCompatibleDataVersion(); + template_url_starter_pack_data::GetFirstCompatibleDataVersion(); test_util()->web_data_service()->SetStarterPackKeywordVersion( first_compatible_version);
diff --git a/chrome/browser/segmentation_platform/client_util/local_tab_handler_unittest.cc b/chrome/browser/segmentation_platform/client_util/local_tab_handler_unittest.cc index b6d23f5..850c38ab 100644 --- a/chrome/browser/segmentation_platform/client_util/local_tab_handler_unittest.cc +++ b/chrome/browser/segmentation_platform/client_util/local_tab_handler_unittest.cc
@@ -62,7 +62,7 @@ params.type = Browser::TYPE_NORMAL; test_window_ = std::make_unique<TestBrowserWindow>(); params.window = test_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); handler_ = std::make_unique<LocalTabHandler>(&session_sync_service_, profile_.get());
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 82fecd04..77df46a 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -105,9 +105,6 @@ "tab_modal_confirm_dialog.h", "tab_ui_helper.cc", "tab_ui_helper.h", - "toolbar/chrome_labs/chrome_labs_model.cc", - "toolbar/chrome_labs/chrome_labs_prefs.cc", - "toolbar/chrome_labs/chrome_labs_utils.cc", "toolbar/chrome_location_bar_model_delegate.cc", "translate/partial_translate_bubble_model.h", "translate/partial_translate_bubble_model_impl.cc",
diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionService.java b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionService.java index 62f4cd3..ff6e10b 100644 --- a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionService.java +++ b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionService.java
@@ -44,4 +44,7 @@ service.initialize(profileSupplier); return service; } + + /** Whether extensions are enabled. */ + public boolean areExtensionsEnabled(); }
diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionServiceImpl.java b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionServiceImpl.java index 699d646..28d5e89 100644 --- a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionServiceImpl.java +++ b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionServiceImpl.java
@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.theme.ThemeColorProvider; import org.chromium.chrome.browser.toolbar.R; import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionListCoordinator; +import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionsBridge; import org.chromium.chrome.browser.toolbar.extensions.ExtensionsMenuButtonCoordinator; import org.chromium.ui.base.WindowAndroid; @@ -69,6 +70,17 @@ } @Override + public boolean areExtensionsEnabled() { + Profile profile = mProfileSupplier.get(); + if (profile == null) { + return false; + } + + ExtensionActionsBridge extensionActionsBridge = ExtensionActionsBridge.get(profile); + return extensionActionsBridge.extensionsEnabled(); + } + + @Override public void destroy() { if (mExtensionActionListCoordinator != null) { mExtensionActionListCoordinator.destroy();
diff --git a/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinator.java b/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinator.java index 0cb4de73..26d78e58 100644 --- a/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinator.java +++ b/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinator.java
@@ -459,9 +459,10 @@ } } assumeNonNull(mDialog); - // Disable positive button as all items are now unselected. mDialog.set(ModalDialogProperties.POSITIVE_BUTTON_DISABLED, true); + + mSelectedItem = null; } void dismissDialog(@DialogDismissalCause int cause) {
diff --git a/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinatorTest.java b/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinatorTest.java index 717b179..a22c5be0 100644 --- a/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinatorTest.java +++ b/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/InstanceSwitcherCoordinatorTest.java
@@ -172,6 +172,16 @@ .inRoot(isDialog()) .perform(actionOnItemAtPosition(1, click())); + // Switch to the the inactive instance tab, this should deselect the item. + onView(allOf(withText("Inactive (0)"), isDescendantOfA(withId(R.id.tabs)))) + .perform(click()); + + // Switch back to the active instance tab and select the same item. + onView(allOf(withText("Active (3)"), isDescendantOfA(withId(R.id.tabs)))).perform(click()); + onView(withId(R.id.active_instance_list)) + .inRoot(isDialog()) + .perform(actionOnItemAtPosition(1, click())); + // Verify "Open" button is now enabled and open the selected instance. onView(allOf(withId(R.id.positive_button), withText(R.string.open))) .inRoot(isDialog())
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb index 71fca89..9aef74b6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -419,7 +419,7 @@ <translation id="2899252057552912621">ستفقد قريبًا إمكانية الوصول إلى كلمات المرور بسبب عدم توفّر "خدمات Google Play". يمكنك إنشاء نسخة من كلمات المرور المحفوظة قبل توقُّف الخدمة عن العمل.</translation> <translation id="2900528713135656174">إنشاء حدث</translation> <translation id="2901411048554510387">عرض اقتراحات لموقع <ph name="WEBSITE_TITLE" /></translation> -<translation id="2904300462646366554">يتم تلقائيًا فتح ملفات PDF التي تم تنزيلها باستخدام أحد برامج عرض ملفات PDF على جهازك.</translation> +<translation id="2904300462646366554">يتم تلقائيًا استخدام أحد برامج عرض ملفات PDF على جهازك افتح ملفات PDF التي تم تنزيلها</translation> <translation id="2904414404539560095">قائمة بالأجهزة التي يمكن مشاركة علامة تبويب معها، مفتوحة على طول الشاشة.</translation> <translation id="2908243544703713905">الأخبار غير المقروءة جاهزة.</translation> <translation id="2909615210195135082">النظام الأساسي لإشعارات Google</translation> @@ -835,7 +835,7 @@ <translation id="4787736314074622408">هل تريد حذف "<ph name="ITEM_TITLE" />"؟</translation> <translation id="4793679854893018356">تعرّف على الطريقة التي يحافظ بها Chrome على أمانك</translation> <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation> -<translation id="4807098396393229769">الاسم كما على البطاقة</translation> +<translation id="4807098396393229769">الاسم المكتوب على البطاقة</translation> <translation id="480990236307250886">فتح الصفحة الرئيسية</translation> <translation id="4822710610088666676">تم إغلاق مجموعة علامات التبويب "<ph name="TAB_GROUP_TITLE" />" وحفظها</translation> <translation id="4834250788637067901">طرق الدفع والعروض الترويجية والعناوين التي تستخدم Google Pay</translation> @@ -1264,7 +1264,7 @@ <translation id="6657585470893396449">كلمة المرور</translation> <translation id="666731172850799929">الفتح في <ph name="APP_NAME" /></translation> <translation id="6671495933530132209">نسخ الصورة</translation> -<translation id="6672697278890207089">إدخال عبارة المرور</translation> +<translation id="6672697278890207089">يُرجى إدخال عبارة المرور</translation> <translation id="6672917148207387131">إضافة <ph name="DOMAIN" /></translation> <translation id="6674571176963658787">لبدء المزامنة، يجب إدخال عبارة المرور.</translation> <translation id="6676927815633975364">تسجيل الدخول إلى هذا الموقع الإلكتروني وإلى متصفِّح Chrome</translation> @@ -1634,7 +1634,7 @@ <translation id="8128734975707333498">فتح الخيارات لحفظ الصفحة</translation> <translation id="8130309322784422030">معلومات تسجيل الدخول المُخزَّنة الخاصة بك قد تكون قديمة.</translation> <translation id="813082847718468539">عرض معلومات الموقع</translation> -<translation id="8135406045838672858">يتم تلقائيًا فتح ملفات PDF التي تم تنزيلها باستخدام "<ph name="APP_NAME" />".</translation> +<translation id="8135406045838672858">يتم تلقائيًا استخدام "<ph name="APP_NAME" />" لفتح ملفات PDF التي تم تنزيلها.</translation> <translation id="8137562778192957619">لن تحتاج إلى تذكُّر كلمة المرور هذه لأنها ستُحفظ في "مدير كلمات المرور في Google".</translation> <translation id="8146563639948412265">يمكنك فتح نوافذ يصل عددها إلى <ph name="MAX_WINDOW_COUNT" /> كحد أقصى. لاستعادة نافذة، عليك إغلاق نوافذ نشطة أو غير نشطة بعدد <ph name="WINDOW_COUNT" />.</translation> <translation id="8152331954420209374">الانتقال إلى "عدسة Google"</translation> @@ -1667,7 +1667,7 @@ <translation id="8261506727792406068">حذف</translation> <translation id="82619448491672958">الانتقال إلى علامات التبويب الأخرى</translation> <translation id="8266753737658117282">المتابعة باستخدام <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /></translation> -<translation id="8266862848225348053">موقع التنزيل</translation> +<translation id="8266862848225348053">مكان التنزيل</translation> <translation id="8271267069224406035">الإبلاغ عن محتوى غير مرغوب فيه</translation> <translation id="8277710303010772444">بدء البحث</translation> <translation id="8279945625179116733">يتم تأمينها باستخدام "<ph name="APP_NAME" />"</translation> @@ -1714,7 +1714,7 @@ <translation id="8453310803815879010">تشغيل لعبة الديناصور</translation> <translation id="8455675988389029454">الوصول إلى الإشارات المرجعية وكلمات المرور وغيرها على جميع أجهزتك</translation> <translation id="8458413889418591446">للانتقال بسرعة إلى المواقع الإلكترونية التي زرتها، ما عليك سوى مزامنة علامات التبويب والسجلّ. </translation> -<translation id="84594714173170813">مواصلة استخدام بيانات Chrome في حسابك على Google</translation> +<translation id="84594714173170813">يمكنك مواصلة استخدام بيانات Chrome في حسابك على Google</translation> <translation id="8460448946170646641">مراجعة العناصر الرئيسية للتحكّم في الخصوصية والأمان</translation> <translation id="8473863474539038330">العناوين والمزيد</translation> <translation id="8477178913400731244">حذف البيانات</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb index 03c8557..2026eadd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{১টি পাসওয়ার্ড ও অন্যান্য আইটেম শুধু এই ডিভাইসে সেভ করা হয়েছে। আপনার অন্যান্য ডিভাইসে সেগুলি ব্যবহার করতে হলে, আপনার Google অ্যাকাউন্ট <ph name="ACCOUNT_EMAIL" />-এ সেভ করুন।}one{#টি পাসওয়ার্ড ও অন্যান্য আইটেম শুধু এই ডিভাইসে সেভ করা হয়েছে। আপনার অন্যান্য ডিভাইসে সেগুলি ব্যবহার করতে হলে, আপনার Google অ্যাকাউন্ট <ph name="ACCOUNT_EMAIL" />-এ সেভ করুন।}other{#টি পাসওয়ার্ড ও অন্যান্য আইটেম শুধু এই ডিভাইসে সেভ করা হয়েছে। আপনার অন্যান্য ডিভাইসে সেগুলি ব্যবহার করতে হলে, আপনার Google অ্যাকাউন্ট <ph name="ACCOUNT_EMAIL" />-এ সেভ করুন।}}</translation> <translation id="3187472288455401631">বিজ্ঞাপন পরিমাপ</translation> <translation id="3189635831478931757"><ph name="GROUP_TITLE" /> ট্যাব গ্রুপ</translation> +<translation id="3200536777393523575">নিজের বর্তমান উইন্ডো বন্ধ করবেন?</translation> <translation id="3207960819495026254">বুকমার্ক করা হয়েছে</translation> <translation id="3208584281581115441">এখনই চেক করুন</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> মুছে ফেলা হয়েছে</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">ডায়ালগ বন্ধ করুন</translation> <translation id="4352287748243729941">আপনার <ph name="PROVIDER" /> পাসওয়ার্ড ব্যবহার করবেন?</translation> <translation id="4355272626458588338">বুকমার্ক যোগ করলে আপনি গুরুত্বপূর্ণ পৃষ্ঠায় ফিরে যেতে পারবেন</translation> +<translation id="4356503491090073318">কার্ডের নম্বর*</translation> <translation id="4357206670025518404">আরও <ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">সুরক্ষা সম্পর্কিত তথ্য এক ঝলকে</translation> <translation id="4378154925671717803">ফোন</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">দাম ট্র্যাক করা হচ্ছে। কোনও সাইটে দাম কমলে সেই বিষয়ে বিজ্ঞপ্তি পান।</translation> <translation id="4425173294238317796">পাসকী কনফার্মেশন শিট</translation> <translation id="442518031075347249">Google Pay অ্যাপে আপনার ভার্চুয়াল কার্ড আর ব্যবহার করতে পারবেন না। <ph name="BEGIN_LINK1" />ভার্চুয়াল কার্ড সম্পর্কে আরও জানুন<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> ও অন্য <ph name="TAB_COUNT_ONE" />টি ট্যাব বন্ধ হবে}one{<ph name="TAB_TITLE" /> ও অন্য <ph name="TAB_COUNT_MANY" />টি ট্যাব বন্ধ হবে}other{<ph name="TAB_TITLE" /> ও অন্য <ph name="TAB_COUNT_MANY" />টি ট্যাব বন্ধ হবে}}</translation> <translation id="4426508677408162512">সকল বুকমার্ক</translation> <translation id="4430277756566635951">বর্তমানে <ph name="EMAIL" /> আইডি বেছে নেওয়া হয়েছে। একটি অ্যাকাউন্ট বেছে নিন।</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ট্যাবটি বন্ধ করুন</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">এই পৃষ্ঠাটি খুঁজে পাওয়া যাচ্ছে না। আপনার লেখা বানান চেক করুন বা ওয়েব সার্চ করুন।</translation> <translation id="4988526792673242964">পৃষ্ঠাসমূহ</translation> <translation id="4991110219272367918">ওয়েবসাইট বন্ধ করা হবে কিনা তা অনুমোদন করা বা না করার বিকল্প</translation> +<translation id="4996042648402406470">পান</translation> <translation id="4996095658297597226">সাজেস্ট করা পাসওয়ার্ড ব্যবহার করতে চান?</translation> <translation id="5001388021414335527">এই সাইট এখানে ফলো করুন</translation> <translation id="5004416275253351869">Google অ্যাক্টিভিটির নিয়ন্ত্রণ</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">পূর্ববর্তী ট্যাবে চলে যান</translation> <translation id="5210365745912300556">ট্যাব বন্ধ করুন</translation> <translation id="5215957675041756913">আপনার ডেটা ও অ্যাকাউন্ট কন্ট্রোল করুন</translation> +<translation id="5218324087477576825">কার্ডের নম্বর, প্রয়োজন</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ও আরও <ph name="SEPARATOR" /> Chrome এইসব অনুমতি সরিয়ে দিয়েছে কারণ আপনি সম্প্রতি দেখেননি</translation> <translation id="5222676887888702881">সাইন-আউট করুন</translation> <translation id="5226378907213531272">গাড়ি ব্যবহার করতে হলে প্রত্যেকবার স্ক্রিন আনলক করতে হবে</translation> <translation id="5227554086496586518">সার্চ ফলাফল দেখতে ট্যাপ করুন</translation> +<translation id="5229736206150093143">লেটেস্ট ফলাফল</translation> <translation id="5233638681132016545">নতুন ট্যাব</translation> <translation id="5235196193381275927">সাইন-ইন করার সময় কোনও সমস্যা হয়েছে</translation> <translation id="5246093389635966745">টুলবারের শর্টকার্ট এডিট করুন</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">আপনার আগ্রহ অনুসারে কন্টেন্ট পেতে সাইন-ইন করুন</translation> <translation id="6764137532716892442">নতুন অ্যাক্টিভিটির সাথে <ph name="GROUP_TITLE" /> ট্যাব গ্রুপ শেয়ার করা হয়েছে</translation> <translation id="6767294960381293877">ট্যাব শেয়ার করা যাবে এমন ডিভাইসের সূচি অর্ধেক স্ক্রিন জুড়ে খোলা হয়েছে।</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" />টি ছদ্মবেশী এবং অন্য <ph name="TAB_COUNT_ONE" />টি ট্যাব বন্ধ হবে}one{<ph name="INCOGNITO_TAB_COUNT" />টি ছদ্মবেশী এবং অন্য <ph name="TAB_COUNT_MANY" />টি ট্যাব বন্ধ হবে}other{<ph name="INCOGNITO_TAB_COUNT" />টি ছদ্মবেশী এবং অন্য <ph name="TAB_COUNT_MANY" />টি ট্যাব বন্ধ হবে}}</translation> <translation id="6785476624617658922">Chrome এবং ChromeOS-এর পরিষেবার অতিরিক্ত শর্তাবলী</translation> <translation id="6786747875388722282">এক্সটেনশানসমূহ</translation> <translation id="6795633245022906657">দ্রুত নতুন ট্যাব খুলুন। এই শর্টকাট এডিট করতে, সেটিংসে যান।</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">যেকোনও ডিভাইসে আপনি সেভ করা পাসওয়ার্ড ব্যবহার করতে পারবেন। এটি <ph name="ACCOUNT" />-এর Google পাসওয়ার্ড ম্যানেজার বিকল্পে সেভ করা আছে।</translation> <translation id="7968014550143838305">পড়ার তালিকায় যোগ করা হয়েছে</translation> <translation id="7968982339740310781">বিশদ বিবরণ দেখুন</translation> +<translation id="7969391000881506217">মেয়াদ সমাপ্তির তারিখ*</translation> <translation id="7971136598759319605">১ দিন আগে ব্যবহার করা হয়েছে</translation> <translation id="7975379999046275268"><ph name="BEGIN_NEW" />নতুন<ph name="END_NEW" /> পৃষ্ঠার প্রিভিউ দেখুন</translation> <translation id="7977451675950311423">আপনি যদি এমন কোনও পাসওয়ার্ড ব্যবহার করেন যা ডেটার নিরাপত্তা লঙ্ঘনের কারণে সুরক্ষিত নয়, সেক্ষেত্রে এটি আপনাকে সতর্ক করে।</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446"><ph name="MEMBER_FULL_NAME" /> সরাতে চান?</translation> <translation id="8570677896027847510">ফাইল নিরাপদে ডাউনলোড করা যাচ্ছে না</translation> <translation id="8571213806525832805">গত ৪ সপ্তাহ</translation> +<translation id="8580435650274205305">মেয়াদ সমাপ্তির তারিখ, প্রয়োজন</translation> <translation id="8582529315803410153">অন্যান্য ডিভাইস থেকে আপনার ট্যাবগুলি এখানে দেখতে পাবেন</translation> <translation id="8585103689515290060">অটোফিল পরিষেবা</translation> <translation id="859046281437143747">'আরও বিকল্প' বোতাম থেকে দাম ট্র্যাক করুন</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index 15c052e..11537b7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 κωδικός πρόσβασης και κάποια άλλα στοιχεία έχουν αποθηκευτεί μόνο σε αυτή τη συσκευή. Για να τα χρησιμοποιήσετε στις άλλες συσκευές σας, αποθηκεύστε τα στον Λογαριασμό σας Google, <ph name="ACCOUNT_EMAIL" />.}other{# κωδικοί πρόσβασης και κάποια άλλα στοιχεία έχουν αποθηκευτεί μόνο σε αυτή τη συσκευή. Για να τα χρησιμοποιήσετε στις άλλες συσκευές σας, αποθηκεύστε τα στον Λογαριασμό σας Google, <ph name="ACCOUNT_EMAIL" />.}}</translation> <translation id="3187472288455401631">Μέτρηση διαφημίσεων</translation> <translation id="3189635831478931757">Ομάδα καρτελών <ph name="GROUP_TITLE" /></translation> +<translation id="3200536777393523575">Θέλετε να κλείσετε το τρέχον παράθυρο;</translation> <translation id="3207960819495026254">Προστέθηκε στους σελιδοδείκτες</translation> <translation id="3208584281581115441">Έλεγχος τώρα</translation> <translation id="3211426585530211793">Το <ph name="ITEM_TITLE" /> διαγράφηκε</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">Κλείσιμο παραθύρου διαλόγου</translation> <translation id="4352287748243729941">Να χρησιμοποιηθεί ο κωδικός πρόσβασης <ph name="PROVIDER" /> που διαθέτετε;</translation> <translation id="4355272626458588338">Μπορείτε να επιστρέψετε σε μια σελίδα που είναι σημαντική για εσάς προσθέτοντας έναν σελιδοδείκτη.</translation> +<translation id="4356503491090073318">Αριθμός κάρτας*</translation> <translation id="4357206670025518404">+<ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">Η ασφάλεια με μια ματιά</translation> <translation id="4378154925671717803">Τηλέφωνο</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">Παρακολούθηση τιμής. Λάβετε ειδοποιήσεις σε περίπτωση πτώσης τιμής σε οποιονδήποτε ιστότοπο.</translation> <translation id="4425173294238317796">Φύλλο επιβεβαίωσης κλειδιού πρόσβασης</translation> <translation id="442518031075347249">Δεν θα μπορείτε πλέον να χρησιμοποιήσετε την εικονική σας κάρτα με το Google Pay. <ph name="BEGIN_LINK1" />Μάθετε περισσότερα σχετικά με τις εικονικές κάρτες<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{Η καρτέλα <ph name="TAB_TITLE" /> και <ph name="TAB_COUNT_ONE" /> ακόμη καρτέλα θα κλείσουν}other{Η καρτέλα <ph name="TAB_TITLE" /> και <ph name="TAB_COUNT_MANY" /> ακόμη καρτέλες θα κλείσουν}}</translation> <translation id="4426508677408162512">Όλοι οι σελιδοδείκτες</translation> <translation id="4430277756566635951">Τρέχουσα επιλογή: <ph name="EMAIL" />. Επιλέξτε λογαριασμό.</translation> <translation id="4452411734226507615">Κλείσιμο καρτέλας <ph name="TAB_TITLE" /></translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">Δεν είναι δυνατή η εύρεση της σελίδας. Ελέγξτε την ορθογραφία ή δοκιμάστε μια αναζήτηση στον ιστό.</translation> <translation id="4988526792673242964">Σελίδες</translation> <translation id="4991110219272367918">Κλείσιμο επιλογής για να εγκρίνετε ή να μην εγκρίνετε έναν ιστότοπο</translation> +<translation id="4996042648402406470">Λήψη</translation> <translation id="4996095658297597226">Χρήση του προτεινόμενου κωδικού πρόσβασης;</translation> <translation id="5001388021414335527">Ακολουθήστε αυτόν τον ιστότοπο εδώ</translation> <translation id="5004416275253351869">Στοιχεία ελέγχου δραστηριότητας Google</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">Μετάβαση στην προηγούμενη καρτέλα</translation> <translation id="5210365745912300556">Κλείσιμο καρτέλας</translation> <translation id="5215957675041756913">Ελέγξτε τα δεδομένα και τον λογαριασμό σας</translation> +<translation id="5218324087477576825">Απαιτείται αριθμός κάρτας</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> και άλλα <ph name="SEPARATOR" /> Το Chrome κατάργησε αυτές τις άδειες, επειδή δεν έχετε επισκεφτεί τον ιστότοπο πρόσφατα</translation> <translation id="5222676887888702881">Έξοδος</translation> <translation id="5226378907213531272">Η οθόνη θα ξεκλειδώνεται κάθε φορά που χρησιμοποιείτε το αυτοκίνητο</translation> <translation id="5227554086496586518">Πατήστε για να δείτε αποτελέσματα αναζήτησης</translation> +<translation id="5229736206150093143">Τελευταία αποτελέσματα</translation> <translation id="5233638681132016545">Νέα καρτέλα</translation> <translation id="5235196193381275927">Παρουσιάστηκε κάποιο πρόβλημα κατά τη σύνδεση</translation> <translation id="5246093389635966745">Επεξεργασία συντόμευσης γραμμής εργαλείων</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">Συνδεθείτε για να λάβετε περιεχόμενο με βάση τα ενδιαφέροντά σας</translation> <translation id="6764137532716892442">Κοινόχρηστη ομάδα καρτελών <ph name="GROUP_TITLE" /> με νέα δραστηριότητα</translation> <translation id="6767294960381293877">Άνοιγμα σε μισό ύψος της λίστας συσκευών στις οποίες θα κοινοποιηθεί μια καρτέλα.</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> καρτέλα ανώνυμης περιήγησης και <ph name="TAB_COUNT_ONE" /> ακόμη καρτέλα θα κλείσουν}other{<ph name="INCOGNITO_TAB_COUNT" /> καρτέλες ανώνυμης περιήγησης και <ph name="TAB_COUNT_MANY" /> ακόμη καρτέλες θα κλείσουν}}</translation> <translation id="6785476624617658922">Πρόσθετοι Όροι Παροχής Υπηρεσιών Chrome και Chrome OS</translation> <translation id="6786747875388722282">Επεκτάσεις</translation> <translation id="6795633245022906657">Ανοίξτε γρήγορα μια νέα καρτέλα. Για να επεξεργαστείτε αυτήν τη συντόμευση, μεταβείτε στις Ρυθμίσεις.</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">Μπορείτε να χρησιμοποιείτε τους αποθηκευμένους κωδικούς πρόσβασης σε οποιαδήποτε συσκευή. Αποθηκεύονται στον Διαχειριστή κωδικών πρόσβασης Google για τον λογαριασμό <ph name="ACCOUNT" />.</translation> <translation id="7968014550143838305">Προστέθηκε στη λίστα ανάγνωσης</translation> <translation id="7968982339740310781">Προβολή λεπτομερειών</translation> +<translation id="7969391000881506217">Ημερομηνία λήξης*</translation> <translation id="7971136598759319605">Ενεργή 1 ημέρα πριν</translation> <translation id="7975379999046275268">Προεπισκόπηση σελίδας <ph name="BEGIN_NEW" />Νέο<ph name="END_NEW" /></translation> <translation id="7977451675950311423">Σας προειδοποιεί εάν χρησιμοποιήσετε έναν κωδικό πρόσβασης που έχει παραβιαστεί μέσω παραβίασης δεδομένων.</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446">Κατάργηση του χρήστη <ph name="MEMBER_FULL_NAME" />;</translation> <translation id="8570677896027847510">Δεν είναι δυνατή η λήψη του αρχείου με ασφάλεια.</translation> <translation id="8571213806525832805">Τελευταίες 4 εβδομάδες</translation> +<translation id="8580435650274205305">Απαιτείται η ημερομηνία λήξης</translation> <translation id="8582529315803410153">Εδώ θα βρείτε τις καρτέλες σας από τις άλλες συσκευές</translation> <translation id="8585103689515290060">Υπηρεσίες αυτόματης συμπλήρωσης</translation> <translation id="859046281437143747">Παρακολούθηση τιμής από το κουμπί Περισσότερες επιλογές</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb index 2099d196..18fd294 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 contraseña y otros elementos solo se guardan en este dispositivo. Para usarlos en tus otros dispositivos, guárdalos en tu cuenta de Google (<ph name="ACCOUNT_EMAIL" />).}other{# contraseñas y otros elementos solo se guardan en este dispositivo. Para usarlos en tus otros dispositivos, guárdalos en tu cuenta de Google (<ph name="ACCOUNT_EMAIL" />).}}</translation> <translation id="3187472288455401631">Medición de anuncios</translation> <translation id="3189635831478931757">Grupo de pestañas <ph name="GROUP_TITLE" /></translation> +<translation id="3200536777393523575">¿Cerrar la ventana actual?</translation> <translation id="3207960819495026254">Añadido a marcadores</translation> <translation id="3208584281581115441">Comprobar ahora</translation> <translation id="3211426585530211793">Se ha eliminado <ph name="ITEM_TITLE" /></translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">Cerrar cuadro de diálogo</translation> <translation id="4352287748243729941">¿Usar tu contraseña de <ph name="PROVIDER" />?</translation> <translation id="4355272626458588338">Puedes volver a una página que consideres importante añadiendo un marcador</translation> +<translation id="4356503491090073318">Número de tarjeta*</translation> <translation id="4357206670025518404"><ph name="COUNT_NUMBER" />+</translation> <translation id="4359809482106103048">Seguridad de un vistazo</translation> <translation id="4378154925671717803">Teléfono</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">Siguiendo precio. Recibe alertas si el precio baja en algún sitio.</translation> <translation id="4425173294238317796">Hoja de confirmación de llave de acceso</translation> <translation id="442518031075347249">Ya no podrás usar tu tarjeta virtual con Google Play. <ph name="BEGIN_LINK1" />Más información sobre tarjetas virtuales<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{Se cerrarán la pestaña <ph name="TAB_TITLE" /> y <ph name="TAB_COUNT_ONE" /> más}other{Se cerrarán la pestaña <ph name="TAB_TITLE" /> y <ph name="TAB_COUNT_MANY" /> más}}</translation> <translation id="4426508677408162512">Todos los marcadores</translation> <translation id="4430277756566635951">Se ha seleccionado <ph name="EMAIL" />. Elige una cuenta.</translation> <translation id="4452411734226507615">Cerrar la pestaña <ph name="TAB_TITLE" /></translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">No se puede encontrar la página. Comprueba que la hayas escrito bien o prueba a hacer una búsqueda web.</translation> <translation id="4988526792673242964">Páginas</translation> <translation id="4991110219272367918">Opción para aprobar o no un sitio web cerrado</translation> +<translation id="4996042648402406470">Obtener</translation> <translation id="4996095658297597226">¿Usar contraseña sugerida?</translation> <translation id="5001388021414335527">Seguir a este sitio aquí</translation> <translation id="5004416275253351869">Controles de actividad de Google</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">Te dirige a la pestaña anterior</translation> <translation id="5210365745912300556">Cerrar pestaña</translation> <translation id="5215957675041756913">Controlar tus datos y tu cuenta</translation> +<translation id="5218324087477576825">Número de tarjeta, obligatorio</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> y más <ph name="SEPARATOR" /> Chrome ha eliminado estos permisos porque no has visitado el sitio recientemente</translation> <translation id="5222676887888702881">Cerrar sesión</translation> <translation id="5226378907213531272">Tendrás que desbloquear la pantalla cada vez que uses el coche</translation> <translation id="5227554086496586518">Toca para ver los resultados de búsqueda</translation> +<translation id="5229736206150093143">Últimos resultados</translation> <translation id="5233638681132016545">Nueva pestaña</translation> <translation id="5235196193381275927">No se ha podido iniciar la sesión</translation> <translation id="5246093389635966745">Editar combinación de teclas de la barra de herramientas</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">Inicia sesión para ver contenido basado en tus intereses</translation> <translation id="6764137532716892442">Grupo de pestañas <ph name="GROUP_TITLE" /> compartido con actividad nueva</translation> <translation id="6767294960381293877">La lista de dispositivos con los que puedes compartir una pestaña está abierta a media altura.</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{Se cerrarán <ph name="INCOGNITO_TAB_COUNT" /> pestaña de Incógnito y <ph name="TAB_COUNT_ONE" /> pestaña más}other{Se cerrarán <ph name="INCOGNITO_TAB_COUNT" /> pestaña de Incógnito y <ph name="TAB_COUNT_MANY" /> pestañas más}}</translation> <translation id="6785476624617658922">Términos del Servicio Adicionales de Chrome y ChromeOS</translation> <translation id="6786747875388722282">Extensiones</translation> <translation id="6795633245022906657">Abre una pestaña nueva rápidamente. Para editar esta combinación de teclas, ve a Configuración.</translation> @@ -1405,6 +1412,7 @@ <translation id="7224097611345298931">Se han combinado todas las contraseñas guardadas solo en este dispositivo para Chrome y <ph name="CHROME_CHANNEL" />. Puedes autocompletar todas tus contraseñas guardadas en ambas aplicaciones.</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 descarga pendiente}other{# descargas pendientes}}</translation> <translation id="7230064152164845085">Cambiar a modo Incógnito</translation> +<translation id="7230836263524391273">Ocultar modo Lectura</translation> <translation id="7237724030342645845">El Gestor de contraseñas de Google ha dejado de funcionar</translation> <translation id="72415438529550637">La sugerencia de contraseña está cerrada.</translation> <translation id="7248671827512403053">Aplicación</translation> @@ -1582,6 +1590,7 @@ <translation id="7965838025086216108">Puedes usar las contraseñas guardadas en cualquier dispositivo. Se guardan en el Gestor de contraseñas de Google de <ph name="ACCOUNT" />.</translation> <translation id="7968014550143838305">Añadido a la lista de lectura</translation> <translation id="7968982339740310781">Ver detalles</translation> +<translation id="7969391000881506217">Fecha de vencimiento*</translation> <translation id="7971136598759319605">Activo hace 1 día</translation> <translation id="7975379999046275268">Revisar página <ph name="BEGIN_NEW" />Nuevo<ph name="END_NEW" /></translation> <translation id="7977451675950311423">Te avisa si usas una contraseña vulnerada en una brecha de seguridad de datos.</translation> @@ -1741,6 +1750,7 @@ <translation id="8565021320663436446">¿Quitar a <ph name="MEMBER_FULL_NAME" />?</translation> <translation id="8570677896027847510">El archivo no se puede descargar de forma segura</translation> <translation id="8571213806525832805">Últimas 4 semanas</translation> +<translation id="8580435650274205305">Fecha de vencimiento, obligatorio</translation> <translation id="8582529315803410153">Aquí verás tus pestañas de otros dispositivos</translation> <translation id="8585103689515290060">Servicios de autocompletado</translation> <translation id="859046281437143747">Sigue el precio desde el botón Más opciones</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb index eb9e738..3024bb9b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -1405,6 +1405,7 @@ <translation id="7224097611345298931">Kõik paroolid, mis olid salvestatud Chrome'i ja versiooni <ph name="CHROME_CHANNEL" /> jaoks ainult sellesse seadmesse, liideti. Saate kõik salvestatud paroolid mõlemas rakenduses automaatselt sisestada.</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 allalaadimine on ootel}other{# allalaadimist on ootel}}</translation> <translation id="7230064152164845085">Lülitu inkognito režiimile</translation> +<translation id="7230836263524391273">Peida lugemisrežiim</translation> <translation id="7237724030342645845">Google'i paroolihaldur lõpetas töötamise</translation> <translation id="72415438529550637">Parooli soovitus on suletud.</translation> <translation id="7248671827512403053">Rakendus</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb index 642f8c1f..eaf0b1410 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -1262,7 +1262,7 @@ <translation id="6657585470893396449">Mot de passe</translation> <translation id="666731172850799929">Ouvrir dans <ph name="APP_NAME" /></translation> <translation id="6671495933530132209">Copier l'image</translation> -<translation id="6672697278890207089">Saisissez votre mot de passe multiterme.</translation> +<translation id="6672697278890207089">Saisir votre phrase secrète</translation> <translation id="6672917148207387131">Ajouter <ph name="DOMAIN" /></translation> <translation id="6674571176963658787">Pour lancer la synchronisation, saisissez votre phrase secrète</translation> <translation id="6676927815633975364">Connectez-vous à ce site et à Chrome</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb index 75bcec8..43548d5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 પાસવર્ડ અને અન્ય આઇટમને માત્ર આ ડિવાઇસમાં સાચવવામાં આવી છે. તમારા અન્ય ડિવાઇસમાં તેનો ઉપયોગ કરવા માટે, તેને તમારા Google એકાઉન્ટ <ph name="ACCOUNT_EMAIL" />માં સાચવો.}one{# પાસવર્ડ અને અન્ય આઇટમને માત્ર આ ડિવાઇસમાં સાચવવામાં આવી છે. તમારા અન્ય ડિવાઇસમાં તેનો ઉપયોગ કરવા માટે, તેને તમારા Google એકાઉન્ટ <ph name="ACCOUNT_EMAIL" />માં સાચવો.}other{# પાસવર્ડ અને અન્ય આઇટમને માત્ર આ ડિવાઇસમાં સાચવવામાં આવી છે. તમારા અન્ય ડિવાઇસમાં તેનો ઉપયોગ કરવા માટે, તેને તમારા Google એકાઉન્ટ <ph name="ACCOUNT_EMAIL" />માં સાચવો.}}</translation> <translation id="3187472288455401631">જાહેરાતના પરફોર્મન્સનું માપન</translation> <translation id="3189635831478931757"><ph name="GROUP_TITLE" /> ટૅબનું ગ્રૂપ</translation> +<translation id="3200536777393523575">તમારી હાલની વિન્ડો બંધ કરીએ?</translation> <translation id="3207960819495026254">બુકમાર્ક કરેલ</translation> <translation id="3208584281581115441">હમણાં ચેક કરો</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> કાઢી નાખી</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">સંવાદ બંધ કરો</translation> <translation id="4352287748243729941">તમારા <ph name="PROVIDER" /> પાસવર્ડનો ઉપયોગ કરીએ?</translation> <translation id="4355272626458588338">તમે કોઈ બુકમાર્ક ઉમેરીને તમારા માટે મહત્ત્વપૂર્ણ હોય એવા પેજ પર પાછા જઈ શકો છો</translation> +<translation id="4356503491090073318">કાર્ડ નંબર*</translation> <translation id="4357206670025518404">+<ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">સલામતી, એક નજરમાં</translation> <translation id="4378154925671717803">ફોન</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">કિંમત ટ્રૅક કરી રહ્યાં છીએ. જો કોઈપણ સાઇટ પર કિંમતમાં ઘટાડો થાય, તો અલર્ટ મેળવો.</translation> <translation id="4425173294238317796">પાસકી કન્ફર્મેશન શીટ</translation> <translation id="442518031075347249">હવેથી તમે Google Pay સાથે તમારા વર્ચ્યુઅલ કાર્ડનો ઉપયોગ કરી શકશો નહીં. <ph name="BEGIN_LINK1" />વર્ચ્યુઅલ કાર્ડ વિશે વધુ જાણો<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> અને <ph name="TAB_COUNT_ONE" /> અન્ય ટૅબ બંધ કરવામાં આવશે}one{<ph name="TAB_TITLE" /> અને <ph name="TAB_COUNT_MANY" /> અન્ય ટૅબ બંધ કરવામાં આવશે}other{<ph name="TAB_TITLE" /> અને <ph name="TAB_COUNT_MANY" /> અન્ય ટૅબ બંધ કરવામાં આવશે}}</translation> <translation id="4426508677408162512">બધા બુકમાર્ક્સ</translation> <translation id="4430277756566635951">હાલમાં <ph name="EMAIL" /> પસંદ કર્યું છે. એકાઉન્ટ પસંદ કરો.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ટૅબ બંધ કરો</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">એ પેજ મળતું નથી. તમારી જોડણી ચેક કરો અથવા વેબ શોધનો પ્રયાસ કરો.</translation> <translation id="4988526792673242964">પેજ</translation> <translation id="4991110219272367918">કોઈ વેબસાઇટને મંજૂરી આપવાનો અથવા ન આપવાનો વિકલ્પ બંધ કર્યો</translation> +<translation id="4996042648402406470">મેળવો</translation> <translation id="4996095658297597226">શું સૂચવેલા પાસવર્ડનો ઉપયોગ કરીએ?</translation> <translation id="5001388021414335527">આ સાઇટને અહીં ફૉલો કરો</translation> <translation id="5004416275253351869">Google પ્રવૃત્તિ નિયંત્રણો</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">પાછલી ટૅબ પર જાઓ</translation> <translation id="5210365745912300556">ટૅબ બંધ કરો</translation> <translation id="5215957675041756913">તમારા ડેટા અને એકાઉન્ટનું નિયંત્રણ કરો</translation> +<translation id="5218324087477576825">કાર્ડ નંબર (આવશ્યક છે)</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> અને અન્ય <ph name="SEPARATOR" /> Chrome દ્વારા આ પરવાનગીઓ કાઢી નાખવામાં આવી કારણ કે તમે તાજેતરમાં મુલાકાત લીધી ન હતી</translation> <translation id="5222676887888702881">સાઇન આઉટ</translation> <translation id="5226378907213531272">જ્યારે પણ તમે કારનો ઉપયોગ કરશો, તે દરેક વખતે તમારે તમારી સ્ક્રીન અનલૉક કરવાની રહેશે</translation> <translation id="5227554086496586518">શોધ પરિણામો જોવા માટે ટૅપ કરો</translation> +<translation id="5229736206150093143">લેટેસ્ટ પરિણામો</translation> <translation id="5233638681132016545">નવું ટૅબ</translation> <translation id="5235196193381275927">સાઇન ઇન કરતી વખતે કંઈક ખોટું થયું</translation> <translation id="5246093389635966745">ટૂલબારના શૉર્ટકટમાં ફેરફાર કરો</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">તમારી રુચિઓ પર આધારિત કન્ટેન્ટ મેળવવા માટે સાઇન ઇન કરો</translation> <translation id="6764137532716892442">નવી ઍક્ટિવિટી સાથે શેર કરેલું <ph name="GROUP_TITLE" /> ટૅબનું ગ્રૂપ</translation> <translation id="6767294960381293877">કોઈ ટૅબ સાથે શેર કરવાના ડિવાઇસની સૂચિ અડધી ઊંચાઈએ ખૂલે છે.</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> છૂપા અને <ph name="TAB_COUNT_ONE" /> અન્ય ટૅબ બંધ કરવામાં આવશે}one{<ph name="INCOGNITO_TAB_COUNT" /> છૂપા અને <ph name="TAB_COUNT_MANY" /> અન્ય ટૅબ બંધ કરવામાં આવશે}other{<ph name="INCOGNITO_TAB_COUNT" /> છૂપા અને <ph name="TAB_COUNT_MANY" /> અન્ય ટૅબ બંધ કરવામાં આવશે}}</translation> <translation id="6785476624617658922">Chrome અને ChromeOSની વધારાની સેવાની શરતો</translation> <translation id="6786747875388722282">એક્સ્ટેન્શન</translation> <translation id="6795633245022906657">ઝડપથી નવું ટૅબ ખોલો. આ શૉર્ટકટમાં ફેરફાર કરવા માટે, સેટિંગ પર જાઓ.</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">તમે કોઈપણ ડિવાઇસ પર સાચવેલા પાસવર્ડનો ઉપયોગ કરી શકો છો. તેમને <ph name="ACCOUNT" /> માટેના Google Password Managerમાં સાચવવામાં આવે છે.</translation> <translation id="7968014550143838305">વાંચન સૂચિમાં ઉમેર્યું</translation> <translation id="7968982339740310781">વિગતો જુઓ</translation> +<translation id="7969391000881506217">સમાપ્તિ તારીખ*</translation> <translation id="7971136598759319605">1 દિવસ પહેલાં સક્રિય હતું</translation> <translation id="7975379999046275268">પેજને પ્રીવ્યૂ કરો <ph name="BEGIN_NEW" />નવું<ph name="END_NEW" /></translation> <translation id="7977451675950311423">તમે ઉપયોગમાં લો છો તે પાસવર્ડ સાથે કોઈ ડેટા ઉલ્લંઘન દરમિયાન ચેડાં કરવામાં આવ્યા હોય તો તમને ચેતવણી આપે છે.</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446"><ph name="MEMBER_FULL_NAME" />ને કાઢી નાખીએ?</translation> <translation id="8570677896027847510">ફાઇલ સુરક્ષિત રીતે ડાઉનલોડ કરી શકાતી નથી</translation> <translation id="8571213806525832805">છેલ્લા 4 અઠવાડિયા</translation> +<translation id="8580435650274205305">સમાપ્તિ તારીખ (આવશ્યક છે)</translation> <translation id="8582529315803410153">તમને અન્ય ડિવાઇસમાંની તમારી ટૅબ અહીં મળશે</translation> <translation id="8585103689515290060">ઑટોમૅટિક રીતે ભરવાની સુવિધાઓ</translation> <translation id="859046281437143747">વધુ વિકલ્પોના બટન પરથી કિંમત ટ્રૅક કરો</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb index 5cdfe12..e1d0ed7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 件のパスワードとその他のアイテムがこのデバイスのみに保存されています。他のデバイスで使用するには、Google アカウント(<ph name="ACCOUNT_EMAIL" />)に保存してください。}other{# 件のパスワードとその他のアイテムがこのデバイスのみに保存されています。他のデバイスで使用するには、Google アカウント(<ph name="ACCOUNT_EMAIL" />)に保存してください。}}</translation> <translation id="3187472288455401631">広告の測定</translation> <translation id="3189635831478931757"><ph name="GROUP_TITLE" /> タブグループ</translation> +<translation id="3200536777393523575">現在のウィンドウを閉じますか?</translation> <translation id="3207960819495026254">ブックマークしました</translation> <translation id="3208584281581115441">今すぐ確認</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> を削除しました</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">ダイアログを閉じる</translation> <translation id="4352287748243729941"><ph name="PROVIDER" /> のパスワードを使用しますか?</translation> <translation id="4355272626458588338">重要なページは、ブックマークに追加しておくとすぐにアクセスできます</translation> +<translation id="4356503491090073318">カード番号*</translation> <translation id="4357206670025518404">他 <ph name="COUNT_NUMBER" /> 色</translation> <translation id="4359809482106103048">安全に関する概要</translation> <translation id="4378154925671717803">電話</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">価格をトラッキングします。値下げしたサイトがある場合に通知します。</translation> <translation id="4425173294238317796">パスキー確認シート</translation> <translation id="442518031075347249">Google Pay で仮想カードを使用できなくなります。<ph name="BEGIN_LINK1" />仮想カードの詳細<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> と、その他 <ph name="TAB_COUNT_ONE" /> 個のタブを閉じます}other{<ph name="TAB_TITLE" /> と、その他 <ph name="TAB_COUNT_MANY" /> 個のタブを閉じます}}</translation> <translation id="4426508677408162512">すべてのブックマーク</translation> <translation id="4430277756566635951"><ph name="EMAIL" /> が現在選択されています。アカウントを選択してください。</translation> <translation id="4452411734226507615">「<ph name="TAB_TITLE" />」タブを閉じます</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">該当のページは見つかりません。つづりを確認するか、ウェブ検索をお試しください。</translation> <translation id="4988526792673242964">ページ</translation> <translation id="4991110219272367918">ウェブサイトを承認するかどうかを決定するオプション(非表示)</translation> +<translation id="4996042648402406470">取得</translation> <translation id="4996095658297597226">提案されたパスワードを使用しますか?</translation> <translation id="5001388021414335527">このサイトをフォローするにはこちら</translation> <translation id="5004416275253351869">Google アクティビティ管理</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">前のタブに移動する</translation> <translation id="5210365745912300556">タブを閉じる</translation> <translation id="5215957675041756913">データとアカウントの管理</translation> +<translation id="5218324087477576825">カード番号、必須です</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />、<ph name="PERMISSION_2" />など <ph name="SEPARATOR" /> 最近アクセスしていないため、サイトから権限を削除しました</translation> <translation id="5222676887888702881">ログアウト</translation> <translation id="5226378907213531272">車を使うたびに画面ロックが解除されます</translation> <translation id="5227554086496586518">タップして検索結果を見る</translation> +<translation id="5229736206150093143">最新の検索結果</translation> <translation id="5233638681132016545">新しいタブ</translation> <translation id="5235196193381275927">ログイン中に問題が発生しました</translation> <translation id="5246093389635966745">ツールバー ショートカットの編集</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">ログインすると、興味や関心に基づくコンテンツが表示されるようになります</translation> <translation id="6764137532716892442">新しいアクティビティがある共有の <ph name="GROUP_TITLE" /> タブグループ</translation> <translation id="6767294960381293877">タブを共有するデバイスのリストが画面の下半分に表示されました。</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> 個のシークレット タブと、その他 <ph name="TAB_COUNT_ONE" /> 個のタブを閉じます}other{<ph name="INCOGNITO_TAB_COUNT" /> 個のシークレット タブと、その他 <ph name="TAB_COUNT_MANY" /> 個のタブを閉じます}}</translation> <translation id="6785476624617658922">Chrome および ChromeOS 追加利用規約</translation> <translation id="6786747875388722282">拡張機能</translation> <translation id="6795633245022906657">新しいタブをすばやく開きます。このショートカットは [設定] で編集できます。</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">保存したパスワードは他のデバイスで使用できます。パスワードは、<ph name="ACCOUNT" /> の Google パスワード マネージャーに保存されます。</translation> <translation id="7968014550143838305">リーディング リストに追加しました</translation> <translation id="7968982339740310781">詳細を表示</translation> +<translation id="7969391000881506217">有効期限*</translation> <translation id="7971136598759319605">最終同期: 1 日前</translation> <translation id="7975379999046275268">ページをプレビュー <ph name="BEGIN_NEW" />New<ph name="END_NEW" /></translation> <translation id="7977451675950311423">データ侵害で流出したパスワードを使用すると警告します。</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446"><ph name="MEMBER_FULL_NAME" /> を削除しますか?</translation> <translation id="8570677896027847510">ファイルを安全にダウンロードできません</translation> <translation id="8571213806525832805">過去 4 週間</translation> +<translation id="8580435650274205305">有効期限、必須です</translation> <translation id="8582529315803410153">他のデバイスで開いたタブがここに表示されます</translation> <translation id="8585103689515290060">自動入力サービス</translation> <translation id="859046281437143747">[その他のオプション] から価格をトラッキングできます</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb index 274fbf7..8c4fae4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 პაროლი და სხვა ერთეულები შენახულია მხოლოდ ამ მოწყობილობაზე. თქვენს სხვა მოწყობილობებზე მათ გამოსაყენებლად შეინახეთ ისინი თქვენს Google ანგარიშში (<ph name="ACCOUNT_EMAIL" />).}other{# პაროლი და სხვა ერთეულები შენახულია მხოლოდ ამ მოწყობილობაზე. თქვენს სხვა მოწყობილობებზე მათ გამოსაყენებლად შეინახეთ ისინი თქვენს Google ანგარიშში (<ph name="ACCOUNT_EMAIL" />).}}</translation> <translation id="3187472288455401631">რეკლამის ეფექტურობის გაზომვა</translation> <translation id="3189635831478931757">ჩანართების ჯგუფი „<ph name="GROUP_TITLE" />“</translation> +<translation id="3200536777393523575">დაიხუროს თქვენი მიმდინარე ფანჯარა?</translation> <translation id="3207960819495026254">ჩანიშნულია</translation> <translation id="3208584281581115441">ახლავე შემოწმება</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> წაშლილია</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">დიალოგის დახურვა</translation> <translation id="4352287748243729941">გამოიყენებთ <ph name="PROVIDER" /> პაროლს?</translation> <translation id="4355272626458588338">თქვენთვის მნიშვნელოვან გვერდზე დაბრუნება შესაძლებელია სანიშნეს დამატებით</translation> +<translation id="4356503491090073318">ბარათის ნომერი*</translation> <translation id="4357206670025518404">+<ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">უსაფრთხოების მოკლე მიმოხილვა</translation> <translation id="4378154925671717803">ტელეფონი</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">მიმდინარეობს ფასისთვის თვალის მიდევნება. თქვენ მიიღებთ გაფრთხილებებს, როცა ფასი დაიკლებს რომელიმე საიტზე.</translation> <translation id="4425173294238317796">წვდომის გასაღების დადასტურების ფურცელი</translation> <translation id="442518031075347249">Google Pay-ში თქვენს ვირტუალურ ბარათს ვეღარ გამოიყენებთ. <ph name="BEGIN_LINK1" />შეიტყვეთ მეტი ვირტუალური ბარათების შესახებ<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{დაიხურება <ph name="TAB_TITLE" /> და <ph name="TAB_COUNT_ONE" /> სხვა ჩანართი}other{დაიხურება <ph name="TAB_TITLE" /> და <ph name="TAB_COUNT_MANY" /> სხვა ჩანართი}}</translation> <translation id="4426508677408162512">ყველა სანიშნე</translation> <translation id="4430277756566635951">ამჟამად არჩეულია <ph name="EMAIL" />. აირჩიეთ ანგარიში.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ჩანართის დახურვა</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">ამ გვერდის პოვნა ვერ ხერხდება. შეამოწმეთ მართლწერა, ან ცადეთ ვებში მოძიება.</translation> <translation id="4988526792673242964">გვერდები</translation> <translation id="4991110219272367918">ვებსაიტის დადასტურების ან უარყოფის ვარიანტი დახურულია</translation> +<translation id="4996042648402406470">მიღება</translation> <translation id="4996095658297597226">გსურთ შემოთავაზებული პაროლის გამოყენება?</translation> <translation id="5001388021414335527">მიადევნეთ თვალი ამ საიტს აქ</translation> <translation id="5004416275253351869">Google აქტივობის მართვის საშუალებები</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">წინა ჩანართზე გადასვლა</translation> <translation id="5210365745912300556">ჩანართის დახურვა</translation> <translation id="5215957675041756913">თქვენი მონაცემებისა და ანგარიშის მართვა</translation> +<translation id="5218324087477576825">ბარათის ნომერი (სავალდებულოა)</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> და კიდევ <ph name="SEPARATOR" /> Chrome-მა ამოშალა ეს ნებართვები, რადგან თქვენ ბოლო დროს ეს საიტი არ მოგინახულებიათ</translation> <translation id="5222676887888702881">გამოსვლა</translation> <translation id="5226378907213531272">მანქანის ყოველი გამოყენებისას ეკრანი უნდა განბლოკოთ</translation> <translation id="5227554086496586518">შეეხეთ ძიების შედეგების სანახავად</translation> +<translation id="5229736206150093143">უახლესი შედეგები</translation> <translation id="5233638681132016545">ახალი ჩანართი</translation> <translation id="5235196193381275927">შესვლისას წარმოიქმნა შეფერხება</translation> <translation id="5246093389635966745">ხელსაწყოთა ზოლის მალსახმობის რედაქტირება</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">შედით, რათა თქვენს ინტერესებზე მორგებული კონტენტი მიიღოთ</translation> <translation id="6764137532716892442">ჩანართების გაზიარებული ჯგუფი „<ph name="GROUP_TITLE" />“ ახალი აქტივობით</translation> <translation id="6767294960381293877">მოწყობილობების სია, რომლებთანაც უნდა გაზიარდეს ჩანართი, გახსნილია ნახევარ სიმაღლეზე.</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{დაიხურება <ph name="INCOGNITO_TAB_COUNT" /> ინკოგნიტო და <ph name="TAB_COUNT_ONE" /> სხვა ჩანართი}other{დაიხურება <ph name="INCOGNITO_TAB_COUNT" /> ინკოგნიტო და <ph name="TAB_COUNT_MANY" /> სხვა ჩანართი}}</translation> <translation id="6785476624617658922">Chrome-ისა და ChromeOS-ის მომსახურების დამატებითი პირობები</translation> <translation id="6786747875388722282">გაფართოებები</translation> <translation id="6795633245022906657">სწრაფად გახსენით ახალი ჩანართი. ამ მალსახმობის რედაქტირებისთვის გადადით პარამეტრებზე.</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">შენახული პაროლების გამოყენება შეგიძლიათ ნებისმიერ მოწყობილობაზე. ისინი Google პაროლების მმართველის მიერ <ph name="ACCOUNT" />-ისთვის ინახება.</translation> <translation id="7968014550143838305">დაემატა საკითხავ სიას</translation> <translation id="7968982339740310781">დეტალების დათვალიერება</translation> +<translation id="7969391000881506217">მოქმედების ვადა*</translation> <translation id="7971136598759319605">აქტიური იყო 1 დღის წინ</translation> <translation id="7975379999046275268">გვერდის გადახედვა <ph name="BEGIN_NEW" />სიახლე<ph name="END_NEW" /></translation> <translation id="7977451675950311423">გაგაფრთხილებთ, თუ იყენებთ პაროლს, რომელიც პერსონალურ მონაცემთა გაჟონვისას გამჟღავნდა.</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446">ამოიშალოს <ph name="MEMBER_FULL_NAME" />?</translation> <translation id="8570677896027847510">ფაილის დაცულად ჩამოტვირთვა ვერ ხერხდება</translation> <translation id="8571213806525832805">ბოლო 4 კვირა</translation> +<translation id="8580435650274205305">მოქმედების ვადა (სავალდებულოა)</translation> <translation id="8582529315803410153">აქ იპოვით ჩანართებს თქვენი სხვა მოწყობილობებიდან</translation> <translation id="8585103689515290060">ავტომატური შევსების სერვისები</translation> <translation id="859046281437143747">ადევნეთ თვალი ფასს „სხვა ვარიანტების“ ღილაკით</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index b9bdbe5..6bb8e3a0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 құпия сөз және басқа элементтер тек осы құрылғыға сақталды. Оларды басқа құрылғыларыңызда пайдалану үшін Google аккаунтыңызға (<ph name="ACCOUNT_EMAIL" />) сақтаңыз.}other{# құпия сөз және басқа элементтер тек осы құрылғыға сақталды. Оларды басқа құрылғыларыңызда пайдалану үшін Google аккаунтыңызға (<ph name="ACCOUNT_EMAIL" />) сақтаңыз.}}</translation> <translation id="3187472288455401631">Жарнама көрсеткіштерін өлшеу</translation> <translation id="3189635831478931757"><ph name="GROUP_TITLE" /> қойындылар тобы</translation> +<translation id="3200536777393523575">Қазіргі терезені жабу қажет пе?</translation> <translation id="3207960819495026254">Бетбелгі қойылған</translation> <translation id="3208584281581115441">Қазір тексеру</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> жойылды.</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">Диалогтік терезені жабу</translation> <translation id="4352287748243729941"><ph name="PROVIDER" /> құпия сөзін пайдалану қажет пе?</translation> <translation id="4355272626458588338">Бетбелгі қосу арқылы сіз үшін маңызды бетке орала аласыз.</translation> +<translation id="4356503491090073318">Карта нөмірі*</translation> <translation id="4357206670025518404">+<ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">Қауіпсіздік туралы қысқаша мәлімет</translation> <translation id="4378154925671717803">Телефон</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">Баға бақылануда. Қандай да бір сайтта баға төмендесе, сізге хабарланады.</translation> <translation id="4425173294238317796">Кіру кілтін растау парағы</translation> <translation id="442518031075347249">Бұдан былай виртуалдық картаны Google Pay қызметінде пайдалана алмайтын боласыз. <ph name="BEGIN_LINK1" />Виртуалдық карталар туралы толығырақ ақпарат алыңыз.<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> және тағы <ph name="TAB_COUNT_ONE" /> қойынды жабылады.}other{<ph name="TAB_TITLE" /> және тағы <ph name="TAB_COUNT_MANY" /> қойынды жабылады.}}</translation> <translation id="4426508677408162512">Барлық бетбелгілер</translation> <translation id="4430277756566635951"><ph name="EMAIL" /> таңдалды. Аккаунт таңдаңыз.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> қойындысын жабу</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">Бет табылмады. Емлені тексеріңіз немесе интернеттен іздеп көріңіз.</translation> <translation id="4988526792673242964">Беттер</translation> <translation id="4991110219272367918">Веб-сайтты мақұлдау не мақұлдамау опциясы бар бет жабық.</translation> +<translation id="4996042648402406470">Алу</translation> <translation id="4996095658297597226">Ұсынылған құпия сөзді қолдану қажет пе?</translation> <translation id="5001388021414335527">Сайтқа осында жазылу</translation> <translation id="5004416275253351869">Google-дағы әрекеттерді басқару элементтері</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">Алдыңғы қойындыға өту</translation> <translation id="5210365745912300556">Қойындыны жабу</translation> <translation id="5215957675041756913">Деректеріңіз бен аккаунтыңызды басқарыңыз</translation> +<translation id="5218324087477576825">Карта нөмірін көрсету қажет</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> және т.б. <ph name="SEPARATOR" /> Chrome бұл рұқсаттарды өшірді, себебі сіз соңғы уақытта бұл сайтқа кірмегенсіз.</translation> <translation id="5222676887888702881">Шығу</translation> <translation id="5226378907213531272">Көлікті пайдаланған сайын экран құлпын ашу қажет болады.</translation> <translation id="5227554086496586518">Іздеу нәтижелерін көру үшін түртіңіз.</translation> +<translation id="5229736206150093143">Соңғы нәтижелер</translation> <translation id="5233638681132016545">Жаңа қойынды</translation> <translation id="5235196193381275927">Кіру кезінде бірдеңе дұрыс болмады.</translation> <translation id="5246093389635966745">Құралдар тақтасын өзгерту таңбашасы</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">Қызығушылықтарыңыз негізінде контент алу үшін аккаунтқа кіріңіз.</translation> <translation id="6764137532716892442">Жаңа әрекеттері бар ортақ <ph name="GROUP_TITLE" /> қойындылар тобы</translation> <translation id="6767294960381293877">Қойынды жіберілетін құрылғылар тізімі жарты экранға ашылған.</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> инкогнито қойындысы және тағы <ph name="TAB_COUNT_ONE" /> қойынды жабылады.}other{<ph name="INCOGNITO_TAB_COUNT" /> инкогнито қойындысы және тағы <ph name="TAB_COUNT_MANY" /> қойынды жабылады.}}</translation> <translation id="6785476624617658922">Chrome және ChromeOS Қосымша қызмет көрсету шарттары</translation> <translation id="6786747875388722282">Кеңейтімдер</translation> <translation id="6795633245022906657">Жаңа қойындыны жылдам ашуға арналған. Бұл таңбашаны өзгерту үшін "Параметрлер" бөліміне өтіңіз.</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">Сақталған құпия сөздерді кез келген құрылғыда пайдалана аласыз. Олар <ph name="ACCOUNT" /> аккаунтына арналған Google Құпия сөз менеджеріне сақталады.</translation> <translation id="7968014550143838305">Оқу тізіміне енгізілді.</translation> <translation id="7968982339740310781">Мәліметтерді көру</translation> +<translation id="7969391000881506217">Жарамдылық мерзімі*</translation> <translation id="7971136598759319605">1 күн бұрын қосылған.</translation> <translation id="7975379999046275268">Бетті алдын ала көру <ph name="BEGIN_NEW" />Жаңа<ph name="END_NEW" /></translation> <translation id="7977451675950311423">Деректер қолды болған кезде ұрланған құпия сөзді пайдалансаңыз, сізге ескертеді.</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446">Мүшені (<ph name="MEMBER_FULL_NAME" />) шығарасыз ба?</translation> <translation id="8570677896027847510">Файлды қауіпсіз жүктеп алу мүмкін емес</translation> <translation id="8571213806525832805">Соңғы 4 апта</translation> +<translation id="8580435650274205305">Жарамдылық мерзімін көрсету қажет</translation> <translation id="8582529315803410153">Басқа құрылғылардағы қойындыларды осы жерден табасыз</translation> <translation id="8585103689515290060">Автотолтыру қызметтері</translation> <translation id="859046281437143747">"Қосымша опциялар" түймесін басып, бағаларды бақылаңыз.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb index 1cb1dfd0..26a5d503 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -1412,6 +1412,7 @@ <translation id="7224097611345298931">ពាក្យសម្ងាត់ទាំងអស់ដែលបានរក្សាទុកតែនៅលើឧបករណ៍នេះសម្រាប់ Chrome និង <ph name="CHROME_CHANNEL" /> ត្រូវបានដាក់ចូលគ្នា។ អ្នកអាចបំពេញដោយស្វ័យប្រវត្តិនូវពាក្យសម្ងាត់ដែលបានរក្សាទុកទាំងអស់របស់អ្នកនៅលើកម្មវិធីទាំងពីរ។</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{ការទាញយក 1 មិនទាន់សម្រេចទេ}other{ការទាញយក # មិនទាន់សម្រេចទេ}}</translation> <translation id="7230064152164845085">ប្ដូរទៅមុខងារឯកជន</translation> +<translation id="7230836263524391273">លាក់មុខងារអាន</translation> <translation id="7237724030342645845">កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់បានឈប់ដំណើរការហើយ</translation> <translation id="72415438529550637">ការណែនាំពាក្យសម្ងាត់ត្រូវបានបិទ។</translation> <translation id="7248671827512403053">កម្មវិធី</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index f500d41..f538c85 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -894,6 +894,7 @@ <translation id="506254248375231072">Өтмөктөр жок</translation> <translation id="5062960805900435602">Сырсөздөрдү бириктирүү боюнча жаңыртуу жабылды</translation> <translation id="5075939510584558547">Шифрлебей сактоо</translation> +<translation id="5082172173036123513">Жигерсиз терезелер 6 ай жигерсиз болгондон кийин биротоло өчүрүлөт.</translation> <translation id="5085038751173179818">Кыстармаларды жана башкаларды бардык түзмөктөрүңүздө колдонуу үчүн ушул сайтка жана Chrome'го кириңиз</translation> <translation id="5091199029769593641">Жакында жаңы өтмөктү ачкан сайын, <ph name="SITE_NAME" /> окуяларын көрүп турасыз. Сиз жазылган сайттар Google аккаунтуңузда сакталат. Аларды Сунуштардын параметрлеринен башкара аласыз.</translation> <translation id="509429900233858213">Ката кетти.</translation> @@ -1552,6 +1553,7 @@ <translation id="7844171778363018843">Шайкештириле турган маалымат тандалган жок</translation> <translation id="7846161022626028328">Ката кетти. Кайра аракет кылыңыз.</translation> <translation id="7846296061357476882">Google кызматтары</translation> +<translation id="784652447248278262">Учурдагы терезе</translation> <translation id="784934925303690534">Убакыт аралыгы</translation> <translation id="7851858861565204677">Башка түзмөктөр</translation> <translation id="7853202427316060426">Аракеттер</translation> @@ -1631,6 +1633,7 @@ <translation id="813082847718468539">Сайттын маалыматын карап көрүү</translation> <translation id="8135406045838672858">Жүктөлүп алынган PDF файлдары <ph name="APP_NAME" /> колдонмосу менен автоматтык түрдө ачылат</translation> <translation id="8137562778192957619">Бул сырсөздү эстеп калуунун кереги жок. Ал Google'дун Сырсөздөрдү башкаргыч кызматында сакталат.</translation> +<translation id="8146563639948412265"><ph name="MAX_WINDOW_COUNT" /> терезеге чейин ачсаңыз болот. Терезени калыбына келтирүү үчүн <ph name="WINDOW_COUNT" /> жигердүү же жигердүү эмес терезени жабыңыз.</translation> <translation id="8152331954420209374">Lens'ке өтүү</translation> <translation id="8163820386638255770">Google аккаунтуңузга сырсөздөрдү сактоо жана колдонуу үчүн өзүңүздү ырастаңыз</translation> <translation id="8186512483418048923"><ph name="FILES" /> файл калды</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb index 4075b8b..5bde149 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{Vienas slaptažodis ir kiti elementai išsaugoti tik šiame įrenginyje. Jei norite juos naudoti kituose įrenginiuose, išsaugokite „Google“ paskyroje <ph name="ACCOUNT_EMAIL" />.}one{# slaptažodis ir kiti elementai išsaugoti tik šiame įrenginyje. Jei norite juos naudoti kituose įrenginiuose, išsaugokite „Google“ paskyroje <ph name="ACCOUNT_EMAIL" />.}few{# slaptažodžiai ir kiti elementai išsaugoti tik šiame įrenginyje. Jei norite juos naudoti kituose įrenginiuose, išsaugokite „Google“ paskyroje <ph name="ACCOUNT_EMAIL" />.}many{# slaptažodžio ir kiti elementai išsaugoti tik šiame įrenginyje. Jei norite juos naudoti kituose įrenginiuose, išsaugokite „Google“ paskyroje <ph name="ACCOUNT_EMAIL" />.}other{# slaptažodžių ir kiti elementai išsaugoti tik šiame įrenginyje. Jei norite juos naudoti kituose įrenginiuose, išsaugokite „Google“ paskyroje <ph name="ACCOUNT_EMAIL" />.}}</translation> <translation id="3187472288455401631">Skelbimų vertinimas</translation> <translation id="3189635831478931757">Skirtukų grupė „<ph name="GROUP_TITLE" />“</translation> +<translation id="3200536777393523575">Uždaryti dabartinį langą?</translation> <translation id="3207960819495026254">Pažymėta</translation> <translation id="3208584281581115441">Tikrinti dabar</translation> <translation id="3211426585530211793">Ištrinta „<ph name="ITEM_TITLE" />“</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">Uždaryti dialogo langą</translation> <translation id="4352287748243729941">Naudoti „<ph name="PROVIDER" />“ slaptažodį?</translation> <translation id="4355272626458588338">Galite grįžti į jums svarbų puslapį pridėję žymę</translation> +<translation id="4356503491090073318">Kortelės numeris*</translation> <translation id="4357206670025518404">+ <ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">Saugumo apžvalga</translation> <translation id="4378154925671717803">Telefonas</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">Kaina stebima. Gaukite įspėjimus, jei kaina bus sumažinta bet kurioje svetainėje.</translation> <translation id="4425173294238317796">Prieigos rakto patvirtinimo lapas</translation> <translation id="442518031075347249">Nebegalėsite naudoti virtualiosios kortelės su „Google Pay“. <ph name="BEGIN_LINK1" />Sužinokite daugiau apie virtualiąsias korteles<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{„<ph name="TAB_TITLE" />“ ir dar <ph name="TAB_COUNT_ONE" /> skirtukas bus uždaryti}one{„<ph name="TAB_TITLE" />“ ir dar <ph name="TAB_COUNT_MANY" /> skirtukas bus uždaryti}few{„<ph name="TAB_TITLE" />“ ir dar <ph name="TAB_COUNT_MANY" /> skirtukai bus uždaryti}many{„<ph name="TAB_TITLE" />“ ir dar <ph name="TAB_COUNT_MANY" /> skirtuko bus uždaryti}other{„<ph name="TAB_TITLE" />“ ir dar <ph name="TAB_COUNT_MANY" /> skirtukų bus uždaryti}}</translation> <translation id="4426508677408162512">Visos žymės</translation> <translation id="4430277756566635951">Šiuo metu pasirinkta: <ph name="EMAIL" />. Pasirinkite paskyrą.</translation> <translation id="4452411734226507615">Uždaryti skirtuką „<ph name="TAB_TITLE" />“</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">Nepavyko rasti šio puslapio. Patikrinkite rašybą arba pabandykite naudoti žiniatinklio paiešką.</translation> <translation id="4988526792673242964">Psl.</translation> <translation id="4991110219272367918">Uždaryta svetainės patvirtinimo arba nepatvirtinimo parinktis</translation> +<translation id="4996042648402406470">Gauti</translation> <translation id="4996095658297597226">Naudoti siūlomą slaptažodį?</translation> <translation id="5001388021414335527">Stebėkite šią svetainę čia</translation> <translation id="5004416275253351869">„Google“ veiklos valdikliai</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">Pereiti prie ankstesnio skirtuko</translation> <translation id="5210365745912300556">Uždaryti skirtuką</translation> <translation id="5215957675041756913">Duomenų ir paskyros valdymas</translation> +<translation id="5218324087477576825">Reikia nurodyti kortelės numerį</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ir kt. <ph name="SEPARATOR" /> „Chrome“ pašalino šiuos leidimus, nes pastaruoju metu nesilankėte</translation> <translation id="5222676887888702881">Atsijungti</translation> <translation id="5226378907213531272">Ekranas atrakinamas kiekvieną kartą, kai naudojate automobilį</translation> <translation id="5227554086496586518">Palieskite, kad peržiūrėtumėte paieškos rezultatus</translation> +<translation id="5229736206150093143">Naujausi rezultatai</translation> <translation id="5233638681132016545">Naujas skirtukas</translation> <translation id="5235196193381275927">Prisijungiant įvyko klaida</translation> <translation id="5246093389635966745">Redaguoti spartųjį įrankių juostos klavišą</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">Prisijunkite, kad gautumėte pagal jūsų pomėgius atrinkto turinio.</translation> <translation id="6764137532716892442">Bendrinama skirtukų grupė „<ph name="GROUP_TITLE" />“ su nauja veikla</translation> <translation id="6767294960381293877">Įrenginių, su kuriais reikia bendrinti skirtuką, sąrašas atidarytas (pusė aukščio).</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> inkognito ir dar <ph name="TAB_COUNT_ONE" /> skirtukas bus uždaryti}one{<ph name="INCOGNITO_TAB_COUNT" /> inkognito ir dar <ph name="TAB_COUNT_MANY" /> skirtukas bus uždaryti}few{<ph name="INCOGNITO_TAB_COUNT" /> inkognito ir dar <ph name="TAB_COUNT_MANY" /> skirtukai bus uždaryti}many{<ph name="INCOGNITO_TAB_COUNT" /> inkognito ir dar <ph name="TAB_COUNT_MANY" /> skirtuko bus uždaryti}other{<ph name="INCOGNITO_TAB_COUNT" /> inkognito ir dar <ph name="TAB_COUNT_MANY" /> skirtukų bus uždaryti}}</translation> <translation id="6785476624617658922">„Chrome“ ir „Chrome“ OS papildomos paslaugų teikimo sąlygos</translation> <translation id="6786747875388722282">Plėtiniai</translation> <translation id="6795633245022906657">Sparčiai atidarykite naują skirtuką. Jei norite redaguoti šį spartųjį klavišą, eikite į skiltį „Nustatymai“.</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">Išsaugotus slaptažodžius galite naudoti bet kuriame įrenginyje. Jie išsaugomi „Google“ slaptažodžių tvarkyklėje kaip priskirti el. pašto adresui <ph name="ACCOUNT" />.</translation> <translation id="7968014550143838305">Pridėta prie skaitymo sąrašo</translation> <translation id="7968982339740310781">Žiūrėti išsamią informaciją</translation> +<translation id="7969391000881506217">Galiojimo laiko pabaigos data*</translation> <translation id="7971136598759319605">Aktyvus prieš 1 d.</translation> <translation id="7975379999046275268">Peržiūrėti puslapį <ph name="BEGIN_NEW" />Naujas<ph name="END_NEW" /></translation> <translation id="7977451675950311423">Įspėjama, jei naudojate slaptažodį, kuris pažeistas dėl duomenų saugos pažeidimo.</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446">Pašalinti <ph name="MEMBER_FULL_NAME" />?</translation> <translation id="8570677896027847510">Negalima saugiai atsisiųsti failo</translation> <translation id="8571213806525832805">Pastarosios 4 savaitės</translation> +<translation id="8580435650274205305">Reikia nurodyti galiojimo laiko pabaigos datą</translation> <translation id="8582529315803410153">Čia bus rodomi skirtukai iš kitų įrenginių</translation> <translation id="8585103689515290060">Automatinio pildymo paslaugos</translation> <translation id="859046281437143747">Stebėkite kainas naudodami mygtuką „Daugiau parinkčių“</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb index 31b1a04..88cf59b3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{एउटा पासवर्ड र अन्य सामग्रीहरू यो डिभाइसमा मात्र सेभ गरिएका छन्। ती पासवर्ड र सामग्री आफ्ना अन्य डिभाइसहरूमा प्रयोग गर्न तिनलाई आफ्नो Google खाता (<ph name="ACCOUNT_EMAIL" />) मा सेभ गर्नुहोस्।}other{# वटा पासवर्ड र अन्य सामग्रीहरू यो डिभाइसमा मात्र सेभ गरिएका छन्। ती पासवर्ड र सामग्री आफ्ना अन्य डिभाइसहरूमा प्रयोग गर्न तिनलाई आफ्नो Google खाता (<ph name="ACCOUNT_EMAIL" />) मा सेभ गर्नुहोस्।}}</translation> <translation id="3187472288455401631">विज्ञापनको पर्फर्मेन्स मापन</translation> <translation id="3189635831478931757"><ph name="GROUP_TITLE" /> नामक ट्याब समूह</translation> +<translation id="3200536777393523575">आफ्नो हालको विन्डो बन्द गर्ने हो?</translation> <translation id="3207960819495026254">बुकमार्क लगाइयो</translation> <translation id="3208584281581115441">अहिले नै जाँच्नुहोस्</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> मेटाइयो</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">सम्बाद बन्द गर्नुहोस्</translation> <translation id="4352287748243729941">तपाईंको <ph name="PROVIDER" /> को पासवर्ड प्रयोग गर्ने हो?</translation> <translation id="4355272626458588338">कुनै महत्त्वपूर्ण पेजमा सजिलैसँग फर्कन उक्त पेज बुकमार्क गर्नुहोस्</translation> +<translation id="4356503491090073318">कार्ड नम्बर*</translation> <translation id="4357206670025518404">थप <ph name="COUNT_NUMBER" /> वटा</translation> <translation id="4359809482106103048">सुरक्षाको छोटो विवरण</translation> <translation id="4378154925671717803">फोन</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">यो उत्पादनको मूल्य ट्र्याक गरिँदै छ। कुनै साइटमा मूल्य घटेका खण्डमा अलर्ट प्राप्त गर्नुहोस्।</translation> <translation id="4425173294238317796">पासकी पुष्टि गर्ने पाना</translation> <translation id="442518031075347249">तपाईं अबदेखि Google Pay मा आफ्नो भर्चुअल कार्ड प्रयोग गर्न सक्नु हुने छैन। <ph name="BEGIN_LINK1" />भर्चुअल कार्डका बारेमा थप जान्नुहोस्<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> र अर्को <ph name="TAB_COUNT_ONE" /> ट्याब बन्द गरिने छन्}other{<ph name="TAB_TITLE" /> र अरू <ph name="TAB_COUNT_MANY" /> वटा ट्याब बन्द गरिने छन्}}</translation> <translation id="4426508677408162512">सबै पुस्तक चिन्हहरू</translation> <translation id="4430277756566635951">अहिले <ph name="EMAIL" /> चयन गरिएको छ। एउटा खाता चयन गर्नुहोस्।</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ट्याब बन्द गर्नुहोस्</translation> @@ -875,6 +878,7 @@ <translation id="4987271110129728827">उक्त पेज भेट्टाउन सकिएन। आफ्नो हिज्जे जाँच्नुहोस् वा वेबमा खोजी हेर्नुहोस्।</translation> <translation id="4988526792673242964">पृष्ठहरू</translation> <translation id="4991110219272367918">कुनै वेबसाइट अनुमोदन गर्ने वा नगर्ने विकल्प बन्द गरिएको छ</translation> +<translation id="4996042648402406470">प्राप्त गर्नुहोस्</translation> <translation id="4996095658297597226">सिफारिस गरिएको पासवर्ड प्रयोग गर्ने हो?</translation> <translation id="5001388021414335527">यहाँ क्लिक गरी यो साइट फलो गर्नुहोस्</translation> <translation id="5004416275253351869">Google का क्रियाकलापसम्बन्धी नियन्त्रणहरू</translation> @@ -926,10 +930,12 @@ <translation id="5210286577605176222">अघिल्लो ट्याबमा जानुहोस्</translation> <translation id="5210365745912300556">ट्याब बन्द गर्नुहोस्</translation> <translation id="5215957675041756913">आफ्नो जानकारी र खाता नियन्त्रण गर्नुहोस्</translation> +<translation id="5218324087477576825">कार्ड नम्बर, अनिवार्य</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> र अन्य <ph name="SEPARATOR" /> तपाईंले हालसालै यो साइट नखोल्नुभएकाले Chrome ले यसलाई दिइएका यी अनुमति रद्द गरेको छ</translation> <translation id="5222676887888702881">साइन आउट गर्नुहोस्</translation> <translation id="5226378907213531272">तपाईंले कार प्रयोग गर्दैपिच्छे आफ्नो स्क्रिन अनलक गर्नु पर्ने हुन्छ</translation> <translation id="5227554086496586518">खोज परिणामहरू हेर्न ट्याप गर्नुहोस्</translation> +<translation id="5229736206150093143">हालसालैका परिणामहरू</translation> <translation id="5233638681132016545">नयाँ ट्याब</translation> <translation id="5235196193381275927">साइन इन गर्ने क्रममा कुनै समस्या आयो</translation> <translation id="5246093389635966745">टुलबारको सर्टकट सम्पादन गर्नुहोस्</translation> @@ -1285,6 +1291,7 @@ <translation id="676305334223455055">आफ्ना रुचिहरूका आधारमा सामग्री प्राप्त गर्न साइन इन गर्नुहोस्</translation> <translation id="6764137532716892442">नयाँ गतिविधि भएको <ph name="GROUP_TITLE" /> नामक साझा ट्याब समूह</translation> <translation id="6767294960381293877">ट्याब आदान प्रदान गरिनु पर्ने डिभाइसहरूको सूची आधा उचाइमा खोलिएको छ।</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> वटा इन्कोग्निटो ट्याब र अर्को <ph name="TAB_COUNT_ONE" /> ट्याब बन्द गरिने छन्}other{<ph name="INCOGNITO_TAB_COUNT" /> वटा इन्कोग्निटो ट्याब र अरू <ph name="TAB_COUNT_MANY" /> वटा ट्याब बन्द गरिने छन्}}</translation> <translation id="6785476624617658922">Chrome र ChromeOS का सेवाका अतिरिक्त सर्तहरू</translation> <translation id="6786747875388722282">विस्तारहरू</translation> <translation id="6795633245022906657">तुरुन्तै नयाँ ट्याब खोल्नुहोस्। यो सर्टकट परिवर्तन गर्न सेटिङमा जानुहोस्।</translation> @@ -1581,6 +1588,7 @@ <translation id="7965838025086216108">तपाईं सेभ गरिएका पासवर्डहरू जुनसुकै डिभाइसमा प्रयोग गर्न सक्नुहुन्छ। ती पासवर्डहरू <ph name="ACCOUNT" /> को Google पासवर्ड म्यानेजरमा सेभ गरिन्छन्।</translation> <translation id="7968014550143838305">अध्ययन सूचीमा हालियो</translation> <translation id="7968982339740310781">विवरणहरू हेर्नुहोस्</translation> +<translation id="7969391000881506217">म्याद सकिने मिति*</translation> <translation id="7971136598759319605">१ दिनअघि सक्रिय</translation> <translation id="7975379999046275268"><ph name="BEGIN_NEW" />नयाँ<ph name="END_NEW" /> पृष्ठको पूर्वावलोकन गर्नु…</translation> <translation id="7977451675950311423">तपाईंले डेटा चोरीको घटनामा अरूले देखेका पासवर्ड प्रयोग गर्नुभयो भने यसले तपाईंलाई चेतावनी दिन्छ।</translation> @@ -1740,6 +1748,7 @@ <translation id="8565021320663436446"><ph name="MEMBER_FULL_NAME" /> हटाउने हो?</translation> <translation id="8570677896027847510">यो फाइल सुरक्षित रूपमा डाउनलोड गर्न सकिँदैन</translation> <translation id="8571213806525832805">पछिल्ला ४ हप्ता</translation> +<translation id="8580435650274205305">म्याद सकिने मिति, अनिवार्य</translation> <translation id="8582529315803410153">तपाईंका अन्य डिभाइसका ट्याबहरू यहाँ देखिने छन्</translation> <translation id="8585103689515290060">अटोफिल सेवाहरू</translation> <translation id="859046281437143747">"थप विकल्पहरू" बटनमा क्लिक गरी मूल्य ट्रयाक गर्नुहोस्</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb index 350beae..03d267c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 wachtwoord en andere items worden alleen op dit apparaat opgeslagen. Als je ze op je andere apparaten wilt gebruiken, sla je ze op in je Google-account, <ph name="ACCOUNT_EMAIL" />.}other{# wachtwoorden en andere items worden alleen op dit apparaat opgeslagen. Als je ze wilt gebruiken op je andere apparaten, sla je ze op in je Google-account, <ph name="ACCOUNT_EMAIL" />.}}</translation> <translation id="3187472288455401631">Advertentiemeting</translation> <translation id="3189635831478931757">Tabbladgroep <ph name="GROUP_TITLE" /></translation> +<translation id="3200536777393523575">Je huidige venster sluiten?</translation> <translation id="3207960819495026254">Toegevoegd aan 'Bookmarks'</translation> <translation id="3208584281581115441">Nu checken</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> is verwijderd</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">Dialoogvenster sluiten</translation> <translation id="4352287748243729941">Je wachtwoord van <ph name="PROVIDER" /> gebruiken?</translation> <translation id="4355272626458588338">Je kunt teruggaan naar een pagina die belangrijk voor je is door een bookmark toe te voegen</translation> +<translation id="4356503491090073318">Kaartnummer*</translation> <translation id="4357206670025518404">+<ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">Veiligheid in één oogopslag</translation> <translation id="4378154925671717803">Telefoon</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">Prijs wordt gevolgd. Krijg meldingen bij een prijsdaling op een site.</translation> <translation id="4425173294238317796">Bevestigingsblad voor toegangssleutel</translation> <translation id="442518031075347249">Je kunt je virtuele kaart niet meer gebruiken met Google Pay. <ph name="BEGIN_LINK1" />Meer informatie over virtuele kaarten<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> en <ph name="TAB_COUNT_ONE" /> ander tabblad worden gesloten}other{<ph name="TAB_TITLE" /> en <ph name="TAB_COUNT_MANY" /> andere tabbladen worden gesloten}}</translation> <translation id="4426508677408162512">Alle bookmarks</translation> <translation id="4430277756566635951"><ph name="EMAIL" /> is op dit moment geselecteerd. Kies een account.</translation> <translation id="4452411734226507615">Tabblad <ph name="TAB_TITLE" /> sluiten</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">Kan die pagina niet vinden. Check je spelling of voer een online zoekopdracht uit.</translation> <translation id="4988526792673242964">Pagina's</translation> <translation id="4991110219272367918">Optie om een gesloten website wel of niet goed te keuren</translation> +<translation id="4996042648402406470">Ophalen</translation> <translation id="4996095658297597226">Voorgesteld wachtwoord gebruiken?</translation> <translation id="5001388021414335527">Volg deze site hier</translation> <translation id="5004416275253351869">Google-activiteitsopties</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">Naar het vorige tabblad gaan</translation> <translation id="5210365745912300556">Tabblad sluiten</translation> <translation id="5215957675041756913">Je gegevens en account beheren</translation> +<translation id="5218324087477576825">Kaartnummer, vereist</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> en meer <ph name="SEPARATOR" /> Chrome heeft deze rechten verwijderd omdat je deze site niet recent hebt bezocht</translation> <translation id="5222676887888702881">Uitloggen</translation> <translation id="5226378907213531272">Je ontgrendelt je scherm elke keer dat je de auto gebruikt</translation> <translation id="5227554086496586518">Tik om zoekresultaten te bekijken</translation> +<translation id="5229736206150093143">Meest recente resultaten</translation> <translation id="5233638681132016545">Nieuw tabblad</translation> <translation id="5235196193381275927">Er is iets misgegaan bij het inloggen</translation> <translation id="5246093389635966745">Snelkoppeling voor werkbalk bewerken</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">Log in om content op basis van je interesses te krijgen</translation> <translation id="6764137532716892442">Gedeelde tabbladgroep <ph name="GROUP_TITLE" /> met nieuwe activiteit</translation> <translation id="6767294960381293877">De lijst met apparaten om een tabblad mee te delen, is op halve hoogte geopend.</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> incognitotabbladen en <ph name="TAB_COUNT_ONE" /> ander tabblad worden gesloten}other{<ph name="INCOGNITO_TAB_COUNT" /> incognitotabbladen en <ph name="TAB_COUNT_MANY" /> andere tabbladen worden gesloten}}</translation> <translation id="6785476624617658922">Aanvullende servicevoorwaarden van Google Chrome en Chrome OS</translation> <translation id="6786747875388722282">Extensies</translation> <translation id="6795633245022906657">Open snel een nieuw tabblad. Je kunt deze snelkoppeling bewerken via Instellingen.</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">Je kunt opgeslagen wachtwoorden op elk apparaat gebruiken. Ze worden opgeslagen in Google Wachtwoordmanager voor <ph name="ACCOUNT" />.</translation> <translation id="7968014550143838305">Toegevoegd aan leeslijst</translation> <translation id="7968982339740310781">Details bekijken</translation> +<translation id="7969391000881506217">Vervaldatum*</translation> <translation id="7971136598759319605">1 dag geleden actief</translation> <translation id="7975379999046275268">Pagina bekijken <ph name="BEGIN_NEW" />Nieuw<ph name="END_NEW" /></translation> <translation id="7977451675950311423">Waarschuwt je als je een wachtwoord gebruikt dat is gevonden bij een gegevenslek.</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446"><ph name="MEMBER_FULL_NAME" /> verwijderen?</translation> <translation id="8570677896027847510">Bestand kan niet beveiligd worden gedownload</translation> <translation id="8571213806525832805">Afgelopen 4 weken</translation> +<translation id="8580435650274205305">Vervaldatum, vereist</translation> <translation id="8582529315803410153">Hier vind je je tabbladen van andere apparaten</translation> <translation id="8585103689515290060">Services voor automatisch invullen</translation> <translation id="859046281437143747">Volg de prijs via de knop Meer opties</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb index c245c67..1f4f5d1d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -1412,6 +1412,7 @@ <translation id="7224097611345298931">Todas as palavras-passe guardadas apenas neste dispositivo para o Chrome e <ph name="CHROME_CHANNEL" /> foram unidas. Pode preencher automaticamente todas as palavras-passe guardadas em ambas as apps.</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 transferência pendente}other{# transferências pendentes}}</translation> <translation id="7230064152164845085">Mudar para Navegação anónima</translation> +<translation id="7230836263524391273">Ocultar modo de leitura</translation> <translation id="7237724030342645845">O Gestor de Palavras-passe da Google deixou de funcionar</translation> <translation id="72415438529550637">A sugestão de palavra-passe está fechada.</translation> <translation id="7248671827512403053">Aplicação</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index 4876ecad6..7a39e2d6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 пароль и другие данные доступны только на этом устройстве. Сохраните их в своем аккаунте Google (<ph name="ACCOUNT_EMAIL" />), чтобы использовать на других устройствах.}one{# пароль и другие данные доступны только на этом устройстве. Сохраните их в своем аккаунте Google (<ph name="ACCOUNT_EMAIL" />), чтобы использовать на других устройствах.}few{# пароля и другие данные доступны только на этом устройстве. Сохраните их в своем аккаунте Google (<ph name="ACCOUNT_EMAIL" />), чтобы использовать на других устройствах.}many{# паролей и другие данные доступны только на этом устройстве. Сохраните их в своем аккаунте Google (<ph name="ACCOUNT_EMAIL" />), чтобы использовать на других устройствах.}other{# пароля и другие данные доступны только на этом устройстве. Сохраните их в своем аккаунте Google (<ph name="ACCOUNT_EMAIL" />), чтобы использовать на других устройствах.}}</translation> <translation id="3187472288455401631">Оценка эффективности рекламы</translation> <translation id="3189635831478931757">Группа вкладок "<ph name="GROUP_TITLE" />"</translation> +<translation id="3200536777393523575">Закрыть текущее окно?</translation> <translation id="3207960819495026254">Добавлено в закладки.</translation> <translation id="3208584281581115441">Проверить сейчас</translation> <translation id="3211426585530211793">Удалено: <ph name="ITEM_TITLE" /></translation> @@ -714,7 +715,7 @@ <translation id="4298388696830689168">Связанные сайты</translation> <translation id="4300632303535881174">Перейти на предыдущую страницу</translation> <translation id="4303044213806199882">chrome_screenshot_<ph name="CURRENT_TIMESTAMP_MS" /></translation> -<translation id="4306489587293957491">Ввод</translation> +<translation id="4306489587293957491">Ввести</translation> <translation id="4307992518367153382">Основные</translation> <translation id="4311652497846705514">Открыть PDF-файл?</translation> <translation id="4320177379694898372">Нет подключения к Интернету</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">Закрыть</translation> <translation id="4352287748243729941">Использовать пароль (<ph name="PROVIDER" />)?</translation> <translation id="4355272626458588338">Добавьте важные для вас страницы в закладки, чтобы легко возвращаться к ним.</translation> +<translation id="4356503491090073318">Номер карты*</translation> <translation id="4357206670025518404">+<ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">Общие сведения о безопасности</translation> <translation id="4378154925671717803">Телефон</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">Вы отслеживаете цену на этот товар. Если на одном из сайтов она снизится, вы получите уведомление.</translation> <translation id="4425173294238317796">Экран с просьбой подтвердить создание ключа доступа</translation> <translation id="442518031075347249">Вы больше не сможете использовать виртуальную карту для оплаты через Google Pay. Подробнее <ph name="BEGIN_LINK1" />о виртуальных картах<ph name="END_LINK1" />…</translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{Вкладка "<ph name="TAB_TITLE" />" и ещё <ph name="TAB_COUNT_ONE" /> вкладка будут закрыты.}one{Вкладка "<ph name="TAB_TITLE" />" и ещё <ph name="TAB_COUNT_MANY" /> вкладка будут закрыты.}few{Вкладка "<ph name="TAB_TITLE" />" и ещё <ph name="TAB_COUNT_MANY" /> вкладки будут закрыты.}many{Вкладка "<ph name="TAB_TITLE" />" и ещё <ph name="TAB_COUNT_MANY" /> вкладок будут закрыты.}other{Вкладка "<ph name="TAB_TITLE" />" и ещё <ph name="TAB_COUNT_MANY" /> вкладки будут закрыты.}}</translation> <translation id="4426508677408162512">Все закладки</translation> <translation id="4430277756566635951">Выбор аккаунта. Сейчас выбран <ph name="EMAIL" />.</translation> <translation id="4452411734226507615">Закрыть вкладку "<ph name="TAB_TITLE" />"</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">Не удается найти страницу. Проверьте, правильно ли введен запрос, или выполните поиск в интернете.</translation> <translation id="4988526792673242964">Страницы</translation> <translation id="4991110219272367918">Нижний экран, с помощью которого можно одобрить или заблокировать сайт, закрыт</translation> +<translation id="4996042648402406470">Получить</translation> <translation id="4996095658297597226">Использовать предложенный пароль?</translation> <translation id="5001388021414335527">Подписаться на этот сайт</translation> <translation id="5004416275253351869">Отслеживание действий в Google</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">Перейти к предыдущей вкладке</translation> <translation id="5210365745912300556">Закрыть вкладку</translation> <translation id="5215957675041756913">Управление данными и аккаунтом</translation> +<translation id="5218324087477576825">Номер карты (обязательно)</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> и другие <ph name="SEPARATOR" /> Chrome отозвал эти разрешения у сайта, так как вы давно его не посещали</translation> <translation id="5222676887888702881">Выйти</translation> <translation id="5226378907213531272">Вам нужно будет разблокировать экран при каждом использовании автомобиля.</translation> <translation id="5227554086496586518">Нажмите, чтобы увидеть результаты поиска</translation> +<translation id="5229736206150093143">Последние результаты</translation> <translation id="5233638681132016545">Новая вкладка</translation> <translation id="5235196193381275927">Не удалось войти в систему.</translation> <translation id="5246093389635966745">Изменить кнопку на панели инструментов</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">Войдите в аккаунт, чтобы получать контент на основе своих интересов.</translation> <translation id="6764137532716892442">Общая группа вкладок "<ph name="GROUP_TITLE" />" с новыми действиями</translation> <translation id="6767294960381293877">Список устройств для отправки вкладки развернут на половину экрана.</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> вкладка инкогнито и ещё <ph name="TAB_COUNT_ONE" /> вкладка будут закрыты.}one{<ph name="INCOGNITO_TAB_COUNT" /> вкладка инкогнито и ещё <ph name="TAB_COUNT_MANY" /> вкладка будут закрыты.}few{<ph name="INCOGNITO_TAB_COUNT" /> вкладка инкогнито и ещё <ph name="TAB_COUNT_MANY" /> вкладки будут закрыты.}many{<ph name="INCOGNITO_TAB_COUNT" /> вкладка инкогнито и ещё <ph name="TAB_COUNT_MANY" /> вкладок будут закрыты.}other{<ph name="INCOGNITO_TAB_COUNT" /> вкладка инкогнито и ещё <ph name="TAB_COUNT_MANY" /> вкладки будут закрыты.}}</translation> <translation id="6785476624617658922">Дополнительные условия использования Chrome и Chrome OS</translation> <translation id="6786747875388722282">Расширения</translation> <translation id="6795633245022906657">Открыть новую вкладку. Чтобы изменить функцию кнопки, перейдите в настройки.</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">Вы можете использовать сохраненные пароли на любых устройствах. Они сохраняются в Google Менеджере паролей для аккаунта <ph name="ACCOUNT" />.</translation> <translation id="7968014550143838305">Добавлено в список для чтения.</translation> <translation id="7968982339740310781">Просмотреть сведения</translation> +<translation id="7969391000881506217">Срок действия*</translation> <translation id="7971136598759319605">Последние действия: 1 день назад</translation> <translation id="7975379999046275268">Просмотреть страницу <ph name="BEGIN_NEW" />Новинка<ph name="END_NEW" /></translation> <translation id="7977451675950311423">Предупреждает, если вы используете пароль, скомпрометированный в результате утечки данных.</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446">Удалить пользователя <ph name="MEMBER_FULL_NAME" />?</translation> <translation id="8570677896027847510">Невозможно безопасно скачать файл</translation> <translation id="8571213806525832805">Последние 4 недели</translation> +<translation id="8580435650274205305">Срок действия (обязательно)</translation> <translation id="8582529315803410153">Здесь вы найдете свои вкладки с других устройств</translation> <translation id="8585103689515290060">Сервисы автозаполнения</translation> <translation id="859046281437143747">Нажмите кнопку "Ещё" и выберите пункт "Отслеживание цен"</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb index 90e905e..63049d03 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{ระบบบันทึกรหัสผ่าน 1 รายการและรายการอื่นๆ ไว้ในอุปกรณ์นี้เท่านั้น หากต้องการใช้งานในอุปกรณ์อื่น ให้บันทึกไว้ในบัญชี Google <ph name="ACCOUNT_EMAIL" />}other{ระบบบันทึกรหัสผ่าน # รายการและรายการอื่นๆ ไว้ในอุปกรณ์นี้เท่านั้น หากต้องการใช้งานในอุปกรณ์อื่น ให้บันทึกไว้ในบัญชี Google <ph name="ACCOUNT_EMAIL" />}}</translation> <translation id="3187472288455401631">การวัดผลโฆษณา</translation> <translation id="3189635831478931757">กลุ่มแท็บ <ph name="GROUP_TITLE" /></translation> +<translation id="3200536777393523575">ปิดหน้าต่างปัจจุบันใช่ไหม</translation> <translation id="3207960819495026254">บุ๊กมาร์กแล้ว</translation> <translation id="3208584281581115441">ตรวจสอบเลย</translation> <translation id="3211426585530211793">ลบ <ph name="ITEM_TITLE" /> แล้ว</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">ปิดข้อความโต้ตอบ</translation> <translation id="4352287748243729941">ใช้รหัสผ่าน <ph name="PROVIDER" /> ของคุณหรือไม่</translation> <translation id="4355272626458588338">คุณกลับไปยังหน้าที่สำคัญสำหรับคุณได้ด้วยการเพิ่มบุ๊กมาร์ก</translation> +<translation id="4356503491090073318">หมายเลขบัตร*</translation> <translation id="4357206670025518404">+<ph name="COUNT_NUMBER" /></translation> <translation id="4359809482106103048">ข้อมูลโดยย่อด้านความปลอดภัย</translation> <translation id="4378154925671717803">โทรศัพท์</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">กำลังติดตามราคา รับการแจ้งเตือนหากราคาลดลงในเว็บไซต์ใดก็ตาม</translation> <translation id="4425173294238317796">ชีตการยืนยันพาสคีย์</translation> <translation id="442518031075347249">คุณจะใช้บัตรเสมือนกับ Google Pay ไม่ได้อีกต่อไป <ph name="BEGIN_LINK1" />ดูข้อมูลเพิ่มเติมเกี่ยวกับบัตรเสมือน<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{ระบบจะปิดแท็บ <ph name="TAB_TITLE" /> และแท็บอื่นอีก <ph name="TAB_COUNT_ONE" /> แท็บ}other{ระบบจะปิดแท็บ <ph name="TAB_TITLE" /> และแท็บอื่นอีก <ph name="TAB_COUNT_MANY" /> แท็บ}}</translation> <translation id="4426508677408162512">บุ๊กมาร์กทั้งหมด</translation> <translation id="4430277756566635951">เลือก <ph name="EMAIL" /> อยู่ เลือกบัญชี</translation> <translation id="4452411734226507615">ปิดแท็บ <ph name="TAB_TITLE" /></translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">ไม่พบหน้านั้น โปรดตรวจสอบตัวสะกดหรือลองค้นเว็บ</translation> <translation id="4988526792673242964">หน้า</translation> <translation id="4991110219272367918">ตัวเลือกในการอนุมัติหรือไม่อนุมัติเว็บไซต์ปิดอยู่</translation> +<translation id="4996042648402406470">รับ</translation> <translation id="4996095658297597226">ใช้รหัสผ่านที่แนะนำใช่ไหม</translation> <translation id="5001388021414335527">ติดตามเว็บไซต์นี้ได้ที่นี่</translation> <translation id="5004416275253351869">ส่วนควบคุมกิจกรรมของ Google</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">ข้ามไปยังแท็บก่อนหน้า</translation> <translation id="5210365745912300556">ปิดแท็บ</translation> <translation id="5215957675041756913">ควบคุมข้อมูลและบัญชีของคุณ</translation> +<translation id="5218324087477576825">ต้องระบุหมายเลขบัตร</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" /> <ph name="PERMISSION_2" /> และอื่นๆ <ph name="SEPARATOR" /> Chrome นำสิทธิ์เหล่านี้ออกเนื่องจากคุณไม่ได้เข้าชมเมื่อเร็วๆ นี้</translation> <translation id="5222676887888702881">ออกจากระบบ</translation> <translation id="5226378907213531272">คุณจะต้องปลดล็อกหน้าจอทุกครั้งที่ใช้รถ</translation> <translation id="5227554086496586518">แตะเพื่อดูผลการค้นหา</translation> +<translation id="5229736206150093143">ผลลัพธ์ล่าสุด</translation> <translation id="5233638681132016545">แท็บใหม่</translation> <translation id="5235196193381275927">เกิดข้อผิดพลาดระหว่างการลงชื่อเข้าใช้</translation> <translation id="5246093389635966745">แก้ไขทางลัดแถบเครื่องมือ</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">ลงชื่อเข้าใช้เพื่อดูเนื้อหาตามความสนใจของคุณ</translation> <translation id="6764137532716892442">กลุ่มแท็บ <ph name="GROUP_TITLE" /> ที่แชร์พร้อมกิจกรรมใหม่</translation> <translation id="6767294960381293877">รายการอุปกรณ์ที่จะแชร์แท็บด้วยเปิดอยู่ที่ระดับความสูงครึ่งหนึ่งของหน้าจอ</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{ระบบจะปิดแท็บที่ไม่ระบุตัวตน <ph name="INCOGNITO_TAB_COUNT" /> แท็บและแท็บอื่นอีก <ph name="TAB_COUNT_ONE" /> แท็บ}other{ระบบจะปิดแท็บที่ไม่ระบุตัวตน <ph name="INCOGNITO_TAB_COUNT" /> แท็บและแท็บอื่นอีก <ph name="TAB_COUNT_MANY" /> แท็บ}}</translation> <translation id="6785476624617658922">ข้อกำหนดในการให้บริการเพิ่มเติมของ Chrome และ Chrome OS</translation> <translation id="6786747875388722282">ส่วนขยาย</translation> <translation id="6795633245022906657">เปิดแท็บใหม่อย่างรวดเร็ว ไปที่การตั้งค่าเพื่อแก้ไขทางลัดนี้</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">คุณสามารถใช้รหัสผ่านที่บันทึกไว้ได้ในทุกอุปกรณ์ เพราะระบบได้บันทึกไว้ในเครื่องมือจัดการรหัสผ่านบน Google แล้วสำหรับ <ph name="ACCOUNT" /></translation> <translation id="7968014550143838305">เพิ่มไปยังเรื่องรออ่านแล้ว</translation> <translation id="7968982339740310781">ดูรายละเอียด</translation> +<translation id="7969391000881506217">วันที่หมดอายุ*</translation> <translation id="7971136598759319605">ใช้งานเมื่อ 1 วันที่ผ่านมา</translation> <translation id="7975379999046275268">พรีวิวหน้า <ph name="BEGIN_NEW" />ใหม่<ph name="END_NEW" /></translation> <translation id="7977451675950311423">เตือนคุณหากใช้รหัสผ่านที่ถูกละเมิดในการละเมิดข้อมูล</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446">นำ <ph name="MEMBER_FULL_NAME" /> ออกใช่ไหม</translation> <translation id="8570677896027847510">ดาวน์โหลดไฟล์อย่างปลอดภัยไม่ได้</translation> <translation id="8571213806525832805">4 สัปดาห์ที่ผ่านมา</translation> +<translation id="8580435650274205305">ต้องระบุวันที่หมดอายุ</translation> <translation id="8582529315803410153">คุณจะเห็นแท็บจากอุปกรณ์อื่นๆ ที่นี่</translation> <translation id="8585103689515290060">บริการป้อนข้อความอัตโนมัติ</translation> <translation id="859046281437143747">ติดตามราคาโดยใช้ปุ่ม "ตัวเลือกเพิ่มเติม"</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb index 416182d0..c3042c4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -480,6 +480,7 @@ <translation id="3172472771272043251">{PASSWORDS_COUNT,plural, =1{1 پاس ورڈ اور دیگر آئٹمز صرف اس آلے پر محفوظ ہیں۔ انہیں اپنے دیگر آلات پر استعمال کرنے کے لیے، انہیں اپنے Google اکاؤنٹ <ph name="ACCOUNT_EMAIL" /> میں محفوظ کریں۔}other{# پاس ورڈز اور دیگر آئٹمز صرف اس آلے پر محفوظ ہیں۔ انہیں اپنے دیگر آلات پر استعمال کرنے کے لیے، انہیں اپنے Google اکاؤنٹ <ph name="ACCOUNT_EMAIL" /> میں محفوظ کریں۔}}</translation> <translation id="3187472288455401631">اشتہار کی اثرپذیری کی پیمائش</translation> <translation id="3189635831478931757"><ph name="GROUP_TITLE" /> ٹیب گروپ</translation> +<translation id="3200536777393523575">آپ کی موجودہ ونڈو بند کریں؟</translation> <translation id="3207960819495026254">بُک مارک بنایا ہوا</translation> <translation id="3208584281581115441">ابھی چیک کریں</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> کو حذف کر دیا گیا</translation> @@ -724,6 +725,7 @@ <translation id="4351244548802238354">ڈائیلاگ بند کریں</translation> <translation id="4352287748243729941">اپنا <ph name="PROVIDER" /> پاس ورڈ استعمال کریں؟</translation> <translation id="4355272626458588338">بُک مارک شامل کر کے آپ کسی ایسے صفحے پر واپس جا سکتے ہیں جو آپ کیلئے اہم ہے</translation> +<translation id="4356503491090073318">کارڈ نمبر*</translation> <translation id="4357206670025518404"><ph name="COUNT_NUMBER" />+</translation> <translation id="4359809482106103048">ایک نظر میں حفاظت</translation> <translation id="4378154925671717803">فون</translation> @@ -741,6 +743,7 @@ <translation id="4425140285732600465">قیمت ٹریک کی جا رہی ہے۔ کسی بھی سائٹ پر قیمت میں گراوٹ ہونے پر الرٹس حاصل کریں۔</translation> <translation id="4425173294238317796">پاسکی کی تصدیقی شیٹ</translation> <translation id="442518031075347249">اب آپ Google Pay کے ساتھ اپنا ورچوئل کارڈ استعمال نہیں کر سکیں گے۔ <ph name="BEGIN_LINK1" />ورچوئل کارڈز کے بارے میں مزید جانیں<ph name="END_LINK1" /></translation> +<translation id="442577985493096785">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> اور <ph name="TAB_COUNT_ONE" /> دیگر ٹیب کو بند کر دیا جائے گا}other{<ph name="TAB_TITLE" /> اور <ph name="TAB_COUNT_MANY" /> دیگر ٹیبز کو بند کر دیا جائے گا}}</translation> <translation id="4426508677408162512">سبھی بُک مارکس</translation> <translation id="4430277756566635951"><ph name="EMAIL" /> فی الحال منتخب کردہ ہے۔ ایک اکاؤنٹ منتخب کریں۔</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ٹیب بند کریں</translation> @@ -876,6 +879,7 @@ <translation id="4987271110129728827">وہ صفحہ نہیں مل سکا۔ اپنا املا چیک کریں یا ویب تلاش کی کوشش کریں۔</translation> <translation id="4988526792673242964">صفحات</translation> <translation id="4991110219272367918">کسی بند ویب سائٹ کو منظوری دینے یا منظوری نہ دینے کا اختیار</translation> +<translation id="4996042648402406470">حاصل کریں</translation> <translation id="4996095658297597226">تجویز کردہ پاس ورڈ استعمال کریں؟</translation> <translation id="5001388021414335527">یہاں اس سائٹ کی پیروی کریں</translation> <translation id="5004416275253351869">Google سرگرمی کنٹرولز</translation> @@ -927,10 +931,12 @@ <translation id="5210286577605176222">پچھلے ٹیب پر جائیں</translation> <translation id="5210365745912300556">ٹیب بند کریں</translation> <translation id="5215957675041756913">اپنے ڈیٹا اور اکاؤنٹ کو کنٹرول کریں</translation> +<translation id="5218324087477576825">کارڈ نمبر درکار</translation> <translation id="5221437554987713282"><ph name="PERMISSION_1" />، <ph name="PERMISSION_2" /> اور مزید <ph name="SEPARATOR" />، Chrome نے یہ اجازتیں ہٹا دی ہیں کیوں کہ آپ حال ہی میں ان کا ملاحظہ نہیں کیا ہے</translation> <translation id="5222676887888702881">سائن آؤٹ</translation> <translation id="5226378907213531272">جب بھی آپ کار استعمال کریں گے آپ اپنی اسکرین کو غیر مقفل کر دیں گے</translation> <translation id="5227554086496586518">تلاش کے نتائج دیکھنے کیلئے تھپتھپائیں</translation> +<translation id="5229736206150093143">تازہ ترین نتائج</translation> <translation id="5233638681132016545">نیا ٹیب</translation> <translation id="5235196193381275927">سائن ان کرنے کے دوران کچھ غلط ہو گیا</translation> <translation id="5246093389635966745">ٹول بار شارٹ کٹ میں ترمیم کریں</translation> @@ -1286,6 +1292,7 @@ <translation id="676305334223455055">اپنی دلچسپیوں پر مبنی مواد حاصل کرنے کیلئے سائن ان کریں</translation> <translation id="6764137532716892442">نئی سرگرمی کے ساتھ اشتراک کردہ <ph name="GROUP_TITLE" /> ٹیب گروپ</translation> <translation id="6767294960381293877">ان آلات کی فہرست جن کے ساتھ ٹیب کا اشتراک کرنا ہے نصف اونچائی پر کھلی ہوئی ہے۔</translation> +<translation id="6783664456110886353">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> پوشیدگی اور <ph name="TAB_COUNT_ONE" /> دیگر ٹیب کو بند کر دیا جائے گا}other{<ph name="INCOGNITO_TAB_COUNT" /> پوشیدگی اور <ph name="TAB_COUNT_MANY" /> دیگر ٹیبز کو بند کر دیا جائے گا}}</translation> <translation id="6785476624617658922">Chrome اور ChromeOS کی اضافی سروس کی شرائط</translation> <translation id="6786747875388722282">توسیعات</translation> <translation id="6795633245022906657">فوری طور پر ایک نیا ٹیب کھولیں۔ اس شارٹ کٹ میں ترمیم کرنے کے لیے، ترتیبات پر جائیں۔</translation> @@ -1582,6 +1589,7 @@ <translation id="7965838025086216108">آپ کسی بھی آلے پر محفوظ کردہ پاس ورڈز استعمال کر سکتے ہیں۔ وہ <ph name="ACCOUNT" /> کے Google پاس ورڈ مینیجر میں محفوظ ہوتے ہیں۔</translation> <translation id="7968014550143838305">پڑھنے کی فہرست میں شامل کیا گیا</translation> <translation id="7968982339740310781">تفصیلات دیکھیں</translation> +<translation id="7969391000881506217">تاریخ اختتام*</translation> <translation id="7971136598759319605">1 دن پہلے فعال تھا</translation> <translation id="7975379999046275268">صفحے کا پیش منظر دیکھیں <ph name="BEGIN_NEW" />نیا<ph name="END_NEW" /></translation> <translation id="7977451675950311423">اگر آپ کوئی ایسا پاس ورڈ استعمال کرتے ہیں جس سے ڈیٹا کی خلاف ورزی میں سمجھوتہ کیا گیا ہو تو آپ کو متنبہ کرتا ہے۔</translation> @@ -1741,6 +1749,7 @@ <translation id="8565021320663436446"><ph name="MEMBER_FULL_NAME" /> ہٹائیں؟</translation> <translation id="8570677896027847510">فائل کو محفوظ طریقے سے ڈاؤن لوڈ نہیں کیا جا سکتا</translation> <translation id="8571213806525832805">گزشتہ 4 ہفتے</translation> +<translation id="8580435650274205305">تاریخ اختتام درکار ہے</translation> <translation id="8582529315803410153">آپ کو دوسرے آلات سے اپنے ٹیبز یہاں ملیں گے</translation> <translation id="8585103689515290060">آٹو فِل سروسز</translation> <translation id="859046281437143747">مزید اختیارات والے بٹن سے قیمت ٹریک کریں</translation>
diff --git a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_unittest.cc b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_unittest.cc index 4fa87f6..589c428 100644 --- a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_unittest.cc +++ b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_unittest.cc
@@ -1430,7 +1430,7 @@ kCrxAppPrefix + app_name, true /* trusted_source */, gfx::Rect(), profile, true); params.window = this; - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); chrome::AddTabAt(browser_.get(), GURL(), 0, true); } V1App(const V1App&) = delete;
diff --git a/chrome/browser/ui/breadcrumb_manager_browser_agent_unittest.cc b/chrome/browser/ui/breadcrumb_manager_browser_agent_unittest.cc index cde0387..ca708e8 100644 --- a/chrome/browser/ui/breadcrumb_manager_browser_agent_unittest.cc +++ b/chrome/browser/ui/breadcrumb_manager_browser_agent_unittest.cc
@@ -59,7 +59,7 @@ Browser::CreateParams create_params(profile(), false); std::unique_ptr<BrowserWindow> test_window = CreateBrowserWindow(); create_params.window = test_window.get(); - std::unique_ptr<Browser> browser2(Browser::Create(create_params)); + auto browser2 = Browser::DeprecatedCreateOwnedForTesting(create_params); EXPECT_TRUE(browser2); // Insert tab into `browser2`.
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 5a2c3e1..9b13df3 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -629,6 +629,17 @@ return new Browser(params); } +// static +std::unique_ptr<Browser> Browser::DeprecatedCreateOwnedForTesting( + const CreateParams& params) { + CHECK_IS_TEST(); + // If this is failing, a caller is trying to create a browser when creation is + // not possible, e.g. using the wrong profile or during shutdown. The caller + // should handle this; see e.g. crbug.com/1141608 and crbug.com/1261628. + CHECK_EQ(CreationStatus::kOk, GetCreationStatusForProfile(params.profile)); + return base::WrapUnique(new Browser(params)); +} + Browser::Browser(const CreateParams& params) : create_params_(params), type_(params.type),
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h index 0d917abe..de64b12 100644 --- a/chrome/browser/ui/browser.h +++ b/chrome/browser/ui/browser.h
@@ -369,7 +369,8 @@ // Constructors, Creation, Showing ////////////////////////////////////////// - // Creates a browser instance with the provided params. + // Creates a browser instance with the provided params. Returns an unowned + // pointer to the created browser. // Crashes if the requested browser creation is not allowed. // For example, browser creation will not be allowed for profiles that // disallow browsing (like sign-in profile on Chrome OS). @@ -382,6 +383,14 @@ // caller is expected to take the ownership of the created Browser instance. static Browser* Create(const CreateParams& params); + // WARNING: Use of this is DEPRECATED and exists only to support pre-existing + // browser unittests. Similar to Create() above, however the created browser + // is owned by the caller. + // TODO(crbug.com/417766643): Remove this once all use of Browser in unittests + // has been eliminated. + static std::unique_ptr<Browser> DeprecatedCreateOwnedForTesting( + const CreateParams& params); + // Returns whether a browser window can be created for the specified profile. static CreationStatus GetCreationStatusForProfile(Profile* profile);
diff --git a/chrome/browser/ui/browser_close_unittest.cc b/chrome/browser/ui/browser_close_unittest.cc index eeb6c90..53fc01a 100644 --- a/chrome/browser/ui/browser_close_unittest.cc +++ b/chrome/browser/ui/browser_close_unittest.cc
@@ -106,9 +106,7 @@ void TearDown() override { for (auto& browser_pair : browsers_) { while (!browser_pair.second.empty()) { - Browser* browser = browser_pair.second.back(); browser_pair.second.pop_back(); - delete browser; } } for (auto& browser_window_pair : browser_windows_) { @@ -155,7 +153,7 @@ CHECK(browsers_.end() != browsers_.find(profile)); CHECK_GT(browsers_[profile].size(), static_cast<size_t>(index)); - return browsers_[profile][index]; + return browsers_[profile][index].get(); } private: @@ -174,20 +172,19 @@ CHECK(browsers_.end() == browsers_.find(profile)); std::vector<raw_ptr<TestBrowserWindow, VectorExperimental>> windows; - std::vector<raw_ptr<Browser, VectorExperimental>> browsers; + std::vector<std::unique_ptr<Browser>> browsers; for (int i = 0; i < num_windows; ++i) { TestBrowserWindow* window = new TestBrowserWindow(); Browser::CreateParams params(profile, true); params.type = Browser::TYPE_NORMAL; params.window = window; - Browser* browser = Browser::Create(params); windows.push_back(window); - browsers.push_back(browser); + browsers.emplace_back(Browser::DeprecatedCreateOwnedForTesting(params)); } browser_windows_[profile] = windows; - browsers_[profile] = browsers; + browsers_[profile] = std::move(browsers); } // Note that the vector elements are all owned by this class and must be @@ -195,8 +192,7 @@ std::map<Profile*, std::vector<raw_ptr<TestBrowserWindow, VectorExperimental>>> browser_windows_; - std::map<Profile*, std::vector<raw_ptr<Browser, VectorExperimental>>> - browsers_; + std::map<Profile*, std::vector<std::unique_ptr<Browser>>> browsers_; content::BrowserTaskEnvironment task_environment_; TestingProfileManager profile_manager_;
diff --git a/chrome/browser/ui/browser_command_controller_unittest.cc b/chrome/browser/ui/browser_command_controller_unittest.cc index 108e9d23..04bc97b 100644 --- a/chrome/browser/ui/browser_command_controller_unittest.cc +++ b/chrome/browser/ui/browser_command_controller_unittest.cc
@@ -145,7 +145,7 @@ /*trusted_source=*/true, browser()->window()->GetBounds(), profile(), /*user_gesture=*/true); params.window = browser()->window(); - set_browser(Browser::Create(params)); + set_browser(Browser::DeprecatedCreateOwnedForTesting(params)); ASSERT_TRUE(browser()->is_type_app()); @@ -223,7 +223,7 @@ /*trusted_source=*/true, browser()->window()->GetBounds(), profile(), /*user_gesture=*/true); params.window = browser()->window(); - set_browser(Browser::Create(params)); + set_browser(Browser::DeprecatedCreateOwnedForTesting(params)); ASSERT_TRUE(browser()->is_type_app()); browser()->command_controller()->FullscreenStateChanged(); EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
diff --git a/chrome/browser/ui/browser_unittest.cc b/chrome/browser/ui/browser_unittest.cc index 81e6e03..d75c501f 100644 --- a/chrome/browser/ui/browser_unittest.cc +++ b/chrome/browser/ui/browser_unittest.cc
@@ -217,7 +217,7 @@ Browser::CreateParams create_params(profile(), false); std::unique_ptr<BrowserWindow> test_window(CreateBrowserWindow()); create_params.window = test_window.get(); - std::unique_ptr<Browser> test_browser(Browser::Create(create_params)); + auto test_browser = Browser::DeprecatedCreateOwnedForTesting(create_params); EXPECT_TRUE(test_browser); } @@ -236,8 +236,8 @@ profile()->GetPrimaryOTRProfile(/*create_if_needed=*/true), false); std::unique_ptr<BrowserWindow> test_window(CreateBrowserWindow()); off_the_record_create_params.window = test_window.get(); - std::unique_ptr<Browser> otr_browser( - Browser::Create(off_the_record_create_params)); + auto otr_browser = + Browser::DeprecatedCreateOwnedForTesting(off_the_record_create_params); EXPECT_TRUE(otr_browser); } @@ -250,7 +250,7 @@ Browser::CreateParams create_params(profile(), false); std::unique_ptr<BrowserWindow> test_window(CreateBrowserWindow()); create_params.window = test_window.get(); - std::unique_ptr<Browser> test_browser(Browser::Create(create_params)); + auto test_browser = Browser::DeprecatedCreateOwnedForTesting(create_params); EXPECT_TRUE(test_browser); // Creating a browser in OTR test profile should succeed. @@ -258,8 +258,8 @@ profile()->GetPrimaryOTRProfile(/*create_if_needed=*/true), false); std::unique_ptr<BrowserWindow> otr_test_window(CreateBrowserWindow()); off_the_record_create_params.window = otr_test_window.get(); - std::unique_ptr<Browser> otr_browser( - Browser::Create(off_the_record_create_params)); + auto otr_browser = + Browser::DeprecatedCreateOwnedForTesting(off_the_record_create_params); EXPECT_TRUE(otr_browser); } @@ -286,7 +286,7 @@ std::unique_ptr<BrowserWindow> window = CreateBrowserWindow(); create_params.window = window.get(); session_manager::SessionManager::Get()->SetSessionState(SessionState::ACTIVE); - std::unique_ptr<Browser> test_browser(Browser::Create(create_params)); + auto test_browser = Browser::DeprecatedCreateOwnedForTesting(create_params); // Normal flow, creation succeeds. EXPECT_TRUE(test_browser); } @@ -429,7 +429,6 @@ Browser::CreateParams(guest_profile, false); std::unique_ptr<BrowserWindow> test_window = CreateBrowserWindow(); create_params.window = test_window.get(); - std::unique_ptr<Browser> browser = - std::unique_ptr<Browser>(Browser::Create(create_params)); + auto browser = Browser::DeprecatedCreateOwnedForTesting(create_params); EXPECT_TRUE(browser); }
diff --git a/chrome/browser/ui/browser_window/browser_window_features.cc b/chrome/browser/ui/browser_window/browser_window_features.cc index c570769..7851ddc 100644 --- a/chrome/browser/ui/browser_window/browser_window_features.cc +++ b/chrome/browser/ui/browser_window/browser_window_features.cc
@@ -426,6 +426,7 @@ memory_saver_opt_in_iph_controller_.reset(); lens_overlay_entry_point_controller_.reset(); tab_search_toolbar_button_controller_.reset(); + profile_menu_coordinator_.reset(); toast_service_.reset(); extension_window_controller_.reset();
diff --git a/chrome/browser/ui/omnibox/chrome_omnibox_client.cc b/chrome/browser/ui/omnibox/chrome_omnibox_client.cc index 223bc6f6..1bc64b9 100644 --- a/chrome/browser/ui/omnibox/chrome_omnibox_client.cc +++ b/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
@@ -382,8 +382,8 @@ TemplateURL* template_url = GetTemplateURLService()->GetTemplateURLForKeyword(keyword); - if (!template_url || - template_url->starter_pack_id() != TemplateURLStarterPackData::kPage) { + if (!template_url || template_url->starter_pack_id() != + template_url_starter_pack_data::kPage) { return; }
diff --git a/chrome/browser/ui/omnibox/omnibox_tab_helper.cc b/chrome/browser/ui/omnibox/omnibox_tab_helper.cc index 0c3befcf..9b462c8 100644 --- a/chrome/browser/ui/omnibox/omnibox_tab_helper.cc +++ b/chrome/browser/ui/omnibox/omnibox_tab_helper.cc
@@ -23,6 +23,8 @@ #include "components/omnibox/common/omnibox_feature_configs.h" #include "components/omnibox/common/omnibox_focus_state.h" #include "content/public/browser/render_frame_host.h" +#include "services/service_manager/public/cpp/interface_provider.h" +#include "third_party/blink/public/common/features.h" #include "third_party/metrics_proto/omnibox_event.pb.h" WEB_CONTENTS_USER_DATA_KEY_IMPL(OmniboxTabHelper); @@ -153,6 +155,28 @@ logged_current_navigation_timings_ = false; primary_page_changed_time_ = base::ElapsedTimer(); + + AddMetadataObserver(page); +} + +void OmniboxTabHelper::AddMetadataObserver(content::Page& page) { + if (!base::FeatureList::IsEnabled(blink::features::kFrameMetadataObserver)) { + return; + } + + frame_metadata_observer_receiver_.reset(); + + mojo::Remote<blink::mojom::FrameMetadataObserverRegistry> + frame_metadata_observer_registry; + auto& render_frame_host = page.GetMainDocument(); + render_frame_host.GetRemoteInterfaces()->GetInterface( + frame_metadata_observer_registry.BindNewPipeAndPassReceiver()); + + mojo::PendingRemote<blink::mojom::FrameMetadataObserver> remote; + frame_metadata_observer_receiver_.Bind( + remote.InitWithNewPipeAndPassReceiver()); + + frame_metadata_observer_registry->AddObserver(std::move(remote)); } void OmniboxTabHelper::PrimaryMainDocumentElementAvailable() { @@ -202,6 +226,8 @@ void OmniboxTabHelper::MaybeLogPaywallSignal() { // If the page content service is not observing, then the paywall signal is // unavailable to be fetched. + // TODO(mercerd): handle the case where the listener exists -- maybe add + // `&& !frame_metadata_observer_receiver_` if (!page_content_service_observation_.IsObserving()) { return; } @@ -210,3 +236,7 @@ base::UmaHistogramEnumeration("Omnibox.OnPopupOpen.PaywallSignal", paywall_signal); } + +void OmniboxTabHelper::OnPaidContentMetadataChanged(bool has_paid_content) { + // TODO(mercerd): handle has_paid_content; +}
diff --git a/chrome/browser/ui/omnibox/omnibox_tab_helper.h b/chrome/browser/ui/omnibox/omnibox_tab_helper.h index b20c7c5..09e8a23 100644 --- a/chrome/browser/ui/omnibox/omnibox_tab_helper.h +++ b/chrome/browser/ui/omnibox/omnibox_tab_helper.h
@@ -15,6 +15,8 @@ #include "components/omnibox/common/omnibox_focus_state.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "third_party/blink/public/mojom/content_extraction/frame_metadata_observer_registry.mojom.h" #include "third_party/metrics_proto/omnibox_event.pb.h" namespace content { @@ -30,7 +32,8 @@ class OmniboxTabHelper : public content::WebContentsUserData<OmniboxTabHelper>, public page_content_annotations::PageContentExtractionService::Observer, - public content::WebContentsObserver { + public content::WebContentsObserver, + public blink::mojom::FrameMetadataObserver { public: // Observer to listen for updates from OmniboxTabHelper. class Observer : public base::CheckedObserver { @@ -50,6 +53,9 @@ virtual void OnOmniboxPopupVisibilityChanged(bool popup_is_open) = 0; }; + // Invoked when the frame metadata changes. + void OnPaidContentMetadataChanged(bool has_paid_content) override; + ~OmniboxTabHelper() override; void AddObserver(Observer* observer); @@ -96,6 +102,9 @@ // Logs the paywall signal for the current page. void MaybeLogPaywallSignal(); + // Adds the frame metadata observer. + void AddMetadataObserver(content::Page& page); + // Whether the current page has a paywall signal in the Annotated Page // Content. std::nullopt if the page content wasn't yet extracted and // therefore the signal could not be calculated. @@ -125,6 +134,9 @@ page_content_service_observation_{this}; base::ObserverList<Observer> observers_; + + mojo::Receiver<blink::mojom::FrameMetadataObserver> + frame_metadata_observer_receiver_{this}; }; #endif // CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_TAB_HELPER_H_
diff --git a/chrome/browser/ui/search_engines/template_url_table_model.cc b/chrome/browser/ui/search_engines/template_url_table_model.cc index db33fc2..411e9de 100644 --- a/chrome/browser/ui/search_engines/template_url_table_model.cc +++ b/chrome/browser/ui/search_engines/template_url_table_model.cc
@@ -120,9 +120,10 @@ // Don't include the expanded set of starter pack keywords if the expansion // feature flag is not enabled. if ((template_url->starter_pack_id() == - TemplateURLStarterPackData::kGemini && + template_url_starter_pack_data::kGemini && !OmniboxFieldTrial::IsStarterPackExpansionEnabled()) || - (template_url->starter_pack_id() == TemplateURLStarterPackData::kPage && + (template_url->starter_pack_id() == + template_url_starter_pack_data::kPage && !omnibox_feature_configs::ContextualSearch::Get().starter_pack_page)) { continue; }
diff --git a/chrome/browser/ui/toolbar/chrome_labs/BUILD.gn b/chrome/browser/ui/toolbar/chrome_labs/BUILD.gn index e392302..2dcfb0b1 100644 --- a/chrome/browser/ui/toolbar/chrome_labs/BUILD.gn +++ b/chrome/browser/ui/toolbar/chrome_labs/BUILD.gn
@@ -4,12 +4,54 @@ source_set("chrome_labs") { sources = [ + "chrome_labs_model.cc", "chrome_labs_model.h", + "chrome_labs_prefs.cc", "chrome_labs_prefs.h", + "chrome_labs_utils.cc", "chrome_labs_utils.h", ] + + deps = [ + "//chrome/app:generated_resources", + "//chrome/browser:browser_process", + "//chrome/browser:flags", + "//chrome/browser/profiles:profile", + "//chrome/browser/ui:ui_features", + "//chrome/common:channel_info", + "//components/pref_registry", + "//components/prefs", + "//components/variations", + "//components/webui/flags", + "//ui/base", + ] + + if (is_chromeos) { + deps += [ + "//ash/constants", + "//chrome/browser/ash/profiles", + ] + } + public_deps = [ "//base", "//components/version_info:channel", ] } + +if (!is_android) { + source_set("unit_tests") { + testonly = true + sources = [ "chrome_labs_model_unittest.cc" ] + deps = [ + ":chrome_labs", + "//base", + "//base:i18n", + "//base/test:test_support", + "//chrome/browser:flags", + "//chrome/test:test_support", + "//components/webui/flags", + "//testing/gtest", + ] + } +}
diff --git a/chrome/browser/ui/toolbar/chrome_labs/chrome_labs_model.cc b/chrome/browser/ui/toolbar/chrome_labs/chrome_labs_model.cc index 212eb46..fb255c4 100644 --- a/chrome/browser/ui/toolbar/chrome_labs/chrome_labs_model.cc +++ b/chrome/browser/ui/toolbar/chrome_labs/chrome_labs_model.cc
@@ -10,7 +10,6 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "build/buildflag.h" -#include "chrome/browser/flag_descriptions.h" #include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc index 04947cc..64931e1 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc
@@ -87,7 +87,7 @@ Browser::CreateParams params(profile(), true); params.window = &browser_window_; - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } virtual BookmarkBarView* bookmark_bar_view() = 0;
diff --git a/chrome/browser/ui/views/commerce/product_specifications_button_unittest.cc b/chrome/browser/ui/views/commerce/product_specifications_button_unittest.cc index 1534708b..9b16644 100644 --- a/chrome/browser/ui/views/commerce/product_specifications_button_unittest.cc +++ b/chrome/browser/ui/views/commerce/product_specifications_button_unittest.cc
@@ -39,7 +39,7 @@ profile_ = profile_builder.Build(); Browser::CreateParams params(profile_.get(), true); params.window = &browser_window_; - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); tab_strip_controller_ = std::make_unique<FakeBaseTabStripController>(); tab_strip_model_ = std::make_unique<TabStripModel>( &tab_strip_model_delegate_, profile_.get());
diff --git a/chrome/browser/ui/views/controls/hover_button.h b/chrome/browser/ui/views/controls/hover_button.h index feb0cad06..e5e9a59 100644 --- a/chrome/browser/ui/views/controls/hover_button.h +++ b/chrome/browser/ui/views/controls/hover_button.h
@@ -47,8 +47,6 @@ METADATA_HEADER(HoverButton, views::LabelButton) public: - enum Style { STYLE_PROMINENT, STYLE_ERROR }; - HoverButton(); // Creates a single line hover button with no icon.
diff --git a/chrome/browser/ui/views/download/bubble/download_bubble_contents_view_unittest.cc b/chrome/browser/ui/views/download/bubble/download_bubble_contents_view_unittest.cc index fb9a9858..302ff73 100644 --- a/chrome/browser/ui/views/download/bubble/download_bubble_contents_view_unittest.cc +++ b/chrome/browser/ui/views/download/bubble/download_bubble_contents_view_unittest.cc
@@ -157,7 +157,7 @@ Browser::CreateParams params(profile_, true); params.type = Browser::TYPE_NORMAL; params.window = window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); anchor_widget_ = CreateTestWidget(views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET,
diff --git a/chrome/browser/ui/views/download/bubble/download_bubble_security_view_unittest.cc b/chrome/browser/ui/views/download/bubble/download_bubble_security_view_unittest.cc index c095c42..7250ead 100644 --- a/chrome/browser/ui/views/download/bubble/download_bubble_security_view_unittest.cc +++ b/chrome/browser/ui/views/download/bubble/download_bubble_security_view_unittest.cc
@@ -182,7 +182,7 @@ Browser::CreateParams params(profile_, true); params.type = Browser::TYPE_NORMAL; params.window = window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); security_view_info_ = std::make_unique<DownloadBubbleSecurityViewInfo>(); anchor_widget_ =
diff --git a/chrome/browser/ui/views/location_bar/selected_keyword_view.cc b/chrome/browser/ui/views/location_bar/selected_keyword_view.cc index d3ceccd..394d8fb 100644 --- a/chrome/browser/ui/views/location_bar/selected_keyword_view.cc +++ b/chrome/browser/ui/views/location_bar/selected_keyword_view.cc
@@ -48,12 +48,12 @@ names.short_name = template_url ? template_url->AdjustedShortNameForLocaleDirection() : u""; - if (template_url && - template_url->starter_pack_id() == TemplateURLStarterPackData::kGemini) { + if (template_url && template_url->starter_pack_id() == + template_url_starter_pack_data::kGemini) { names.full_name = l10n_util::GetStringFUTF16( IDS_OMNIBOX_SELECTED_KEYWORD_ASK_TEXT, names.short_name); } else if (template_url && template_url->starter_pack_id() == - TemplateURLStarterPackData::kPage) { + template_url_starter_pack_data::kPage) { names.full_name = l10n_util::GetStringUTF16(IDS_STARTER_PACK_PAGE_KEYWORD_TEXT); } else if (template_url && @@ -112,15 +112,15 @@ ->GetTemplateURLForKeyword(keyword_); auto* vector_icon = &vector_icons::kSearchIcon; - if (template_url && - template_url->starter_pack_id() == TemplateURLStarterPackData::kGemini) { + if (template_url && template_url->starter_pack_id() == + template_url_starter_pack_data::kGemini) { vector_icon = &omnibox::kSparkIcon; } else if (history_embeddings::IsHistoryEmbeddingsEnabledForProfile( profile_) && history_embeddings::GetFeatureParameters().omnibox_scoped && template_url && template_url->starter_pack_id() == - TemplateURLStarterPackData::kHistory) { + template_url_starter_pack_data::kHistory) { vector_icon = &omnibox::kSearchSparkIcon; } else if (template_url && template_url->policy_origin() ==
diff --git a/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc b/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc index fc0ad795..9238233 100644 --- a/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc +++ b/chrome/browser/ui/views/media_router/cast_toolbar_button_unittest.cc
@@ -84,7 +84,7 @@ window_ = std::make_unique<TestBrowserWindow>(); Browser::CreateParams browser_params(profile_.get(), true); browser_params.window = window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(browser_params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(browser_params); media_router_ = static_cast<MockMediaRouter*>( MediaRouterFactory::GetApiForBrowserContext(profile_.get())); logger_ = std::make_unique<LoggerImpl>();
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc index 3308fcd..32a71d09 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
@@ -453,7 +453,7 @@ Browser::CreateParams params(profile(), /*user_gesture*/ true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); util_ = std::make_unique<TemplateURLServiceFactoryTestUtil>(profile_.get());
diff --git a/chrome/browser/ui/views/permissions/permission_prompt_base_view_unittest.cc b/chrome/browser/ui/views/permissions/permission_prompt_base_view_unittest.cc index 676d7a8..00330d0 100644 --- a/chrome/browser/ui/views/permissions/permission_prompt_base_view_unittest.cc +++ b/chrome/browser/ui/views/permissions/permission_prompt_base_view_unittest.cc
@@ -128,7 +128,7 @@ Browser::CreateParams params(&profile, /*user_gesture=*/true); params.type = Browser::TYPE_PICTURE_IN_PICTURE; params.window = &browser_window; - browser.reset(Browser::Create(params)); + browser = Browser::DeprecatedCreateOwnedForTesting(params); // Create the bubble for a picture-in-picture-window. auto prompt_unique = std::make_unique<TestPermissionPromptBaseView>(
diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_two_origins_view_unittest.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble_two_origins_view_unittest.cc index 75d21809..fdd8573 100644 --- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_two_origins_view_unittest.cc +++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_two_origins_view_unittest.cc
@@ -135,7 +135,7 @@ Browser::CreateParams params(profile_.get(), /*user_gesture=*/true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } std::unique_ptr<TestingProfile> profile_;
diff --git a/chrome/browser/ui/views/profiles/profile_customization_bubble_sync_controller_unittest.cc b/chrome/browser/ui/views/profiles/profile_customization_bubble_sync_controller_unittest.cc index 71a81d8..2024129 100644 --- a/chrome/browser/ui/views/profiles/profile_customization_bubble_sync_controller_unittest.cc +++ b/chrome/browser/ui/views/profiles/profile_customization_bubble_sync_controller_unittest.cc
@@ -93,7 +93,7 @@ Browser::CreateParams params(testing_profile_, /*user_gesture=*/true); params.window = &test_browser_window_; - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); theme_syncable_service_ = std::make_unique<ThemeSyncableService>( testing_profile_, &fake_theme_service_);
diff --git a/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc b/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc index 4b4b2dcd..b8429cc 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc
@@ -55,7 +55,7 @@ Browser::CreateParams params(profile_.get(), /*user_gesture*/ true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); } void ShouldUseOtrProfile(bool use_otr_profile) { use_otr_profile_ = use_otr_profile;
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc index 7e923d2e..d3e21d9 100644 --- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -584,10 +584,6 @@ return app_name; } - if (provider_->ui_manager().GetNumWindowsForApp(app_id()) == 1) { - return app_name; - } - return base::StrCat({app_name, u" - ", raw_title}); }
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc index aad1b0c..68e68408 100644 --- a/chrome/browser/ui/web_applications/web_app_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -2158,9 +2158,7 @@ EXPECT_EQ(app_title, app_browser->GetWindowTitleForCurrentTab(false)); NavigateViaLinkClickToURLAndWait( app_browser, https_server()->GetURL("app.site.test", "/simple.html")); - // The page title is "OK" but the app title should be used instead - // for a single window instance of an app. - EXPECT_EQ(app_title, app_browser->GetWindowTitleForCurrentTab(false)); + EXPECT_EQ(u"A Web App - OK", app_browser->GetWindowTitleForCurrentTab(false)); } // Ensure that web app windows display the app title instead of the page @@ -2180,9 +2178,9 @@ app_browser->tab_strip_model()->GetActiveWebContents(); EXPECT_TRUE(content::WaitForLoadStop(web_contents)); - // When we are within scope, show the app title for a single instance of an - // app. - EXPECT_EQ(app_title, app_browser->GetWindowTitleForCurrentTab(false)); + // When we are within scope, show the page title. + EXPECT_EQ(u"A Web App - Google", + app_browser->GetWindowTitleForCurrentTab(false)); NavigateViaLinkClickToURLAndWait( app_browser, https_server()->GetURL("app.site.test", "/simple.html")); @@ -2212,44 +2210,6 @@ EXPECT_EQ(app_title, app_browser->GetWindowTitleForCurrentTab(false)); } -// Ensure that when a single PWA window is open, only the app name is shown -// in the title. -// When a second window is opened, it includes the page title as a suffix. -// Navigating in the first window updates its title to include the page -// title as a suffix. -IN_PROC_BROWSER_TEST_F(WebAppBrowserTest, MultipleAppWindowTitleTest) { - BrowserWaiter browser_waiter(nullptr); - const GURL app_url = - https_server()->GetURL("/banners/manifest_test_page.html"); - NavigateViaLinkClickToURLAndWait(browser(), app_url); - - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - const webapps::AppId app_id = test::InstallForWebContents( - browser()->profile(), web_contents, - webapps::WebappInstallSource::OMNIBOX_INSTALL_ICON); - - Browser* app_browser = browser_waiter.AwaitAdded(FROM_HERE); - EXPECT_EQ(u"Manifest test app", app_browser->GetWindowTitleForCurrentTab( - /*include_app_name=*/false)); - - Browser* const second_browser = LaunchWebAppBrowserAndWait(app_id); - content::WebContents* const second_web_contents = - second_browser->tab_strip_model()->GetActiveWebContents(); - EXPECT_TRUE(content::WaitForLoadStop(second_web_contents)); - ASSERT_TRUE(AppBrowserController::IsForWebApp(second_browser, app_id)); - - EXPECT_EQ( - u"Manifest test app - Web app banner test page", - second_browser->GetWindowTitleForCurrentTab(/*include_app_name=*/false)); - - // The first browser window should update title after navigation. - NavigateViaLinkClickToURLAndWait(app_browser, app_url); - EXPECT_EQ( - u"Manifest test app - Web app banner test page", - app_browser->GetWindowTitleForCurrentTab(/*include_app_name=*/false)); -} - // WebApps should have origin text. IN_PROC_BROWSER_TEST_F(WebAppBrowserTest, OriginTextRemoved) { const GURL app_url = GetInstallableAppURL();
diff --git a/chrome/browser/ui/webui/new_tab_page/composebox/BUILD.gn b/chrome/browser/ui/webui/new_tab_page/composebox/BUILD.gn index 82099a9..2f4467c 100644 --- a/chrome/browser/ui/webui/new_tab_page/composebox/BUILD.gn +++ b/chrome/browser/ui/webui/new_tab_page/composebox/BUILD.gn
@@ -30,5 +30,7 @@ ":composebox", "//base/test:test_support", "//components/omnibox/composebox", + "//services/network:test_support", + "//services/network/public/cpp", ] }
diff --git a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc index f79567dd..be8dc4af 100644 --- a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc +++ b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc
@@ -4,14 +4,23 @@ #include "chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.h" +#include "base/version_info/channel.h" #include "chrome/browser/ui/webui/new_tab_page/composebox/composebox.mojom.h" #include "components/omnibox/composebox/composebox_query_controller.h" +#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +#include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" class MockQueryController : public ComposeboxQueryController { public: - MockQueryController() = default; + explicit MockQueryController( + signin::IdentityManager* identity_manager, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + version_info::Channel channel) + : ComposeboxQueryController(identity_manager, + url_loader_factory, + channel) {} ~MockQueryController() override = default; MOCK_METHOD(void, NotifySessionStarted, ()); @@ -24,7 +33,12 @@ ~ComposeboxHandlerTest() override = default; void SetUp() override { - auto query_controller_ptr = std::make_unique<MockQueryController>(); + shared_url_loader_factory_ = + base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( + &test_factory_); + auto query_controller_ptr = std::make_unique<MockQueryController>( + /*identity_manager=*/nullptr, shared_url_loader_factory_, + version_info::Channel::UNKNOWN); query_controller_ = query_controller_ptr.get(); handler_ = std::make_unique<ComposeboxHandler>( mojo::PendingReceiver<composebox::mojom::ComposeboxPageHandler>(), @@ -36,6 +50,8 @@ private: std::unique_ptr<ComposeboxHandler> handler_; + network::TestURLLoaderFactory test_factory_; + scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory_; raw_ptr<MockQueryController> query_controller_; };
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc index 5843b63..d884381 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -18,6 +18,7 @@ #include "base/time/time.h" #include "base/values.h" #include "chrome/browser/browser_features.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/buildflags.h" #include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/new_tab_page/feature_promo_helper/new_tab_page_feature_promo_helper.h" @@ -59,6 +60,7 @@ #include "chrome/browser/ui/webui/searchbox/searchbox_handler.h" #include "chrome/browser/ui/webui/theme_source.h" #include "chrome/browser/ui/webui/webui_embedding_context.h" +#include "chrome/common/channel_info.h" #include "chrome/common/pref_names.h" #include "chrome/common/search/instant_types.h" #include "chrome/common/url_constants.h" @@ -91,6 +93,7 @@ #include "content/public/browser/web_ui_data_source.h" #include "google_apis/gaia/core_account_id.h" #include "media/base/media_switches.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/mojom/content_security_policy.mojom.h" #include "skia/ext/skia_utils_base.h" #include "ui/base/accelerators/accelerator.h" @@ -748,7 +751,10 @@ pending_receiver) { composebox_handler_ = std::make_unique<ComposeboxHandler>( std::move(pending_receiver), - std::make_unique<ComposeboxQueryController>()); + std::make_unique<ComposeboxQueryController>( + IdentityManagerFactory::GetForProfile(profile_), + g_browser_process->shared_url_loader_factory(), + chrome::GetChannel())); } void NewTabPageUI::BindInterface(
diff --git a/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc b/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc index cc7d4d96..cb2171b 100644 --- a/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc +++ b/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc
@@ -84,8 +84,8 @@ match.type = static_cast<AutocompleteMatchType::Type>(type); if (match.type == AutocompleteMatchType::STARTER_PACK) { // All STARTER_PACK suggestions should have non-empty vector icons. - for (int starter_pack_id = TemplateURLStarterPackData::kBookmarks; - starter_pack_id != TemplateURLStarterPackData::kMaxStarterPackID; + for (int starter_pack_id = template_url_starter_pack_data::kBookmarks; + starter_pack_id != template_url_starter_pack_data::kMaxStarterPackId; starter_pack_id++) { TemplateURLData turl_data; turl_data.starter_pack_id = starter_pack_id;
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc index 40160b5..26af672 100644 --- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc
@@ -143,7 +143,7 @@ Browser::CreateParams params(profile_.get(), /*user_gesture*/ true); params.type = Browser::TYPE_NORMAL; params.window = browser_window_.get(); - browser_.reset(Browser::Create(params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(params); std::unique_ptr<tabs::TabModel> tab_model = std::make_unique<tabs::TabModel>( content::WebContents::Create(
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc index 3a72a50..dbdd689 100644 --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_page_handler_unittest.cc
@@ -305,7 +305,7 @@ Browser::CreateParams browser_params(profile_.get(), true); browser_params.type = Browser::TYPE_NORMAL; browser_params.window = browser_window_.get(); - browser_ = std::unique_ptr<Browser>(Browser::Create(browser_params)); + browser_ = Browser::DeprecatedCreateOwnedForTesting(browser_params); application_locale_storage_->Set("foo");
diff --git a/chrome/browser/ui/window_sizer/window_sizer_chromeos_unittest.cc b/chrome/browser/ui/window_sizer/window_sizer_chromeos_unittest.cc index 82802b4..cef7d8aa 100644 --- a/chrome/browser/ui/window_sizer/window_sizer_chromeos_unittest.cc +++ b/chrome/browser/ui/window_sizer/window_sizer_chromeos_unittest.cc
@@ -40,7 +40,7 @@ std::unique_ptr<Browser> CreateWindowlessBrowser( Browser::CreateParams params) { params.skip_window_init_for_testing = true; - return std::unique_ptr<Browser>(Browser::Create(params)); + return Browser::DeprecatedCreateOwnedForTesting(params); } // Similar to WindowSizerTestUtil::GetWindowBounds() but takes an existing
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc index 5137b73f..030de51 100644 --- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc +++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -4675,7 +4675,7 @@ // Check update takes effect on live web app window. app_window_update.Run(); AppBrowserController* app_controller = app_browser->app_controller(); - EXPECT_EQ(app_controller->GetTitle(), u"New name"); + EXPECT_EQ(app_controller->GetTitle(), u"New name - Web app banner test page"); EXPECT_EQ(app_controller->GetThemeColor(), SK_ColorGREEN); // Force the app icon to load again and check that it's the new one.
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt index 30874fa..f36d110 100644 --- a/chrome/build/android-arm32.pgo.txt +++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@ -chrome-android32-main-1750398892-0c6509bb8a78b91ba7face94e542ca7ad6910a9b-f77793b2afb14e49cb5be2c29b1269741be81695.profdata +chrome-android32-main-1750528691-3632ded09447e4ac5d897d136b287611a6d10d9d-8de1dc91276ed39409a531fe145dd366bbd4dbce.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt index 85ebd924..e0f5924 100644 --- a/chrome/build/android-arm64.pgo.txt +++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@ -chrome-android64-main-1750452778-32fe86fa91e9c5be4b9dfa9dcd7bff644f46fc9a-647bf72b4d63aad24712a8bb6d3b6435a1a01ab9.profdata +chrome-android64-main-1750538940-c93243d2c806e6aef28c2413b1af909bb42af7d9-f26986f7d95fb53ccb4fd8bc60d7760530b25e21.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 5f47ca5..e3d80b45e 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1750442376-7a310e1a4f9c146c502fe77e012010168bebb74b-75e06514b4370138759e63b67aae06c4bdf8090c.profdata +chrome-linux-main-1750528691-aee476102e9faed637b28278fb3bc2695452c522-8de1dc91276ed39409a531fe145dd366bbd4dbce.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index db72272c..6b8228e 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1750456566-167cb56c5747ba0a1a4aeaee5ef1859ec8ec0d05-d3c2953108ccedcb5c99794b670c9d4a3615b78f.profdata +chrome-mac-arm-main-1750542999-b7ab9ec514bbe63439c884a85747649eb2a8b341-e5440fac140b1e50d246622640bf64acf84dfc11.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index d734a851..ed757a9 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1750442376-92200e059d5248830aa050feec0c6f21a672798b-75e06514b4370138759e63b67aae06c4bdf8090c.profdata +chrome-mac-main-1750528691-a7bfda690b80f6cca45e185447cdc7f89d735229-8de1dc91276ed39409a531fe145dd366bbd4dbce.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt index 93f1bdc..173821cb 100644 --- a/chrome/build/win-arm64.pgo.txt +++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@ -chrome-win-arm64-main-1750442376-0933c70cd60da8ac5fb8ff988a86f072e0e77acb-75e06514b4370138759e63b67aae06c4bdf8090c.profdata +chrome-win-arm64-main-1750528691-56742e1dc8de52b575b2984e77f7879af83f8560-8de1dc91276ed39409a531fe145dd366bbd4dbce.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 8ddc8d5..bbdaffb 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1750409465-3ed8767691c0846548b970e21cb31530c167a3ed-81b3d2d2ac50f0f4974adb3167f294917f8c4d8f.profdata +chrome-win32-main-1750517793-01c48091cd2a05fd5105bc9389de9a699e363f3b-b7004095c72a2c7163ea864b601b7f9a8aa3b785.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 16c22e9..c5b3a2c 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1750409465-9e67437b0719922a4525a194a8564a9097743683-81b3d2d2ac50f0f4974adb3167f294917f8c4d8f.profdata +chrome-win64-main-1750517793-3f934026fd397ddd06c398a2e283242ef28d181d-b7004095c72a2c7163ea864b601b7f9a8aa3b785.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 3f099695..15b1187 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -660,6 +660,16 @@ &kGlicParameterizedShader, "glic-parameterized-shader-floats", ""}; BASE_FEATURE(kGlicMultiTab, "GlicMultiTab", base::FEATURE_DISABLED_BY_DEFAULT); + +BASE_FEATURE(kGlicTabFocusDataDedupDebounce, + "GlicTabFocusDataDedupDebounce", + base::FEATURE_ENABLED_BY_DEFAULT); +const base::FeatureParam<int> kGlicTabFocusDataDebounceDelayMs{ + &kGlicTabFocusDataDedupDebounce, "glic-tab-focus-data-debounce-delay-ms", + 5}; +const base::FeatureParam<int> kGlicTabFocusDataMaxDebounces{ + &kGlicTabFocusDataDedupDebounce, "glic-tab-focus-data-max-debounces", 5}; + #endif // BUILDFLAG(ENABLE_GLIC) // Force Privacy Guide to be available even if it would be unavailable
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index d6c7fd5..5103aaeb 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -375,6 +375,13 @@ COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kGlicMultiTab); + +COMPONENT_EXPORT(CHROME_FEATURES) +BASE_DECLARE_FEATURE(kGlicTabFocusDataDedupDebounce); +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::FeatureParam<int> kGlicTabFocusDataDebounceDelayMs; +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::FeatureParam<int> kGlicTabFocusDataMaxDebounces; #endif // BUILDFLAG(ENABLE_GLIC) COMPONENT_EXPORT(CHROME_FEATURES)
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 58a6a424..e523b31 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -345,6 +345,7 @@ if (is_android) { sources += [ "../browser/extensions/extension_browsertest_platform_delegate_android.cc" ] + deps += [ "../browser/ui/android/tab_model:test_support" ] } else { sources += [ "../browser/extensions/extension_browsertest_platform_delegate_non_android.cc" ] } @@ -8051,7 +8052,6 @@ "../browser/ui/toolbar/app_menu_icon_controller_unittest.cc", "../browser/ui/toolbar/app_menu_model_unittest.cc", "../browser/ui/toolbar/back_forward_menu_model_unittest.cc", - "../browser/ui/toolbar/chrome_labs/chrome_labs_model_unittest.cc", "../browser/ui/toolbar/location_bar_model_unittest.cc", "../browser/ui/toolbar/toolbar_actions_model_unittest.cc", "../browser/ui/url_identity_unittest.cc", @@ -8225,6 +8225,7 @@ "//chrome/browser/ui/tabs:tab_strip", "//chrome/browser/ui/tabs:test_support", "//chrome/browser/ui/tabs:unit_tests", + "//chrome/browser/ui/toolbar/chrome_labs:unit_tests", "//chrome/browser/ui/views/page_action:test_support", "//chrome/browser/ui/views/page_action:unit_tests", "//chrome/browser/ui/views/webid:test_support",
diff --git a/chrome/test/base/browser_with_test_window_test.cc b/chrome/test/base/browser_with_test_window_test.cc index dca0870..93af70f2 100644 --- a/chrome/test/base/browser_with_test_window_test.cc +++ b/chrome/test/base/browser_with_test_window_test.cc
@@ -303,7 +303,7 @@ params.type = browser_type; } params.window = browser_window; - return std::unique_ptr<Browser>(Browser::Create(params)); + return Browser::DeprecatedCreateOwnedForTesting(params); } #if BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/test/base/browser_with_test_window_test.h b/chrome/test/base/browser_with_test_window_test.h index fea7cbe..527a7f9 100644 --- a/chrome/test/base/browser_with_test_window_test.h +++ b/chrome/test/base/browser_with_test_window_test.h
@@ -146,7 +146,9 @@ BrowserWindow* window() const { return window_.get(); } Browser* browser() const { return browser_.get(); } - void set_browser(Browser* browser) { browser_.reset(browser); } + void set_browser(std::unique_ptr<Browser> browser) { + browser_ = std::move(browser); + } std::unique_ptr<Browser> release_browser() { return std::move(browser_); } TestingProfile* profile() const { return profile_.get(); }
diff --git a/chrome/test/base/test_browser_window.cc b/chrome/test/base/test_browser_window.cc index 64d7bf5..ca451a2 100644 --- a/chrome/test/base/test_browser_window.cc +++ b/chrome/test/base/test_browser_window.cc
@@ -42,7 +42,7 @@ params.initial_show_state != ui::mojom::WindowShowState::kDefault && params.initial_show_state != ui::mojom::WindowShowState::kMinimized); - return std::unique_ptr<Browser>(Browser::Create(params)); + return Browser::DeprecatedCreateOwnedForTesting(params); } // TestBrowserWindow::TestLocationBar -----------------------------------------
diff --git a/chrome/test/base/test_browser_window_aura.cc b/chrome/test/base/test_browser_window_aura.cc index 1f605cc..3d11648 100644 --- a/chrome/test/base/test_browser_window_aura.cc +++ b/chrome/test/base/test_browser_window_aura.cc
@@ -89,8 +89,9 @@ std::unique_ptr<Browser> TestBrowserWindowAura::CreateBrowser( Browser::CreateParams* params) { params->window = this; - browser_ = Browser::Create(*params); - return base::WrapUnique(browser_.get()); + auto browser = Browser::DeprecatedCreateOwnedForTesting(*params); + browser_ = browser.get(); + return browser; } TestBrowserWindowViews::TestBrowserWindowViews(aura::Window* parent) @@ -137,7 +138,7 @@ const Browser::CreateParams& params) { Browser::CreateParams params_copy = params; params_copy.window = this; - std::unique_ptr<Browser> browser(Browser::Create(params_copy)); + auto browser = Browser::DeprecatedCreateOwnedForTesting(params_copy); browser_ = browser.get(); return browser; }
diff --git a/chrome/test/data/glic/youtube_favicon_16x16.png b/chrome/test/data/glic/youtube_favicon_16x16.png new file mode 100644 index 0000000..e443304 --- /dev/null +++ b/chrome/test/data/glic/youtube_favicon_16x16.png Binary files differ
diff --git a/chrome/test/data/glic/youtube_favicon_32x32.png b/chrome/test/data/glic/youtube_favicon_32x32.png new file mode 100644 index 0000000..1c1d05b --- /dev/null +++ b/chrome/test/data/glic/youtube_favicon_32x32.png Binary files differ
diff --git a/chrome/test/data/glic/youtube_favicon_32x32_16bit_fp.png b/chrome/test/data/glic/youtube_favicon_32x32_16bit_fp.png new file mode 100644 index 0000000..684d797 --- /dev/null +++ b/chrome/test/data/glic/youtube_favicon_32x32_16bit_fp.png Binary files differ
diff --git a/chrome/test/data/glic/youtube_favicon_32x32_different_pixels.png b/chrome/test/data/glic/youtube_favicon_32x32_different_pixels.png new file mode 100644 index 0000000..bfb3fe8 --- /dev/null +++ b/chrome/test/data/glic/youtube_favicon_32x32_different_pixels.png Binary files differ
diff --git a/chrome/test/data/webui/glic/api_test.ts b/chrome/test/data/webui/glic/api_test.ts index 6c8bfbb1..33511b3b 100644 --- a/chrome/test/data/webui/glic/api_test.ts +++ b/chrome/test/data/webui/glic/api_test.ts
@@ -7,7 +7,7 @@ // --gn_target chrome/test/data/webui/glic:build_ts import {ScrollToErrorReason, WebClientMode} from '/glic/glic_api/glic_api.js'; -import type {GlicBrowserHost, GlicHostRegistry, GlicWebClient, Observable, OpenPanelInfo, PanelOpeningData, ScrollToError, Subscriber} from '/glic/glic_api/glic_api.js'; +import type {FocusedTabData, GlicBrowserHost, GlicHostRegistry, GlicWebClient, Observable, OpenPanelInfo, PanelOpeningData, ScrollToError, Subscriber} from '/glic/glic_api/glic_api.js'; import {ObservableValue} from '/glic/observable.js'; import {createGlicHostRegistryOnLoad} from './api_boot.js'; @@ -33,7 +33,9 @@ this.subscriber = observable.subscribe(this.change.bind(this)); } next(): Promise<T> { - return this.getSignal(this.readIndex++).promise; + // Wrapping the returned value with `waitFor` improves failure logs + // on timeout. + return waitFor(this.getSignal(this.readIndex++).promise); } isEmpty(): boolean { return this.readIndex === this.writeIndex; @@ -338,7 +340,8 @@ async testGetFocusedTabStateV2() { assertTrue(!!this.host.getFocusedTabStateV2); - const sequence = observeSequence(this.host.getFocusedTabStateV2()); + const sequence = + observeSequence<FocusedTabData>(this.host.getFocusedTabStateV2()); const focus = await sequence.next(); assertTrue(!!focus.hasFocus); assertTrue( @@ -351,7 +354,8 @@ async testGetFocusedTabStateV2WithNavigation() { // Initial state. assertTrue(!!this.host.getFocusedTabStateV2); - const sequence = observeSequence(this.host.getFocusedTabStateV2()); + const sequence = + observeSequence<FocusedTabData>(this.host.getFocusedTabStateV2()); const focus = await sequence.next(); assertTrue(!!focus.hasFocus); assertTrue( @@ -394,7 +398,8 @@ // Initial state. assertTrue(!!this.host.getFocusedTabStateV2); await this.closePanelAndWaitUntilInactive(); - const sequence = observeSequence(this.host.getFocusedTabStateV2()); + const sequence = + observeSequence<FocusedTabData>(this.host.getFocusedTabStateV2()); const focus = await sequence.next(); assertTrue(!!focus.hasFocus); assertTrue( @@ -437,9 +442,60 @@ assertFalse(!!focus2.hasNoFocus); } + async testSingleFocusedTabUpdatesOnTabEvents() { + assertTrue(!!this.host.getFocusedTabStateV2); + const sequence = + observeSequence<FocusedTabData>(this.host.getFocusedTabStateV2()); + // Check events from first tab. + { + const focus = await sequence.next(); + assertTrue( + !!focus.hasFocus, + `#1: should have a focused tab; FocusedTabData=${ + JSON.stringify(focus)}`); + assertTrue( + !!focus.hasFocus?.tabData.url.endsWith('glic/test.html'), + `#1: Unexpected URL; FocusedTabData=${JSON.stringify(focus)}`); + assertTrue( + sequence.isEmpty(), '#1: Spurious updates after first tab opened'); + } + + // After a navigation occurs in the first tab. + { + await this.advanceToNextStep(); + const focus = await sequence.next(); + assertTrue( + !!focus.hasFocus, + `#2: should have a focused tab; FocusedTabData=${ + JSON.stringify(focus)}`); + assertTrue( + !!focus.hasFocus?.tabData.url.endsWith( + 'scrollable_page_with_content.html'), + `#2: Unexpected URL; FocusedTabData=${JSON.stringify(focus)}`); + assertTrue( + sequence.isEmpty(), '#2: Spurious updates after first tab navigated'); + } + + // A new tab is opened and navigated. + { + await this.advanceToNextStep(); + const focus = await sequence.next(); + assertTrue( + !!focus.hasFocus, + `#3: should have a focused tab; FocusedTabData=${ + JSON.stringify(focus)}`); + assertTrue( + !!focus.hasFocus?.tabData.url.endsWith('glic/test.html'), + `#3: Unexpected URL; FocusedTabData=${JSON.stringify(focus)}`); + assertTrue( + sequence.isEmpty(), '#3: Spurious updates after a new tab opened'); + } + } + async testGetFocusedTabStateV2BrowserClosed() { assertTrue(!!this.host.getFocusedTabStateV2); - const sequence = observeSequence(this.host.getFocusedTabStateV2()); + const sequence = + observeSequence<FocusedTabData>(this.host.getFocusedTabStateV2()); // Ignore the initial focus. await sequence.next(); const focus = await sequence.next(); @@ -954,7 +1010,7 @@ // Initial state. assertTrue(!!this.host.getFocusedTabStateV2); const focusedTabStateV2Sequence = - observeSequence(this.host.getFocusedTabStateV2()); + observeSequence<FocusedTabData>(this.host.getFocusedTabStateV2()); let focusedTabState = await focusedTabStateV2Sequence.next(); assertTrue(!!focusedTabState.hasNoFocus); const tabStatePromise = focusedTabStateV2Sequence.next();
diff --git a/chrome/test/data/webui/settings/clear_browsing_data_dialog_v2_test.ts b/chrome/test/data/webui/settings/clear_browsing_data_dialog_v2_test.ts index 9b6d54e30..4bf0656ca 100644 --- a/chrome/test/data/webui/settings/clear_browsing_data_dialog_v2_test.ts +++ b/chrome/test/data/webui/settings/clear_browsing_data_dialog_v2_test.ts
@@ -145,6 +145,7 @@ assertTrue(dialog.$.deleteButton.disabled); assertFalse(dialog.$.cancelButton.disabled); assertFalse(isVisible(dialog.$.spinner)); + assertEquals('', dialog.$.deletingDataAlert.innerText.trim()); // Verify that checkboxes in the expanded and more lists are initially // enabled. @@ -176,6 +177,9 @@ assertTrue(dialog.$.deleteButton.disabled); assertTrue(dialog.$.cancelButton.disabled); assertTrue(isVisible(dialog.$.spinner)); + assertEquals( + loadTimeData.getString('clearingData'), + dialog.$.deletingDataAlert.innerText.trim()); assertTrue(historyCheckbox.$.checkbox.disabled); assertTrue(formDataCheckbox.$.checkbox.disabled); @@ -482,7 +486,7 @@ // Clear previous restartCounters calls. testClearBrowsingDataBrowserProxy.reset(); - // Set the SyncStatus TimePeriod to signed-in. + // Set the SyncStatus to signed-in. webUIListenerCallback('sync-status-changed', { signedInState: SignedInState.SIGNED_IN, });
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index ed26639..a8fd679d9 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -16324.0.0-1069713 \ No newline at end of file +16326.0.0-1069751 \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb index 92228bf..73b765b1 100644 --- a/chromeos/strings/chromeos_strings_es.xtb +++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -757,6 +757,7 @@ <translation id="430786093962686457">gasa</translation> <translation id="4310735698903592804">Fondos de pantalla recientes creados con la tecnología de la IA de Google</translation> <translation id="4320904097188876154">rosa neón</translation> +<translation id="432961742358282111">Haz clic con el botón derecho o mantén pulsado para consultar definiciones, traducciones o conversiones de unidades. Usa las teclas de flecha hacia la izquierda y derecha para gestionar esta función.</translation> <translation id="4333390807948134856">Tecla <ph name="KEY_NAME" /> pulsada</translation> <translation id="4334293042716981313">También puedes <ph name="BEGIN_LINK_FREEFORM_SUBPAGE" />escribir tu propia petición<ph name="END_LINK_FREEFORM_SUBPAGE" /></translation> <translation id="4354430579665871434">tecla</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb index 5b6a750..3d62278 100644 --- a/chromeos/strings/chromeos_strings_et.xtb +++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -757,6 +757,7 @@ <translation id="430786093962686457">šifoonist</translation> <translation id="4310735698903592804">Google'i AI platvormil toimivad hiljutised taustapildid</translation> <translation id="4320904097188876154">neoonroosades toonides</translation> +<translation id="432961742358282111">Definitsioonide hankimiseks, tõlkimiseks või ühikute teisendamiseks paremklõpsake või puudutage pikalt. Kasutage selle funktsiooni haldamiseks vasak- või paremnooleklahvi.</translation> <translation id="4333390807948134856">Klahv <ph name="KEY_NAME" /> on alla vajutatud</translation> <translation id="4334293042716981313">Võite ka <ph name="BEGIN_LINK_FREEFORM_SUBPAGE" />kirjutada ise oma viiba<ph name="END_LINK_FREEFORM_SUBPAGE" /></translation> <translation id="4354430579665871434">klahv</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb index 426a89c5..fc9cd8f 100644 --- a/chromeos/strings/chromeos_strings_km.xtb +++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -757,6 +757,7 @@ <translation id="430786093962686457">ឈីហ្វន</translation> <translation id="4310735698903592804">ផ្ទាំងរូបភាពថ្មីៗដែលដំណើរការដោយ Google AI</translation> <translation id="4320904097188876154">ផ្កាឈូកណេអុង</translation> +<translation id="432961742358282111">ចុចម៉ៅស៍ខាងស្ដាំ ឬចុចឱ្យជាប់ ដើម្បីទទួលបាននិយមន័យ ការបកប្រែ ឬការបំប្លែងខ្នាត។ ប្រើគ្រាប់ចុចព្រួញទៅស្ដាំ ឬឆ្វេង ដើម្បីគ្រប់គ្រងមុខងារនេះ។</translation> <translation id="4333390807948134856">បានចុចគ្រាប់ចុច <ph name="KEY_NAME" /></translation> <translation id="4334293042716981313">អ្នកក៏អាច<ph name="BEGIN_LINK_FREEFORM_SUBPAGE" />សរសេរសារតម្រុយរបស់អ្នកផ្ទាល់<ph name="END_LINK_FREEFORM_SUBPAGE" />ផងដែរ</translation> <translation id="4354430579665871434">គ្រាប់ចុច</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb index 6e531e79..c87cff2 100644 --- a/chromeos/strings/chromeos_strings_pt-PT.xtb +++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -757,6 +757,7 @@ <translation id="430786093962686457">chiffon</translation> <translation id="4310735698903592804">Imagens de fundo recentes com tecnologia de IA da Google</translation> <translation id="4320904097188876154">rosa fluorescente</translation> +<translation id="432961742358282111">Clique com o botão direito do rato ou prima sem soltar para ver definições, traduções ou conversões de unidades. Use as teclas de seta para a esquerda ou para a direita para gerir esta funcionalidade.</translation> <translation id="4333390807948134856">Tecla <ph name="KEY_NAME" /> pressionada</translation> <translation id="4334293042716981313">Também pode <ph name="BEGIN_LINK_FREEFORM_SUBPAGE" />escrever o seu próprio comando<ph name="END_LINK_FREEFORM_SUBPAGE" /></translation> <translation id="4354430579665871434">tecla</translation>
diff --git a/clank b/clank index 4730f3c..d359660 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit 4730f3cb56f9907131c3de8b318b4300b39d3e3d +Subproject commit d359660aab561909da606d2e9c3d4f688747b621
diff --git a/components/BUILD.gn b/components/BUILD.gn index 28304e4..5a700d0 100644 --- a/components/BUILD.gn +++ b/components/BUILD.gn
@@ -1054,6 +1054,7 @@ "dom_distiller/content/browser/test/test_util.cc", "dom_distiller/content/browser/test/test_util.h", "optimization_guide/content/browser/page_content_proto_provider_browsertest.cc", + "optimization_guide/content/browser/frame_metadata_observer_browsertest.cc", "optimization_guide/content/renderer/page_text_agent_browsertest.cc", "paint_preview/renderer/paint_preview_recorder_browsertest.cc", "ukm/content/source_url_recorder_browsertest.cc",
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 9c99ed88..f0dc7a0 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "55.11", - "log_list_timestamp": "2025-06-20T12:54:38Z", + "version": "57.1", + "log_list_timestamp": "2025-06-21T20:01:00Z", "operators": [ { "name": "Google", @@ -714,6 +714,83 @@ } ], "tiled_logs": [] + }, + { + "name": "Geomys", + "email": [ + "ct@geomys.org" + ], + "logs": [ + { + "description": "Bogus placeholder log to unbreak misbehaving CT libraries", + "log_id": "LtakTeuPDIZGZ3acTt0EH4QjZ1X6OqymNNCTXfzVmnA=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEj4lCAxWCY6SzIthkqZhwiUVzcK62i6Fc+/YS0WHaN6jjO1ITUFuu8beOiU9PdeNmdalZcC3iWovAfApvXS33Nw==", + "url": "https://ct.example.com/bogus/", + "mmd": 86400, + "state": { + "retired": { + "timestamp": "2025-06-21T07:00:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2020-01-01T08:00:00Z", + "end_exclusive": "2020-01-02T08:00:00Z" + } + } + ], + "tiled_logs": [ + { + "description": "Geomys 'Tuscolo2025h2'", + "log_id": "750EQi4gtDIQJ1TfUtJRRgJ/hEwH/YZeySLub86fe7w=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEK9d4GGtzbkwwsYpEtvnU9KKgZr67MsGlB7mnF8DW9bHnngHzPzXPbdo7n+FyCwSDYqEHbal1Z0CCVyZD6wQ/ow==", + "submission_url": "https://tuscolo2025h2.sunlight.geomys.org/", + "monitoring_url": "https://tuscolo2025h2.skylight.geomys.org/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-06-13T02:40:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2025-07-01T00:00:00Z", + "end_exclusive": "2026-01-01T00:00:00Z" + } + }, + { + "description": "Geomys 'Tuscolo2026h1'", + "log_id": "cX6V88I4im2x44RJPTHhWqliCHYtQgDgBQzQZ7WmYeI=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEflxzMg2Ajjg7h1+ZIvQ9LV6yFvdj6uRi9YbvtRnSCgS2SamkH56WcPRaBTRYARPDIr5JwLqgJAVA/NvDxdJXOw==", + "submission_url": "https://tuscolo2026h1.sunlight.geomys.org/", + "monitoring_url": "https://tuscolo2026h1.skylight.geomys.org/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-06-13T02:40:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-01-01T00:00:00Z", + "end_exclusive": "2026-07-01T00:00:00Z" + } + }, + { + "description": "Geomys 'Tuscolo2026h2'", + "log_id": "Rq+GPTs+5Z+ld96oJF02sNntIqIj9GF3QSKUUu6VUF8=", + "key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaA6P0i7JTsd9XfzF1/76avRWA3XXI4NStsFO/aFtBp6SY7olDEMiPSFSxGzFQjKA1r9vgG/oFQwurlWMy9FQNw==", + "submission_url": "https://tuscolo2026h2.sunlight.geomys.org/", + "monitoring_url": "https://tuscolo2026h2.skylight.geomys.org/", + "mmd": 60, + "state": { + "qualified": { + "timestamp": "2025-06-13T02:40:00Z" + } + }, + "temporal_interval": { + "start_inclusive": "2026-07-01T00:00:00Z", + "end_exclusive": "2027-01-01T00:00:00Z" + } + } + ] } ] }
diff --git a/components/lens/BUILD.gn b/components/lens/BUILD.gn index 355e7db..cbdd847 100644 --- a/components/lens/BUILD.gn +++ b/components/lens/BUILD.gn
@@ -33,6 +33,8 @@ "lens_overlay_side_panel_menu_option.h", "lens_overlay_side_panel_result.h", "lens_permission_user_action.h", + "lens_request_construction.cc", + "lens_request_construction.h", "lens_testing_utils.cc", "lens_testing_utils.h", "lens_url_utils.cc", @@ -42,6 +44,8 @@ "//base:base", "//components/lens:lens_mojo", "//components/lens/proto/v1:lens_latencies_metadata_proto", + "//components/signin/public/identity_manager", + "//google_apis/common", "//net", "//services/metrics/public/cpp:metrics_cpp", "//services/metrics/public/cpp:ukm_builders",
diff --git a/components/lens/DEPS b/components/lens/DEPS index 3e04144..9afd5a4 100644 --- a/components/lens/DEPS +++ b/components/lens/DEPS
@@ -1,9 +1,11 @@ include_rules = [ "+components/prefs", + "+components/signin/public/identity_manager", "+components/sync", "+components/sync_preferences", "+components/unified_consent", + "+google_apis", "+net", "+services/metrics/public/cpp", "+ui/gfx/geometry/size_f.h", -] +] \ No newline at end of file
diff --git a/components/lens/lens_request_construction.cc b/components/lens/lens_request_construction.cc new file mode 100644 index 0000000..ac732d1e --- /dev/null +++ b/components/lens/lens_request_construction.cc
@@ -0,0 +1,35 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/lens/lens_request_construction.h" + +#include "base/strings/stringprintf.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "google_apis/common/api_error_codes.h" +#include "google_apis/gaia/gaia_constants.h" +#include "google_apis/gaia/gaia_urls.h" +#include "google_apis/gaia/google_service_auth_error.h" +#include "google_apis/google_api_keys.h" +#include "net/base/url_util.h" +#include "net/http/http_request_headers.h" + +namespace lens { +constexpr char kDeveloperKey[] = "X-Developer-Key"; + +// TODO(crbug.com/424869589): Clean up code duplication with +// LensOverlayQueryController. +std::vector<std::string> CreateOAuthHeader( + GoogleServiceAuthError error, + signin::AccessTokenInfo access_token_info) { + std::vector<std::string> headers; + if (error.state() == GoogleServiceAuthError::NONE) { + headers.push_back(kDeveloperKey); + headers.push_back(GaiaUrls::GetInstance()->oauth2_chrome_client_id()); + headers.push_back(net::HttpRequestHeaders::kAuthorization); + headers.push_back( + base::StringPrintf("Bearer %s", access_token_info.token.c_str())); + } + return headers; +} +} // namespace lens
diff --git a/components/lens/lens_request_construction.h b/components/lens/lens_request_construction.h new file mode 100644 index 0000000..645fca6 --- /dev/null +++ b/components/lens/lens_request_construction.h
@@ -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. + +#ifndef COMPONENTS_LENS_LENS_REQUEST_CONSTRUCTION_H_ +#define COMPONENTS_LENS_LENS_REQUEST_CONSTRUCTION_H_ + +#include <string> +#include <vector> + +namespace signin { +struct AccessTokenInfo; +} // namespace signin + +class GoogleServiceAuthError; + +namespace lens { + +// Creates the OAuth headers for Lens requests. +std::vector<std::string> CreateOAuthHeader( + GoogleServiceAuthError error, + signin::AccessTokenInfo access_token_info); + +} // namespace lens + +#endif // COMPONENTS_LENS_LENS_REQUEST_CONSTRUCTION_H_
diff --git a/components/omnibox/browser/actions/contextual_search_action.cc b/components/omnibox/browser/actions/contextual_search_action.cc index 8ec5252..db47acd 100644 --- a/components/omnibox/browser/actions/contextual_search_action.cc +++ b/components/omnibox/browser/actions/contextual_search_action.cc
@@ -112,7 +112,7 @@ void StarterPackBookmarksAction::Execute(ExecutionContext& context) const { context.enter_starter_pack_id_ = - TemplateURLStarterPackData::StarterPackID::kBookmarks; + template_url_starter_pack_data::StarterPackId::kBookmarks; } #if defined(SUPPORT_PEDALS_VECTOR_ICONS) @@ -139,7 +139,7 @@ void StarterPackHistoryAction::Execute(ExecutionContext& context) const { context.enter_starter_pack_id_ = - TemplateURLStarterPackData::StarterPackID::kHistory; + template_url_starter_pack_data::StarterPackId::kHistory; } #if defined(SUPPORT_PEDALS_VECTOR_ICONS) @@ -166,7 +166,7 @@ void StarterPackTabsAction::Execute(ExecutionContext& context) const { context.enter_starter_pack_id_ = - TemplateURLStarterPackData::StarterPackID::kTabs; + template_url_starter_pack_data::StarterPackId::kTabs; } #if defined(SUPPORT_PEDALS_VECTOR_ICONS)
diff --git a/components/omnibox/browser/actions/omnibox_action.h b/components/omnibox/browser/actions/omnibox_action.h index 3a43b53..cae1cef 100644 --- a/components/omnibox/browser/actions/omnibox_action.h +++ b/components/omnibox/browser/actions/omnibox_action.h
@@ -149,10 +149,11 @@ base::TimeTicks match_selection_timestamp_; WindowOpenDisposition disposition_; - // When this is set to a nonzero StarterPackID, the omnibox will transition - // to the given starter pack's keyword mode after execution completes. - // An ID is used instead of a keyword string because keywords may change and - // template URLs may become unavailable, but the IDs remain constant. + // When this is set to a nonzero `StarterPackId`, the omnibox will + // transition to the given starter pack's keyword mode after execution + // completes. An ID is used instead of a keyword string because keywords may + // change and template URLs may become unavailable, but the IDs remain + // constant. int enter_starter_pack_id_; };
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc index 5a33595..dcb8d0f 100644 --- a/components/omnibox/browser/autocomplete_controller.cc +++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -1043,7 +1043,8 @@ // Append an extra header to navigations from the @gemini scope. const TemplateURL* turl = match->GetTemplateURL(template_url_service_, false); - if (turl && turl->starter_pack_id() == TemplateURLStarterPackData::kGemini && + if (turl && + turl->starter_pack_id() == template_url_starter_pack_data::kGemini && !encoded_search_terms.empty() && net::HttpUtil::IsValidHeaderValue(encoded_search_terms)) { DCHECK(net::HttpUtil::IsValidHeaderName(kOmniboxGeminiHeader)); @@ -1132,7 +1133,7 @@ keyword_turl->policy_origin() == TemplateURLData::PolicyOrigin::kSearchAggregator)) { if (keyword_turl->starter_pack_id() == - TemplateURLStarterPackData::kPage) { + template_url_starter_pack_data::kPage) { return provider->type() == AutocompleteProvider::TYPE_CONTEXTUAL_SEARCH; } switch (provider->type()) { @@ -1150,7 +1151,7 @@ // @Bookmarks starter pack scope - run only the bookmarks provider. case AutocompleteProvider::TYPE_BOOKMARK: return (keyword_turl->starter_pack_id() == - TemplateURLStarterPackData::kBookmarks); + template_url_starter_pack_data::kBookmarks); // @History starter pack scope - run the history providers & featured // search for embeddings IPH suggestions. @@ -1159,12 +1160,12 @@ case AutocompleteProvider::TYPE_HISTORY_EMBEDDINGS: case AutocompleteProvider::TYPE_FEATURED_SEARCH: return (keyword_turl->starter_pack_id() == - TemplateURLStarterPackData::kHistory); + template_url_starter_pack_data::kHistory); // @Tabs starter pack scope - run the open tab provider. case AutocompleteProvider::TYPE_OPEN_TAB: return (keyword_turl->starter_pack_id() == - TemplateURLStarterPackData::kTabs); + template_url_starter_pack_data::kTabs); case AutocompleteProvider::TYPE_ENTERPRISE_SEARCH_AGGREGATOR: return keyword_turl->policy_origin() == @@ -1245,7 +1246,8 @@ // Skip search term replacement when in the @gemini scope. // TODO(crbug.com/41494524): Replace this logic with a proper fix to support // keywords that do not do search term replacement in omnibox. - if (template_url->starter_pack_id() == TemplateURLStarterPackData::kGemini) { + if (template_url->starter_pack_id() == + template_url_starter_pack_data::kGemini) { return GURL(OmniboxFieldTrial::kGeminiUrlOverride.Get()); } @@ -1699,7 +1701,8 @@ template_url_service_, &keyword_input); // Attach the contextual search fulfillment actions in the @page keyword // mode. - if (keyword_turl->starter_pack_id() == TemplateURLStarterPackData::kPage) { + if (keyword_turl->starter_pack_id() == + template_url_starter_pack_data::kPage) { internal_result_.AttachContextualSearchFulfillmentActionToMatches(); return; }
diff --git a/components/omnibox/browser/autocomplete_controller_unittest.cc b/components/omnibox/browser/autocomplete_controller_unittest.cc index 7a7cfbd..099c487 100644 --- a/components/omnibox/browser/autocomplete_controller_unittest.cc +++ b/components/omnibox/browser/autocomplete_controller_unittest.cc
@@ -2165,7 +2165,8 @@ } // Populate template URL service with starter pack entries. - for (auto& turl_data : TemplateURLStarterPackData::GetStarterPackEngines()) { + for (auto& turl_data : + template_url_starter_pack_data::GetStarterPackEngines()) { controller_.template_url_service_->Add( std::make_unique<TemplateURL>(std::move(*turl_data))); } @@ -2267,7 +2268,7 @@ // Populate template URL service with starter pack entries. std::vector<std::unique_ptr<TemplateURLData>> turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); for (auto& turl : turls) { controller_.template_url_service_->Add( std::make_unique<TemplateURL>(std::move(*turl))); @@ -2677,7 +2678,8 @@ EXPECT_NE(nullptr, provider_client()->GetPedalProvider()); // Populate template URL service with starter pack entries. - for (auto& turl_data : TemplateURLStarterPackData::GetStarterPackEngines()) { + for (auto& turl_data : + template_url_starter_pack_data::GetStarterPackEngines()) { controller_.template_url_service_->Add( std::make_unique<TemplateURL>(std::move(*turl_data))); }
diff --git a/components/omnibox/browser/autocomplete_match.cc b/components/omnibox/browser/autocomplete_match.cc index 859d2bb..24a1f250 100644 --- a/components/omnibox/browser/autocomplete_match.cc +++ b/components/omnibox/browser/autocomplete_match.cc
@@ -1327,21 +1327,21 @@ } int message_id; switch (template_url->starter_pack_id()) { - case TemplateURLStarterPackData::kBookmarks: + case template_url_starter_pack_data::kBookmarks: message_id = IDS_OMNIBOX_BOOKMARKS_SCOPE_PLACEHOLDER_TEXT; break; - case TemplateURLStarterPackData::kHistory: + case template_url_starter_pack_data::kHistory: message_id = is_history_embeddings_enabled ? IDS_OMNIBOX_HISTORY_EMBEDDINGS_SCOPE_PLACEHOLDER_TEXT : IDS_OMNIBOX_HISTORY_SCOPE_PLACEHOLDER_TEXT; break; - case TemplateURLStarterPackData::kTabs: + case template_url_starter_pack_data::kTabs: message_id = IDS_OMNIBOX_TABS_SCOPE_PLACEHOLDER_TEXT; break; - case TemplateURLStarterPackData::kGemini: + case template_url_starter_pack_data::kGemini: message_id = IDS_OMNIBOX_GEMINI_SCOPE_PLACEHOLDER_TEXT; break; - case TemplateURLStarterPackData::kPage: + case template_url_starter_pack_data::kPage: message_id = IDS_OMNIBOX_PAGE_SCOPE_PLACEHOLDER_TEXT; break; default:
diff --git a/components/omnibox/browser/autocomplete_match_unittest.cc b/components/omnibox/browser/autocomplete_match_unittest.cc index 9d69ffc..7803fb8 100644 --- a/components/omnibox/browser/autocomplete_match_unittest.cc +++ b/components/omnibox/browser/autocomplete_match_unittest.cc
@@ -1114,8 +1114,8 @@ if (match.type == AutocompleteMatchType::STARTER_PACK) { // All STARTER_PACK suggestions should have non-empty vector icons. - for (int starter_pack_id = TemplateURLStarterPackData::kBookmarks; - starter_pack_id != TemplateURLStarterPackData::kMaxStarterPackID; + for (int starter_pack_id = template_url_starter_pack_data::kBookmarks; + starter_pack_id != template_url_starter_pack_data::kMaxStarterPackId; starter_pack_id++) { TemplateURLData turl_data; turl_data.starter_pack_id = starter_pack_id;
diff --git a/components/omnibox/browser/bookmark_provider_unittest.cc b/components/omnibox/browser/bookmark_provider_unittest.cc index 5823e7a..86bcbaf 100644 --- a/components/omnibox/browser/bookmark_provider_unittest.cc +++ b/components/omnibox/browser/bookmark_provider_unittest.cc
@@ -554,7 +554,7 @@ TEST_F(BookmarkProviderTest, KeywordModeExtractUserInput) { // Populate template URL with starter pack entries std::vector<std::unique_ptr<TemplateURLData>> turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); for (auto& turl : turls) { provider_client_->GetTemplateURLService()->Add( std::make_unique<TemplateURL>(std::move(*turl)));
diff --git a/components/omnibox/browser/contextual_search_provider.cc b/components/omnibox/browser/contextual_search_provider.cc index bc10c29..5ff9adf 100644 --- a/components/omnibox/browser/contextual_search_provider.cc +++ b/components/omnibox/browser/contextual_search_provider.cc
@@ -105,33 +105,30 @@ // matches the behavior of the `ZeroSuggestProvider`. Stop(AutocompleteStopReason::kClobbered); - if (client()->IsOffTheRecord()) { - done_ = true; - return; - } - const auto [input, starter_pack_engine] = AdjustInputForStarterPackKeyword( autocomplete_input, client()->GetTemplateURLService()); const bool toolbelted = MaybeAddToolbeltMatch(input, starter_pack_engine); - if (!starter_pack_engine) { - // Note, the dedicated entrypoint match is not added if the toolbelt is - // included because the toolbelt will already have an action to serve - // as the Lens entrypoint. - if (!toolbelted && IsLensEntrypointAvailable(input, client())) { - AddLensEntrypointMatch(input); - } + + // Note, the dedicated entrypoint match is not added if the toolbelt is + // included because the toolbelt will already have an action to serve as the + // Lens entrypoint. + if (!starter_pack_engine && !toolbelted && + IsLensEntrypointAvailable(input, client())) { + AddLensEntrypointMatch(input); + } + + if (!starter_pack_engine || client()->IsOffTheRecord()) { return; } + input_keyword_ = starter_pack_engine->keyword(); - AddDefaultVerbatimMatch(input); - // Exit early if the input is not in ZPS keyword mode or the autocomplete // input is not allowed to make asynchronous requests. if (!input.text().empty() || autocomplete_input.omit_asynchronous_matches()) { - done_ = true; return; } + done_ = false; StartSuggestRequest(std::move(input)); } @@ -390,6 +387,10 @@ bool ContextualSearchProvider::MaybeAddToolbeltMatch( const AutocompleteInput& input, const TemplateURL* input_starter_pack_engine) { + if (input.current_page_classification() == + metrics::OmniboxEventProto::NTP_REALBOX) { + return false; + } const auto& config = omnibox_feature_configs::Toolbelt::Get(); if (!config.enabled || (!config.keep_toolbelt_after_input && !input.IsZeroSuggest())) { @@ -437,15 +438,15 @@ }; if (config.show_history_action) { check_and_add.operator()<StarterPackHistoryAction>( - TemplateURLStarterPackData::StarterPackID::kHistory); + template_url_starter_pack_data::StarterPackId::kHistory); } if (config.show_bookmarks_action) { check_and_add.operator()<StarterPackBookmarksAction>( - TemplateURLStarterPackData::StarterPackID::kBookmarks); + template_url_starter_pack_data::StarterPackId::kBookmarks); } if (config.show_tabs_action) { check_and_add.operator()<StarterPackTabsAction>( - TemplateURLStarterPackData::StarterPackID::kTabs); + template_url_starter_pack_data::StarterPackId::kTabs); } matches_.push_back(match); return true;
diff --git a/components/omnibox/browser/featured_search_provider.cc b/components/omnibox/browser/featured_search_provider.cc index fd08947..895d3a8 100644 --- a/components/omnibox/browser/featured_search_provider.cc +++ b/components/omnibox/browser/featured_search_provider.cc
@@ -71,20 +71,20 @@ // Returns relevance for starter pack suggestions. int StarterPackRelevance( - TemplateURLStarterPackData::StarterPackID starter_pack_id) { + template_url_starter_pack_data::StarterPackId starter_pack_id) { // TODO(crbug.com/421415393) 1460 reserved for ai mode starter pack. switch (starter_pack_id) { - case TemplateURLStarterPackData::StarterPackID::kGemini: + case template_url_starter_pack_data::StarterPackId::kGemini: return 1459; - case TemplateURLStarterPackData::StarterPackID::kHistory: + case template_url_starter_pack_data::StarterPackId::kHistory: return 1458; - case TemplateURLStarterPackData::StarterPackID::kBookmarks: + case template_url_starter_pack_data::StarterPackId::kBookmarks: return 1457; - case TemplateURLStarterPackData::StarterPackID::kPage: + case template_url_starter_pack_data::StarterPackId::kPage: return 1456; - case TemplateURLStarterPackData::StarterPackID::kTabs: + case template_url_starter_pack_data::StarterPackId::kTabs: return 1455; - case TemplateURLStarterPackData::StarterPackID::kMaxStarterPackID: + case template_url_starter_pack_data::StarterPackId::kMaxStarterPackId: break; } // Can occur when syncing between different chrome versions. @@ -94,7 +94,8 @@ // Returns description for starter pack suggestions. std::u16string StarterPackDescription(const AutocompleteInput& input, const TemplateURL& template_url) { - if (template_url.starter_pack_id() == TemplateURLStarterPackData::kGemini) { + if (template_url.starter_pack_id() == + template_url_starter_pack_data::kGemini) { return l10n_util::GetStringFUTF16(IDS_OMNIBOX_INSTANT_KEYWORD_ASK_TEXT, template_url.keyword(), template_url.short_name()); @@ -199,8 +200,8 @@ AutocompleteInput::GetSubstitutingTemplateURLForInput( template_url_service_, &keyword_input); bool is_history_scope = - keyword_turl && - keyword_turl->starter_pack_id() == TemplateURLStarterPackData::kHistory; + keyword_turl && keyword_turl->starter_pack_id() == + template_url_starter_pack_data::kHistory; if (is_history_scope) { if (ShouldShowHistoryEmbeddingsDisclaimerIphMatch()) { @@ -290,16 +291,16 @@ turl->is_active() == TemplateURLData::ActiveStatus::kTrue) { // Don't add the expanded set of starter pack engines unless the feature // is enabled. - if ((turl->starter_pack_id() == TemplateURLStarterPackData::kGemini && + if ((turl->starter_pack_id() == template_url_starter_pack_data::kGemini && !OmniboxFieldTrial::IsStarterPackExpansionEnabled()) || - (turl->starter_pack_id() == TemplateURLStarterPackData::kPage && + (turl->starter_pack_id() == template_url_starter_pack_data::kPage && !omnibox_feature_configs::ContextualSearch::Get() .starter_pack_page)) { continue; } // The history starter pack engine is disabled in incognito mode. if (client_->IsOffTheRecord() && - turl->starter_pack_id() == TemplateURLStarterPackData::kHistory) { + turl->starter_pack_id() == template_url_starter_pack_data::kHistory) { continue; } AddStarterPackMatch(*turl, input); @@ -326,12 +327,12 @@ AutocompleteMatch match( this, StarterPackRelevance( - static_cast<TemplateURLStarterPackData::StarterPackID>( + static_cast<template_url_starter_pack_data::StarterPackId>( template_url.starter_pack_id())), false, AutocompleteMatchType::STARTER_PACK); const std::u16string destination_url = - TemplateURLStarterPackData::GetDestinationUrlForStarterPackID( + template_url_starter_pack_data::GetDestinationUrlForStarterPackId( template_url.starter_pack_id()); match.fill_into_edit = template_url.keyword(); if (match.fill_into_edit.starts_with(input.text())) { @@ -445,7 +446,7 @@ // The @gemini IPH should no longer be shown once a user has successfully // used @gemini. TemplateURL* gemini_turl = template_url_service_->FindStarterPackTemplateURL( - TemplateURLStarterPackData::kGemini); + template_url_starter_pack_data::kGemini); if (gemini_turl && gemini_turl->usage_count() > 0) { return false; }
diff --git a/components/omnibox/browser/featured_search_provider_unittest.cc b/components/omnibox/browser/featured_search_provider_unittest.cc index ee8256ec..0627453 100644 --- a/components/omnibox/browser/featured_search_provider_unittest.cc +++ b/components/omnibox/browser/featured_search_provider_unittest.cc
@@ -46,13 +46,15 @@ constexpr char16_t kGeminiKeyword[] = u"@gemini"; const std::string kBookmarksUrl = - TemplateURLStarterPackData::bookmarks.destination_url; + template_url_starter_pack_data::bookmarks.destination_url; const std::string kHistoryUrl = - TemplateURLStarterPackData::history.destination_url; -const std::string kTabsUrl = TemplateURLStarterPackData::tabs.destination_url; + template_url_starter_pack_data::history.destination_url; +const std::string kTabsUrl = + template_url_starter_pack_data::tabs.destination_url; const std::string kGeminiUrl = - TemplateURLStarterPackData::Gemini.destination_url; -const std::string kPageUrl = TemplateURLStarterPackData::page.destination_url; + template_url_starter_pack_data::gemini.destination_url; +const std::string kPageUrl = + template_url_starter_pack_data::page.destination_url; struct TestData { const std::u16string input; @@ -147,7 +149,7 @@ // Populate the TemplateURLService with starter pack entries. void AddStarterPackEntriesToTemplateUrlService() { std::vector<std::unique_ptr<TemplateURLData>> turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); for (auto& turl : turls) { client_->GetTemplateURLService()->Add( std::make_unique<TemplateURL>(std::move(*turl))); @@ -305,7 +307,7 @@ provider_->Start(input, false); EXPECT_TRUE(provider_->done()); ACMatches matches = provider_->matches(); - ASSERT_EQ(TemplateURLStarterPackData::GetStarterPackEngines().size(), + ASSERT_EQ(template_url_starter_pack_data::GetStarterPackEngines().size(), matches.size()); // Sort the matches according to relevances (in descending order), and make
diff --git a/components/omnibox/browser/history_quick_provider_unittest.cc b/components/omnibox/browser/history_quick_provider_unittest.cc index 37e6086..8e8da7f 100644 --- a/components/omnibox/browser/history_quick_provider_unittest.cc +++ b/components/omnibox/browser/history_quick_provider_unittest.cc
@@ -924,7 +924,7 @@ TEST_F(HistoryQuickProviderTest, KeywordModeExtractUserInput) { // Populate template URL with starter pack entries std::vector<std::unique_ptr<TemplateURLData>> turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); for (auto& turl : turls) { client().GetTemplateURLService()->Add( std::make_unique<TemplateURL>(std::move(*turl)));
diff --git a/components/omnibox/browser/history_url_provider_unittest.cc b/components/omnibox/browser/history_url_provider_unittest.cc index 3e93e06..6f396f7ad 100644 --- a/components/omnibox/browser/history_url_provider_unittest.cc +++ b/components/omnibox/browser/history_url_provider_unittest.cc
@@ -13,7 +13,9 @@ #include <algorithm> #include <memory> +#include <string> #include <utility> +#include <vector> #include "base/run_loop.h" #include "base/strings/string_util.h" @@ -1422,7 +1424,7 @@ // Populate template URL with starter pack entries std::vector<std::unique_ptr<TemplateURLData>> turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); for (auto& turl : turls) { client_->GetTemplateURLService()->Add( std::make_unique<TemplateURL>(std::move(*turl)));
diff --git a/components/omnibox/browser/keyword_provider.cc b/components/omnibox/browser/keyword_provider.cc index 5cfe125..d4692ac 100644 --- a/components/omnibox/browser/keyword_provider.cc +++ b/components/omnibox/browser/keyword_provider.cc
@@ -131,7 +131,8 @@ // The built-in history keyword mode is disabled in incognito mode. Don't // provide the "@history" keyword in that case. if (client_->IsOffTheRecord() && - template_url->starter_pack_id() == TemplateURLStarterPackData::kHistory) { + template_url->starter_pack_id() == + template_url_starter_pack_data::kHistory) { return std::u16string(); }
diff --git a/components/omnibox/browser/omnibox_controller.cc b/components/omnibox/browser/omnibox_controller.cc index 2fe9792..eeb1d6ea 100644 --- a/components/omnibox/browser/omnibox_controller.cc +++ b/components/omnibox/browser/omnibox_controller.cc
@@ -4,6 +4,9 @@ #include "components/omnibox/browser/omnibox_controller.h" +#include <memory> +#include <string> + #include "base/functional/bind.h" #include "base/metrics/histogram.h" #include "base/strings/utf_string_conversions.h" @@ -167,7 +170,7 @@ const TemplateURL* turl = match.GetTemplateURL(client_->GetTemplateURLService(), false); if (turl && - turl->starter_pack_id() == TemplateURLStarterPackData::kGemini) { + turl->starter_pack_id() == template_url_starter_pack_data::kGemini) { return true; } }
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc index 9f885ac..b4290e65 100644 --- a/components/omnibox/browser/omnibox_edit_model.cc +++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -1966,14 +1966,14 @@ // For featured search engines, we also want to add the shortcut name. if (AutocompleteMatch::IsFeaturedSearchType(match.type)) { int message_id = (turl && turl->starter_pack_id() == - TemplateURLStarterPackData::kGemini) + template_url_starter_pack_data::kGemini) ? IDS_ACC_ASK_KEYWORD_MODE_WITH_SHORTCUT : IDS_ACC_KEYWORD_MODE_WITH_SHORTCUT; return l10n_util::GetStringFUTF16(message_id, match.keyword, replacement_string); } int message_id = (turl && turl->starter_pack_id() == - TemplateURLStarterPackData::kGemini) + template_url_starter_pack_data::kGemini) ? IDS_ACC_ASK_KEYWORD_MODE : IDS_ACC_KEYWORD_MODE; return l10n_util::GetStringFUTF16(message_id, replacement_string);
diff --git a/components/omnibox/browser/omnibox_edit_model_unittest.cc b/components/omnibox/browser/omnibox_edit_model_unittest.cc index 8c06ebd8b..09f8856 100644 --- a/components/omnibox/browser/omnibox_edit_model_unittest.cc +++ b/components/omnibox/browser/omnibox_edit_model_unittest.cc
@@ -9,6 +9,7 @@ #include <array> #include <memory> #include <string> +#include <vector> #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" @@ -613,7 +614,7 @@ GetPopupAccessibilityLabelForCurrentSelection_KeywordMode) { // Populate the TemplateURLService with starter pack entries. std::vector<std::unique_ptr<TemplateURLData>> turls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); for (auto& starter_turl : turls) { controller()->client()->GetTemplateURLService()->Add( std::make_unique<TemplateURL>(std::move(*starter_turl)));
diff --git a/components/omnibox/browser/omnibox_field_trial.h b/components/omnibox/browser/omnibox_field_trial.h index 1638e69..9c9f3ff 100644 --- a/components/omnibox/browser/omnibox_field_trial.h +++ b/components/omnibox/browser/omnibox_field_trial.h
@@ -722,7 +722,7 @@ // DB or TemplateURLService's copy of the URL. extern const base::FeatureParam<std::string> kGeminiUrlOverride; -// Whether the expansion pack (the StarterPackID::kGemini keyword/engine) for +// Whether the expansion pack (the `StarterPackId::kGemini` keyword/engine) for // the site search starter pack is enabled. bool IsStarterPackExpansionEnabled();
diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc index cc1c532..a825bea 100644 --- a/components/omnibox/browser/search_provider.cc +++ b/components/omnibox/browser/search_provider.cc
@@ -8,8 +8,11 @@ #include <algorithm> #include <cmath> +#include <memory> #include <optional> +#include <string> #include <utility> +#include <vector> #include "base/base64.h" #include "base/feature_list.h" @@ -996,7 +999,8 @@ // so it's not possible to open a verbatim search match. Do not provide one. if (keyword_url && (keyword_url->type() != TemplateURL::OMNIBOX_API_EXTENSION) && - (keyword_url->starter_pack_id() != TemplateURLStarterPackData::kTabs)) { + (keyword_url->starter_pack_id() != + template_url_starter_pack_data::kTabs)) { bool keyword_relevance_from_server; const int keyword_verbatim_relevance = GetKeywordVerbatimRelevance(&keyword_relevance_from_server);
diff --git a/components/omnibox/composebox/BUILD.gn b/components/omnibox/composebox/BUILD.gn index 4cd435a..f479de1 100644 --- a/components/omnibox/composebox/BUILD.gn +++ b/components/omnibox/composebox/BUILD.gn
@@ -7,14 +7,48 @@ "composebox_query_controller.cc", "composebox_query_controller.h", ] - deps = [ "//base:base" ] + deps = [ + "//base:base", + "//components/endpoint_fetcher", + "//components/lens", + "//components/signin/public/base", + "//components/signin/public/identity_manager", + "//components/version_info:channel", + "//google_apis/common", + "//net", + "//net/traffic_annotation", + "//services/network/public/cpp", + "//third_party/lens_server_proto:lens_overlay_proto", + ] +} + +source_set("test_support") { + testonly = true + sources = [ + "test_composebox_query_controller.cc", + "test_composebox_query_controller.h", + ] + deps = [ + ":composebox", + "//base", + "//base/test:test_support", + "//components/endpoint_fetcher", + "//components/endpoint_fetcher:test_support", + "//components/lens", + "//google_apis/common", + ] } source_set("unit_tests") { testonly = true sources = [ "composebox_query_controller_unittest.cc" ] deps = [ - ":composebox", + ":test_support", "//base/test:test_support", + "//components/endpoint_fetcher", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager:test_support", + "//services/network:test_support", + "//services/network/public/cpp", ] }
diff --git a/components/omnibox/composebox/DEPS b/components/omnibox/composebox/DEPS new file mode 100644 index 0000000..3337925 --- /dev/null +++ b/components/omnibox/composebox/DEPS
@@ -0,0 +1,14 @@ +include_rules = [ + "+components/endpoint_fetcher", + "+components/lens", + "+components/search", + "+components/signin/public/base", + "+components/signin/public/identity_manager", + "+components/signin/public/identity_manager_factory", + "+components/version_info", + "+google_apis", + "+net", + "+services/network/public/cpp", + "+services/network/test", + "+third_party/lens_server_proto", +] \ No newline at end of file
diff --git a/components/omnibox/composebox/composebox_query_controller.cc b/components/omnibox/composebox/composebox_query_controller.cc index b9b7635..c0f3ed8 100644 --- a/components/omnibox/composebox/composebox_query_controller.cc +++ b/components/omnibox/composebox/composebox_query_controller.cc
@@ -4,6 +4,72 @@ #include "components/omnibox/composebox/composebox_query_controller.h" +#include "components/lens/lens_features.h" +#include "components/lens/lens_request_construction.h" +#include "components/signin/public/base/consent_level.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/version_info/channel.h" +#include "google_apis/common/api_error_codes.h" +#include "google_apis/gaia/gaia_constants.h" +#include "google_apis/google_api_keys.h" +#include "net/base/url_util.h" +#include "net/http/http_request_headers.h" +#include "net/traffic_annotation/network_traffic_annotation.h" + +using endpoint_fetcher::CredentialsMode; +using endpoint_fetcher::EndpointFetcher; +using endpoint_fetcher::EndpointFetcherCallback; +using endpoint_fetcher::EndpointResponse; +using endpoint_fetcher::HttpMethod; + +constexpr char kContentTypeKey[] = "Content-Type"; +constexpr char kContentType[] = "application/x-protobuf"; +constexpr char kOAuthConsumerName[] = "ComposeboxQueryController"; + +constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotationTag = + net::DefineNetworkTrafficAnnotation("ntp_composebox_query_controller", R"( + semantics { + sender: "Lens" + description: "A request to the service handling the file uploads for " + "the Composebox in the NTP in Chrome." + trigger: "The user triggered a compose flow in the Chrome NTP " + "by clicking on the button in the realbox." + data: "Only file data that is explicitly uploaded by the user will " + "be sent." + destination: GOOGLE_OWNED_SERVICE + internal { + contacts { + email: "hujasonx@google.com" + } + contacts { + email: "lens-chrome@google.com" + } + } + user_data { + type: USER_CONTENT + type: WEB_CONTENT + } + last_reviewed: "2025-06-20" + } + policy { + cookies_allowed: YES + cookies_store: "user" + setting: "This feature is only shown in the NTP by default and does " + "nothing without explicit user action, so there is no setting to " + "disable the feature." + policy_exception_justification: "Not yet implemented." + } + )"); + +ComposeboxQueryController::ComposeboxQueryController( + signin::IdentityManager* identity_manager, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + version_info::Channel channel) + : identity_manager_(identity_manager), + url_loader_factory_(url_loader_factory), + channel_(channel) {} + ComposeboxQueryController::~ComposeboxQueryController() { // Ensure NTP exits are tracked. i.e. The user starts a composebox session, // and closes the NTP without explicitly exiting the session or submitting a @@ -16,10 +82,159 @@ } void ComposeboxQueryController::NotifySessionStarted() { + DCHECK_EQ(session_state_, SessionState::kNone); + DCHECK_EQ(query_controller_state_, QueryControllerState::kOff); session_state_ = SessionState::kSessionStarted; session_start_time_ = base::Time::Now(); + FetchClusterInfoRequest(); } void ComposeboxQueryController::NotifySessionAbandoned() { session_state_ = SessionState::kSessionAbandoned; + SetQueryControllerState(QueryControllerState::kOff); + cluster_info_access_token_fetcher_.reset(); + cluster_info_endpoint_fetcher_.reset(); +} + +lens::LensOverlayClientContext +ComposeboxQueryController::CreateClientContext() { + lens::LensOverlayClientContext context; + // TODO(crbug.com/424871547): Create the client context. + + return context; +} + +std::unique_ptr<EndpointFetcher> +ComposeboxQueryController::CreateEndpointFetcher( + std::string request_string, + const GURL& fetch_url, + HttpMethod http_method, + base::TimeDelta timeout, + const std::vector<std::string>& request_headers, + const std::vector<std::string>& cors_exempt_headers, + UploadProgressCallback upload_progress_callback) { + return std::make_unique<EndpointFetcher>( + /*url_loader_factory=*/url_loader_factory_, + /*url=*/fetch_url, + /*content_type=*/kContentType, + /*timeout=*/timeout, + /*post_data=*/std::move(request_string), + /*headers=*/request_headers, + /*cors_exempt_headers=*/cors_exempt_headers, + /*channel=*/channel_, + /*request_params=*/ + EndpointFetcher::RequestParams::Builder(http_method, + kTrafficAnnotationTag) + .SetCredentialsMode(CredentialsMode::kInclude) + .SetSetSiteForCookies(true) + .SetUploadProgressCallback(std::move(upload_progress_callback)) + .Build()); +} + +// TODO(crbug.com/424869589): Clean up code duplication with +// LensOverlayQueryController. +std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher> +ComposeboxQueryController::CreateOAuthHeadersAndContinue( + OAuthHeadersCreatedCallback callback) { + // Use OAuth if the user is logged in. + if (identity_manager_ && + identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { + signin::AccessTokenFetcher::TokenCallback token_callback = + base::BindOnce(&lens::CreateOAuthHeader).Then(std::move(callback)); + signin::ScopeSet oauth_scopes; + oauth_scopes.insert(GaiaConstants::kLensOAuth2Scope); + return std::make_unique<signin::PrimaryAccountAccessTokenFetcher>( + kOAuthConsumerName, identity_manager_, oauth_scopes, + std::move(token_callback), + signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, + signin::ConsentLevel::kSignin); + } + + // Fall back to fetching the endpoint directly using API key. + std::move(callback).Run(std::vector<std::string>()); + return nullptr; +} + +void ComposeboxQueryController::FetchClusterInfoRequest() { + SetQueryControllerState(QueryControllerState::kAwaitingClusterInfoResponse); + + // There should not be any in-flight cluster info access token request. + CHECK(!cluster_info_access_token_fetcher_); + cluster_info_access_token_fetcher_ = CreateOAuthHeadersAndContinue( + base::BindOnce(&ComposeboxQueryController::PerformClusterInfoFetchRequest, + weak_ptr_factory_.GetWeakPtr())); +} + +void ComposeboxQueryController::PerformClusterInfoFetchRequest( + std::vector<std::string> request_headers) { + cluster_info_access_token_fetcher_.reset(); + + // Add protobuf content type to the request headers. + request_headers.push_back(kContentTypeKey); + request_headers.push_back(kContentType); + + // Get client experiment variations to include in the request. + // TODO(crbug.com/425396482): Attach variations header. + std::vector<std::string> cors_exempt_headers; + + // Generate the URL to fetch. + GURL fetch_url = GURL(lens::features::GetLensOverlayClusterInfoEndpointUrl()); + + std::string request_string; + // Create the client context to include in the request. + lens::LensOverlayClientContext client_context = CreateClientContext(); + lens::LensOverlayServerClusterInfoRequest request; + request.set_surface(client_context.surface()); + request.set_platform(client_context.platform()); + CHECK(request.SerializeToString(&request_string)); + + // Create the EndpointFetcher, responsible for making the request using our + // given params. Store in class variable to keep endpoint fetcher alive until + // the request is made. + cluster_info_endpoint_fetcher_ = CreateEndpointFetcher( + std::move(request_string), fetch_url, HttpMethod::kPost, + base::Milliseconds(lens::features::GetLensOverlayServerRequestTimeout()), + request_headers, cors_exempt_headers, base::DoNothing()); + + // Finally, perform the request. + cluster_info_endpoint_fetcher_->PerformRequest( + base::BindOnce( + &ComposeboxQueryController::ClusterInfoFetchResponseHandler, + weak_ptr_factory_.GetWeakPtr()), + google_apis::GetAPIKey().c_str()); +} + +void ComposeboxQueryController::ClusterInfoFetchResponseHandler( + std::unique_ptr<endpoint_fetcher::EndpointResponse> response) { + cluster_info_endpoint_fetcher_.reset(); + if (response->http_status_code != google_apis::ApiErrorCode::HTTP_SUCCESS) { + SetQueryControllerState(QueryControllerState::kClusterInfoInvalid); + return; + } + + lens::LensOverlayServerClusterInfoResponse server_response; + const std::string response_string = response->response; + bool parse_successful = server_response.ParseFromArray( + response_string.data(), response_string.size()); + if (!parse_successful) { + SetQueryControllerState(QueryControllerState::kClusterInfoInvalid); + return; + } + + // Store the cluster info. + // TODO(crbug.com/425377511): Add TTL timer for the cluster info. + cluster_info_ = std::make_optional<lens::LensOverlayClusterInfo>(); + cluster_info_->set_server_session_id(server_response.server_session_id()); + cluster_info_->set_search_session_id(server_response.search_session_id()); + SetQueryControllerState(QueryControllerState::kClusterInfoReceived); +} + +void ComposeboxQueryController::SetQueryControllerState( + QueryControllerState new_state) { + if (query_controller_state_ != new_state) { + query_controller_state_ = new_state; + if (on_query_controller_state_changed_callback_) { + on_query_controller_state_changed_callback_.Run(new_state); + } + } }
diff --git a/components/omnibox/composebox/composebox_query_controller.h b/components/omnibox/composebox/composebox_query_controller.h index 53b37da..4352e73a 100644 --- a/components/omnibox/composebox/composebox_query_controller.h +++ b/components/omnibox/composebox/composebox_query_controller.h
@@ -6,6 +6,12 @@ #define COMPONENTS_OMNIBOX_COMPOSEBOX_COMPOSEBOX_QUERY_CONTROLLER_H_ #include "base/time/time.h" +#include "components/endpoint_fetcher/endpoint_fetcher.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "third_party/lens_server_proto/lens_overlay_client_context.pb.h" +#include "third_party/lens_server_proto/lens_overlay_cluster_info.pb.h" +#include "third_party/lens_server_proto/lens_overlay_server.pb.h" +#include "third_party/lens_server_proto/lens_overlay_surface.pb.h" enum class SessionState { kNone = 0, @@ -14,9 +20,42 @@ kSubmittedQuery = 3, }; +enum class QueryControllerState { + // The initial state, before NotifySessionStarted() is called. + kOff = 0, + // The cluster info request is in flight. + kAwaitingClusterInfoResponse = 1, + // The cluster info response has been received and is valid. + kClusterInfoReceived = 2, + // The cluster info response was not received, or the cluster info has + // expired. + kClusterInfoInvalid = 3, +}; + +namespace version_info { +enum class Channel; +} // namespace version_info + +namespace signin { +class IdentityManager; +} // namespace signin + +// Callback type alias for the OAuth headers created. +using OAuthHeadersCreatedCallback = + base::OnceCallback<void(std::vector<std::string>)>; +// Callback type alias for the upload progress. +using UploadProgressCallback = + base::RepeatingCallback<void(uint64_t position, uint64_t total)>; +// Callback for when the query controller state changes. +using QueryControllerStateChangedCallback = + base::RepeatingCallback<void(QueryControllerState state)>; + class ComposeboxQueryController { public: - ComposeboxQueryController() = default; + ComposeboxQueryController( + signin::IdentityManager* identity_manager, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + version_info::Channel channel); virtual ~ComposeboxQueryController(); // Session management. Virtual for testing. @@ -25,10 +64,82 @@ SessionState session_state() { return session_state_; } + protected: + // Returns the EndpointFetcher to use with the given params. Protected to + // allow overriding in tests to mock server responses. + virtual std::unique_ptr<endpoint_fetcher::EndpointFetcher> + CreateEndpointFetcher(std::string request_string, + const GURL& fetch_url, + endpoint_fetcher::HttpMethod http_method, + base::TimeDelta timeout, + const std::vector<std::string>& request_headers, + const std::vector<std::string>& cors_exempt_headers, + UploadProgressCallback upload_progress_callback); + + // The internal state of the query controller. Protected to allow tests to + // access the state. Do not modify this state directly, use + // SetQueryControllerState() instead. + QueryControllerState query_controller_state_ = QueryControllerState::kOff; + + // Callback for when the query controller state changes. Protected to allow + // tests to set the callback. + QueryControllerStateChangedCallback + on_query_controller_state_changed_callback_; + private: + // Creates the client context for Lens requests. + lens::LensOverlayClientContext CreateClientContext(); + + // Fetches the OAuth headers and calls the callback with the headers. If the + // OAuth cannot be retrieved (like if the user is not logged in), the callback + // will be called with an empty vector. Returns the access token fetcher + // making the request so it can be kept alive. + std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher> + CreateOAuthHeadersAndContinue(OAuthHeadersCreatedCallback callback); + + // Makes a LensOverlayServerClusterInfoRequest to get the cluster info. + void FetchClusterInfoRequest(); + + // Creates the endpoint fetcher and sends the cluster info request. + void PerformClusterInfoFetchRequest(std::vector<std::string> request_headers); + + // Handles the response from the cluster info request. + void ClusterInfoFetchResponseHandler( + std::unique_ptr<endpoint_fetcher::EndpointResponse> response); + + // Sets the query controller state and notifies the callback if it has + // changed. + void SetQueryControllerState(QueryControllerState new_state); + + // The last received cluster info. + std::optional<lens::LensOverlayClusterInfo> cluster_info_ = std::nullopt; + + // The endpoint fetcher used for the cluster info request. + std::unique_ptr<endpoint_fetcher::EndpointFetcher> + cluster_info_endpoint_fetcher_; + + // The access token fetcher used for getting OAuth for the cluster info + // request. Will be discarded after the OAuth headers are created. + std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher> + cluster_info_access_token_fetcher_; + + // Unowned IdentityManager for fetching access tokens. Could be null for + // incognito profiles. + const raw_ptr<signin::IdentityManager> identity_manager_; + // TODO(420701010) Create SessionMetrics struct. base::Time session_start_time_; + + // The url loader factory to use for Lens network requests. + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; + + // The channel to use for Lens network requests. + version_info::Channel channel_; + + // The session state. SessionState session_state_ = SessionState::kNone; + + base::WeakPtrFactory<ComposeboxQueryController> weak_ptr_factory_{this}; }; #endif // COMPONENTS_OMNIBOX_COMPOSEBOX_COMPOSEBOX_QUERY_CONTROLLER_H_
diff --git a/components/omnibox/composebox/composebox_query_controller_unittest.cc b/components/omnibox/composebox/composebox_query_controller_unittest.cc index 9b3f5428..f695a20 100644 --- a/components/omnibox/composebox/composebox_query_controller_unittest.cc +++ b/components/omnibox/composebox/composebox_query_controller_unittest.cc
@@ -2,23 +2,64 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/omnibox/composebox/composebox_query_controller.h" - +#include "base/run_loop.h" +#include "base/test/bind.h" +#include "base/test/task_environment.h" +#include "base/version_info/channel.h" +#include "components/omnibox/composebox/test_composebox_query_controller.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/account_info.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" +#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +#include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h" +constexpr char kTestUser[] = "test_user@gmail.com"; + class ComposeboxQueryControllerTest : public testing::Test { public: ComposeboxQueryControllerTest() = default; ~ComposeboxQueryControllerTest() override = default; void SetUp() override { - controller_ = std::make_unique<ComposeboxQueryController>(); + shared_url_loader_factory_ = + base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( + &test_factory_); + + controller_ = std::make_unique<TestComposeboxQueryController>( + identity_manager(), shared_url_loader_factory_, + version_info::Channel::UNKNOWN); } - ComposeboxQueryController& controller() { return *controller_; } + TestComposeboxQueryController& controller() { return *controller_; } + + protected: + signin::IdentityTestEnvironment* identity_test_env() { + return &identity_test_env_; + } + + signin::IdentityManager* identity_manager() { + return identity_test_env_.identity_manager(); + } + + // Returns an AccessTokenInfo with valid information that can be used for + // completing access token requests. + const signin::AccessTokenInfo& access_token_info() const { + return access_token_info_; + } private: - std::unique_ptr<ComposeboxQueryController> controller_; + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::ThreadPoolExecutionMode::QUEUED, + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + network::TestURLLoaderFactory test_factory_; + signin::IdentityTestEnvironment identity_test_env_; + scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory_; + std::unique_ptr<TestComposeboxQueryController> controller_; + signin::AccessTokenInfo access_token_info_{"access_token", base::Time::Max(), + "id_token"}; }; TEST_F(ComposeboxQueryControllerTest, NotifySessionStarted) { @@ -26,6 +67,76 @@ EXPECT_EQ(SessionState::kSessionStarted, controller().session_state()); } +TEST_F(ComposeboxQueryControllerTest, + NotifySessionStartedIssuesClusterInfoRequest) { + // Wait until the state changes to kClusterInfoReceived. + base::RunLoop run_loop; + controller().set_on_query_controller_state_changed_callback( + base::BindLambdaForTesting([&](QueryControllerState state) { + if (state == QueryControllerState::kClusterInfoReceived) { + run_loop.Quit(); + } + })); + + // Start the session. + controller().NotifySessionStarted(); + run_loop.Run(); + + // Validate. + EXPECT_EQ(controller().num_cluster_info_fetch_requests_sent(), 1); + EXPECT_EQ(QueryControllerState::kClusterInfoReceived, + controller().query_controller_state()); +} + +TEST_F(ComposeboxQueryControllerTest, + NotifySessionStartedIssuesClusterInfoRequestWithOAuth) { + identity_test_env()->MakePrimaryAccountAvailable( + kTestUser, signin::ConsentLevel::kSignin); + + // Wait until the state changes to kClusterInfoReceived. + base::RunLoop run_loop; + controller().set_on_query_controller_state_changed_callback( + base::BindLambdaForTesting([&](QueryControllerState state) { + if (state == QueryControllerState::kClusterInfoReceived) { + run_loop.Quit(); + } + })); + + // Start the session. + controller().NotifySessionStarted(); + identity_test_env()->WaitForAccessTokenRequestIfNecessaryAndRespondWithToken( + access_token_info().token, access_token_info().expiration_time, + access_token_info().id_token); + run_loop.Run(); + + // Validate. + EXPECT_EQ(controller().num_cluster_info_fetch_requests_sent(), 1); + EXPECT_EQ(QueryControllerState::kClusterInfoReceived, + controller().query_controller_state()); +} + +TEST_F(ComposeboxQueryControllerTest, + NotifySessionStartedIssuesClusterInfoRequestFailure) { + // Wait until the state changes to kClusterInfoInvalid. + base::RunLoop run_loop; + controller().set_on_query_controller_state_changed_callback( + base::BindLambdaForTesting([&](QueryControllerState state) { + if (state == QueryControllerState::kClusterInfoInvalid) { + run_loop.Quit(); + } + })); + + // Start the session. + controller().set_next_cluster_info_request_should_return_error(true); + controller().NotifySessionStarted(); + run_loop.Run(); + + // Validate. + EXPECT_EQ(controller().num_cluster_info_fetch_requests_sent(), 1); + EXPECT_EQ(QueryControllerState::kClusterInfoInvalid, + controller().query_controller_state()); +} + TEST_F(ComposeboxQueryControllerTest, NotifySessionAbandoned) { controller().NotifySessionAbandoned(); EXPECT_EQ(SessionState::kSessionAbandoned, controller().session_state());
diff --git a/components/omnibox/composebox/test_composebox_query_controller.cc b/components/omnibox/composebox/test_composebox_query_controller.cc new file mode 100644 index 0000000..5f8928e9 --- /dev/null +++ b/components/omnibox/composebox/test_composebox_query_controller.cc
@@ -0,0 +1,82 @@ +// 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 "test_composebox_query_controller.h" + +#include "base/strings/utf_string_conversions.h" +#include "components/lens/lens_features.h" +#include "google_apis/common/api_error_codes.h" +#include "testing/gtest/include/gtest/gtest.h" + +using endpoint_fetcher::EndpointFetcher; +using endpoint_fetcher::EndpointFetcherCallback; +using endpoint_fetcher::EndpointResponse; +using endpoint_fetcher::HttpMethod; + +FakeEndpointFetcher::FakeEndpointFetcher(EndpointResponse response) + : EndpointFetcher( + net::DefineNetworkTrafficAnnotation("compbosebox_mock_fetcher", + R"()")), + response_(response) {} + +void FakeEndpointFetcher::PerformRequest( + EndpointFetcherCallback endpoint_fetcher_callback, + const char* key) { + if (!disable_responding_) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, + base::BindOnce(std::move(endpoint_fetcher_callback), + std::make_unique<EndpointResponse>(response_))); + } +} + +TestComposeboxQueryController::TestComposeboxQueryController( + signin::IdentityManager* identity_manager, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + version_info::Channel channel) + : ComposeboxQueryController(identity_manager, url_loader_factory, channel) { +} +TestComposeboxQueryController::~TestComposeboxQueryController() = default; + +std::unique_ptr<EndpointFetcher> +TestComposeboxQueryController::CreateEndpointFetcher( + std::string request_string, + const GURL& fetch_url, + HttpMethod http_method, + base::TimeDelta timeout, + const std::vector<std::string>& request_headers, + const std::vector<std::string>& cors_exempt_headers, + UploadProgressCallback upload_progress_callback) { + std::string fake_server_response_string; + google_apis::ApiErrorCode fake_server_response_code = + google_apis::ApiErrorCode::HTTP_SUCCESS; + // Whether or not to disable the response. + bool disable_response = false; + + bool is_cluster_info_request = + fetch_url == GURL(lens::features::GetLensOverlayClusterInfoEndpointUrl()); + + if (is_cluster_info_request) { + // Cluster info request. + num_cluster_info_fetch_requests_sent_++; + if (next_cluster_info_request_should_return_error_) { + fake_server_response_code = + google_apis::ApiErrorCode::HTTP_INTERNAL_SERVER_ERROR; + } else { + fake_server_response_string = + fake_cluster_info_response_.SerializeAsString(); + } + } else { + NOTREACHED(); + } + + // Create the fake endpoint fetcher to return the fake response. + EndpointResponse fake_endpoint_response; + fake_endpoint_response.response = fake_server_response_string; + fake_endpoint_response.http_status_code = fake_server_response_code; + + auto response = std::make_unique<FakeEndpointFetcher>(fake_endpoint_response); + response->disable_responding_ = disable_response; + return response; +}
diff --git a/components/omnibox/composebox/test_composebox_query_controller.h b/components/omnibox/composebox/test_composebox_query_controller.h new file mode 100644 index 0000000..8f23e64 --- /dev/null +++ b/components/omnibox/composebox/test_composebox_query_controller.h
@@ -0,0 +1,84 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_OMNIBOX_COMPOSEBOX_TEST_COMPOSEBOX_QUERY_CONTROLLER_H_ +#define COMPONENTS_OMNIBOX_COMPOSEBOX_TEST_COMPOSEBOX_QUERY_CONTROLLER_H_ + +#include <memory> + +#include "base/functional/callback.h" +#include "components/endpoint_fetcher/endpoint_fetcher.h" +#include "composebox_query_controller.h" + +class FakeEndpointFetcher : public endpoint_fetcher::EndpointFetcher { + public: + explicit FakeEndpointFetcher(endpoint_fetcher::EndpointResponse response); + void PerformRequest( + endpoint_fetcher::EndpointFetcherCallback endpoint_fetcher_callback, + const char* key) override; + + bool disable_responding_ = false; + + private: + endpoint_fetcher::EndpointResponse response_; +}; + +// Helper for testing features that use the ComposeboxQueryController. +// The only logic in this class should be for setting up fake network responses +// and tracking sent request data to maximize testing coverage. +class TestComposeboxQueryController : public ComposeboxQueryController { + public: + explicit TestComposeboxQueryController( + signin::IdentityManager* identity_manager, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + version_info::Channel channel); + ~TestComposeboxQueryController() override; + + // Mutators. + void set_fake_cluster_info_response( + lens::LensOverlayServerClusterInfoResponse response) { + fake_cluster_info_response_ = response; + } + + void set_next_cluster_info_request_should_return_error( + bool set_next_cluster_info_request_should_return_error) { + next_cluster_info_request_should_return_error_ = + set_next_cluster_info_request_should_return_error; + } + + void set_on_query_controller_state_changed_callback( + QueryControllerStateChangedCallback callback) { + on_query_controller_state_changed_callback_ = std::move(callback); + } + + // Accessors. + const int& num_cluster_info_fetch_requests_sent() const { + return num_cluster_info_fetch_requests_sent_; + } + + QueryControllerState query_controller_state() const { + return query_controller_state_; + } + + protected: + std::unique_ptr<endpoint_fetcher::EndpointFetcher> CreateEndpointFetcher( + std::string request_string, + const GURL& fetch_url, + endpoint_fetcher::HttpMethod http_method, + base::TimeDelta timeout, + const std::vector<std::string>& request_headers, + const std::vector<std::string>& cors_exempt_headers, + UploadProgressCallback upload_progress_callback) override; + + // The fake response to return for cluster info requests. + lens::LensOverlayServerClusterInfoResponse fake_cluster_info_response_; + + // The number of cluster info fetch requests sent by the query controller. + int num_cluster_info_fetch_requests_sent_ = 0; + + // If true, the next cluster info request will return an error. + bool next_cluster_info_request_should_return_error_ = false; +}; + +#endif // COMPONENTS_OMNIBOX_COMPOSEBOX_TEST_COMPOSEBOX_QUERY_CONTROLLER_H_
diff --git a/components/optimization_guide/content/browser/DEPS b/components/optimization_guide/content/browser/DEPS index 896cc78..016175b 100644 --- a/components/optimization_guide/content/browser/DEPS +++ b/components/optimization_guide/content/browser/DEPS
@@ -18,6 +18,10 @@ "+components/ukm/test_ukm_recorder.h", "+services/metrics/public/cpp/ukm_builders.h", ], + "frame_metadata_observer_browsertest\.cc": [ + "+content/shell", + "+components/network_session_configurator/common/network_switches.h", + ], "page_content_proto_util_unittest\.cc": [ "+third_party/blink/renderer/platform/graphics", ],
diff --git a/components/optimization_guide/content/browser/frame_metadata_observer_browsertest.cc b/components/optimization_guide/content/browser/frame_metadata_observer_browsertest.cc new file mode 100644 index 0000000..07f5719a --- /dev/null +++ b/components/optimization_guide/content/browser/frame_metadata_observer_browsertest.cc
@@ -0,0 +1,157 @@ +// 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 "base/test/test_future.h" +#include "components/network_session_configurator/common/network_switches.h" +#include "components/optimization_guide/core/optimization_guide_features.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/content_switches.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" +#include "content/public/test/content_browser_test.h" +#include "content/public/test/content_browser_test_utils.h" +#include "content/shell/browser/shell.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "net/dns/mock_host_resolver.h" +#include "net/test/embedded_test_server/request_handler_util.h" +#include "services/metrics/public/cpp/ukm_builders.h" +#include "services/service_manager/public/cpp/interface_provider.h" +#include "third_party/blink/public/common/features_generated.h" +#include "third_party/blink/public/mojom/content_extraction/frame_metadata_observer_registry.mojom.h" +#include "ui/display/display_switches.h" + +// TODO(gklassen): move this test to chrome/browser/content_extraction/ + +namespace optimization_guide { + +namespace { + +// Allow 1px differences from rounding. +#define EXPECT_ALMOST_EQ(a, b) EXPECT_LE(abs(a - b), 1); + +base::FilePath GetTestDataDir() { + return base::FilePath{ + FILE_PATH_LITERAL("components/test/data/optimization_guide")}; +} + +class FrameMetadataObserverBrowserTest + : public content::ContentBrowserTest, + public blink::mojom::FrameMetadataObserver { + public: + FrameMetadataObserverBrowserTest() = default; + + FrameMetadataObserverBrowserTest(const FrameMetadataObserverBrowserTest&) = + delete; + FrameMetadataObserverBrowserTest& operator=( + const FrameMetadataObserverBrowserTest&) = delete; + + ~FrameMetadataObserverBrowserTest() override = default; + + content::WebContents* web_contents() { return shell()->web_contents(); } + + void SetUpOnMainThread() override { + content::ContentBrowserTest::SetUpOnMainThread(); // Call parent setup + // first + + host_resolver()->AddRule("*", "127.0.0.1"); + + https_server_ = std::make_unique<net::EmbeddedTestServer>( + net::EmbeddedTestServer::TYPE_HTTPS); + https_server_->AddDefaultHandlers(GetTestDataDir()); + content::SetupCrossSiteRedirector(https_server_.get()); + + ASSERT_TRUE(https_server_->Start()); + } + + void SetUpCommandLine(base::CommandLine* command_line) override { + content::ContentBrowserTest::SetUpCommandLine(command_line); + + // HTTPS server only serves a valid cert for localhost, so this is needed + // to load pages from other hosts without an error. + command_line->AppendSwitch(switches::kIgnoreCertificateErrors); + + command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor, "1.0"); + } + + bool LoadPage(GURL url) { + callback_waiter_.Clear(); + return content::NavigateToURL(web_contents(), url); + } + + bool WaitForRenderFrameReady() { + return content::WaitForRenderFrameReady( + web_contents()->GetPrimaryMainFrame()); + } + + void AddObserver() { + auto* rfh = web_contents()->GetPrimaryMainFrame(); + rfh->GetRemoteInterfaces()->GetInterface( + frame_metadata_observer_registry_.BindNewPipeAndPassReceiver()); + + mojo::PendingRemote<blink::mojom::FrameMetadataObserver> remote; + frame_metadata_observer_receiver_.Bind( + remote.InitWithNewPipeAndPassReceiver()); + + frame_metadata_observer_registry_->AddObserver(std::move(remote)); + } + + // Invoked when the frame metadata changes. + void OnPaidContentMetadataChanged(bool has_paid_content) override { + callback_waiter_.SetValue(has_paid_content); + } + + void WaitForCallback() { + ASSERT_TRUE(callback_waiter_.Wait()) + << "Timed out waiting for OnPaidContentMetadataChanged callback"; + } + + bool hasPaidContent() { return callback_waiter_.Get(); } + + net::EmbeddedTestServer* https_server() { return https_server_.get(); } + + protected: + // TestFuture that will be signaled when the callback runs. + base::test::TestFuture<bool> callback_waiter_; + + private: + std::unique_ptr<net::EmbeddedTestServer> https_server_; + mojo::Remote<blink::mojom::FrameMetadataObserverRegistry> + frame_metadata_observer_registry_; + mojo::Receiver<blink::mojom::FrameMetadataObserver> + frame_metadata_observer_receiver_{this}; +}; + +IN_PROC_BROWSER_TEST_F(FrameMetadataObserverBrowserTest, PaidContent) { + ASSERT_TRUE(LoadPage(https_server()->GetURL("/paid_content.html"))); + + AddObserver(); + WaitForCallback(); + + EXPECT_TRUE(hasPaidContent()); +} + +IN_PROC_BROWSER_TEST_F(FrameMetadataObserverBrowserTest, NoPaidContent) { + ASSERT_TRUE(LoadPage(https_server()->GetURL("/simple.html"))); + + AddObserver(); + WaitForCallback(); + + EXPECT_FALSE(hasPaidContent()); +} + +IN_PROC_BROWSER_TEST_F(FrameMetadataObserverBrowserTest, LateObserver) { + ASSERT_TRUE(LoadPage(https_server()->GetURL("/paid_content.html"))); + + // Wait for the page to load before adding the observer. + ASSERT_TRUE(WaitForRenderFrameReady()); + + AddObserver(); + WaitForCallback(); + + EXPECT_TRUE(hasPaidContent()); +} + +} // namespace + +} // namespace optimization_guide
diff --git a/components/optimization_guide/internal b/components/optimization_guide/internal index 3c89dd6..bfac225 160000 --- a/components/optimization_guide/internal +++ b/components/optimization_guide/internal
@@ -1 +1 @@ -Subproject commit 3c89dd68e24fda4ce1dad3c9ee0c9441059f7fb0 +Subproject commit bfac225ad8bb6ed5d309fe020838c6daa4d2f032
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index be0a490..eff71c2 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -6718,6 +6718,9 @@ <translation id="5740636973289452345">Habilitar informes de datos sobre extensiones y complementos</translation> <translation id="5740716956489996914">Usar el comportamiento predeterminado para definir si los sitios web pueden enviar solicitudes a endpoints de la red local</translation> <translation id="5741110260062082926">Inhabilitar Orca</translation> +<translation id="5746126833785204233">Si se habilita esta política, se recogerán los registros a nivel de la aplicación de kiosco cuando se esté ejecutando una aplicación de kiosco en el dispositivo. Se recogerán registros de todos los tipos de aplicaciones de kiosco. +Estos registros se almacenarán en un archivo kiosk_apps.log independiente. +Si no se define esta política o se inhabilita, no se recogerán los registros a nivel de la aplicación de kiosco.</translation> <translation id="5746149754419996562">Habilita la presencia de widgets Glanceables en <ph name="PRODUCT_OS_NAME" />. Concretamente, esto afecta a los widgets a los que se puede acceder mediante el chip de fecha de la estantería. Si se habilita esta política, se habilitarán los widgets Glanceables en <ph name="PRODUCT_OS_NAME" />. Si esta política se inhabilita o no se define, no se habilitarán los widgets Glanceables en <ph name="PRODUCT_OS_NAME" />.</translation> @@ -8500,6 +8503,7 @@ <translation id="6907778402784621686">Permite bloquear el contenido no seguro en estos sitios web</translation> <translation id="6908335885425855120">Usar el visor de PDFs de iframe fuera de proceso</translation> <translation id="6908640907898649429">Permite configurar el proveedor de búsquedas predeterminadas. Puedes especificar el proveedor de búsquedas predeterminadas que utilizarán los usuarios o inhabilitar las búsquedas predeterminadas.</translation> +<translation id="6910715067772088598">Inhabilitar registros de la aplicación de kiosco</translation> <translation id="6913068954484253496">Permitir que <ph name="PRODUCT_NAME" /> se conecte a dispositivos de transmisión de todas las direcciones IP.</translation> <translation id="6915493311660114995">Si se habilita esta política, <ph name="PRODUCT_NAME" /> permitirá las solicitudes de Web Authentication de los sitios web que tengan certificados TLS con errores (por ejemplo, sitios web que no se consideren seguros). @@ -8575,6 +8579,7 @@ Si no se establece, no habrá impresoras de dispositivo y se ignorarán las otras políticas <ph name="DEVICE_PRINTERS_POLICY_PATTERN" />.</translation> <translation id="69525503251220566">Parámetro que proporciona una función de búsqueda por imágenes para el proveedor de búsquedas predeterminado</translation> <translation id="6953102253399571439">Habilitar de manera predeterminada la impresión con PIN</translation> +<translation id="695532899547292238">Habilitar la recogida de registros de la aplicación de kiosco</translation> <translation id="6956272732789158625">No permitir que los sitios utilicen la generación de claves</translation> <translation id="6960996423652450945">Inhabilitar el resaltado del cursor de texto en la pantalla de inicio de sesión</translation> <translation id="6961602002757991199">Si se define esta política como una URL válida, <ph name="PRODUCT_NAME" /> descargará la lista de sitios web de esa URL y aplicará las reglas como si se hubieran configurado con la política <ph name="BROWSER_SWITCHER_URL_GREYLIST_POLICY_NAME" />. Estas políticas evitarán que <ph name="PRODUCT_NAME" /> y el navegador alternativo se abran entre sí. @@ -9381,6 +9386,7 @@ <translation id="7586199729147257934">Habilita el aprovisionamiento de certificados de cliente para navegadores gestionados</translation> <translation id="7587345076013230465">Pedir al usuario que seleccione el certificado de cliente cuando la política de selección automática encuentre coincidencias con varios certificados en la pantalla de inicio de sesión</translation> <translation id="7587921466180902617">Habilitar dogfood de Grabación de pantalla para usuarios de Family Link</translation> +<translation id="7588140323025689972">Habilitar registros de la aplicación de kiosco</translation> <translation id="7595074040612182185">Si se establece la política, podrás definir una lista de patrones de URL donde se especifique qué sitios podrían mostrar imágenes. Si no se establece la política, <ph name="DEFAULT_IMAGES_SETTING_ENABLED_POLICY_NAME" /> se aplicará a todos los sitios, si se ha definido. Si no, se aplicará la configuración personal del usuario.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index f4c1ecaf..286daf55 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -6440,6 +6440,9 @@ <translation id="5740636973289452345">拡張機能とプラグインの情報のレポートを有効にする</translation> <translation id="5740716956489996914">ウェブサイトからローカル ネットワーク エンドポイントにリクエストできるかどうかを判断する際にデフォルトの動作を使用する</translation> <translation id="5741110260062082926">Orca を無効にする</translation> +<translation id="5746126833785204233">このポリシーを有効に設定した場合、キオスク アプリケーションがデバイスで実行されているときに、キオスク アプリケーション レベルのログが収集されます。ログは、すべてのキオスク アプリケーション タイプについて収集されます。 +これらのログは、個別の kiosk_apps.log ファイルに保存されます。 +このポリシーを未設定のままにするか無効に設定した場合、キオスク アプリケーション レベルのログは収集されません。</translation> <translation id="5746149754419996562"><ph name="PRODUCT_OS_NAME" /> で Glanceable ウィジェットの表示を有効にします。具体的には、シェルフの日付チップからアクセスできるウィジェットです。 このポリシーを有効にすると、Glanceables は <ph name="PRODUCT_OS_NAME" /> で有効になります。 このポリシーを無効にするか未設定のままにした場合、Glanceables は <ph name="PRODUCT_OS_NAME" /> で有効になりません。</translation> @@ -8146,6 +8149,7 @@ <translation id="6907778402784621686">指定サイトで安全でないコンテンツをブロックする</translation> <translation id="6908335885425855120">プロセス外の iframe PDF ビューアを使用する</translation> <translation id="6908640907898649429">デフォルトの検索プロバイダを設定します。ユーザーが使用するデフォルトの検索プロバイダを指定するか、既定の検索を無効にすることができます。</translation> +<translation id="6910715067772088598">キオスク アプリケーションのログを無効にする</translation> <translation id="6913068954484253496">すべての IP アドレスのキャスト デバイスに接続することを <ph name="PRODUCT_NAME" /> に許可する</translation> <translation id="6915493311660114995">有効に設定した場合、<ph name="PRODUCT_NAME" /> では、TLS 証明書にエラーがあるウェブサイト(ウェブサイトが安全でないと判断されるなど)でウェブ認証リクエストを許可します。このポリシーを無効に設定するか未設定のままにした場合、このようなリクエストをブロックするデフォルトの動作が適用されます。</translation> <translation id="6915524162137327111">管理ラベルを 30 秒間表示する</translation> @@ -8217,6 +8221,7 @@ 未設定の場合、デバイス プリンタは存在しないことになり、他の <ph name="DEVICE_PRINTERS_POLICY_PATTERN" /> ポリシーは無視されます。</translation> <translation id="69525503251220566">既定の検索プロバイダに画像検索機能を提供するパラメータ</translation> <translation id="6953102253399571439">デフォルトで PIN の印刷を有効にします</translation> +<translation id="695532899547292238">キオスク アプリケーションのログの収集を有効にする</translation> <translation id="6956272732789158625">すべてのサイトにキー生成の使用を許可しない</translation> <translation id="6960996423652450945">ログイン画面でテキスト カーソルによるハイライト表示を無効にする</translation> <translation id="6961602002757991199">このポリシーが有効な URL に設定されている場合、<ph name="PRODUCT_NAME" /> はその URL からサイトリストをダウンロードし、<ph name="BROWSER_SWITCHER_URL_GREYLIST_POLICY_NAME" /> ポリシーで設定されているものとしてルールを適用します。このポリシーにより、<ph name="PRODUCT_NAME" /> と代替ブラウザの双方で互いに他方を開くことができなくなります。 @@ -8964,6 +8969,7 @@ <translation id="7586199729147257934">管理対象ブラウザのクライアント証明書のプロビジョニングを有効にする</translation> <translation id="7587345076013230465">ログイン画面で自動選択ポリシーが複数の証明書と一致した場合に、クライアント証明書を選択するよう求めるメッセージを常にユーザーに表示する</translation> <translation id="7587921466180902617">ファミリー リンクのユーザーに対してスクリーンキャスト dogfood を有効にする</translation> +<translation id="7588140323025689972">キオスク アプリケーションのログを有効にする</translation> <translation id="7595074040612182185">このポリシーでは、画像を表示できるサイトを指定する URL パターンのリストを設定できます。 このポリシーを未設定のままにした場合、<ph name="DEFAULT_IMAGES_SETTING_ENABLED_POLICY_NAME" /> が設定されていればその設定がすべてのサイトで使用され、設定されていなければユーザーの個人設定が適用されます。
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index fbbe775..e48f59c 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -6647,6 +6647,9 @@ <translation id="5740636973289452345">Rapportage van extensie- en plug-ingegevens aanzetten</translation> <translation id="5740716956489996914">Standaardgedrag gebruiken om te bepalen of websites verzoeken naar lokale netwerkeindpunten kunnen sturen</translation> <translation id="5741110260062082926">Orca uitzetten</translation> +<translation id="5746126833785204233">Als je het beleid toepast, worden logboeken op kiosk-app-niveau verzameld als er een kiosk-app op het apparaat wordt uitgevoerd. Er worden logboeken verzameld voor alle typen kiosk-apps. +Deze logboeken worden opgeslagen in een afzonderlijk bestand kiosk_apps.log. +Als je dit beleid niet instelt of niet toepast, worden de logboeken op kiosk-app-niveau niet verzameld.</translation> <translation id="5746149754419996562">Hiermee wordt de aanwezigheid van Glanceables-widgets in <ph name="PRODUCT_OS_NAME" /> aangezet. Dit geldt met name voor de widgets die toegankelijk zijn via de datumchip op de plank. Als je dit beleid toepast, staan Glanceables aan in <ph name="PRODUCT_OS_NAME" />. Als je dit beleid niet toepast of niet instelt, staat Glanceables niet aan in <ph name="PRODUCT_OS_NAME" />.</translation> @@ -8409,6 +8412,7 @@ <translation id="6907778402784621686">Niet-beveiligde content op deze sites blokkeren</translation> <translation id="6908335885425855120">Out-of-process iframe-pdf-viewer gebruiken</translation> <translation id="6908640907898649429">Hiermee wordt de standaard zoekprovider ingesteld. Je kunt de standaard zoekprovider opgeven die de gebruiker gaat gebruiken, of je kunt ervoor kiezen de standaard zoekfunctie uit te zetten.</translation> +<translation id="6910715067772088598">Logboeken voor kiosk-apps uitzetten</translation> <translation id="6913068954484253496"><ph name="PRODUCT_NAME" /> toestaan om verbinding te maken met Cast-apparaten op alle IP-adressen.</translation> <translation id="6915493311660114995">Als je dit beleid toepast, staat <ph name="PRODUCT_NAME" /> verzoeken voor webverificatie toe op websites met TLS-certificaten met fouten (dat wil zeggen, websites die niet als beveiligd worden beschouwd). @@ -8482,6 +8486,7 @@ Als je dit beleid niet instelt, zijn er geen apparaatprinters en wordt het andere beleid met betrekking tot <ph name="DEVICE_PRINTERS_POLICY_PATTERN" /> genegeerd.</translation> <translation id="69525503251220566">Parameter die een functie voor zoeken op afbeelding levert voor de standaardzoekprovider</translation> <translation id="6953102253399571439">Afdrukken met pincode standaard aanzetten</translation> +<translation id="695532899547292238">Logboekverzameling voor kiosk-apps aanzetten</translation> <translation id="6956272732789158625">Sites niet toestaan sleutels te genereren</translation> <translation id="6960996423652450945">Inlastekenmarkering op het inlogscherm uitzetten</translation> <translation id="6961602002757991199">Als je dit beleid instelt op een geldige URL, downloadt <ph name="PRODUCT_NAME" /> de lijst met sites van die URL en worden de regels toegepast alsof ze zijn ingesteld met het <ph name="BROWSER_SWITCHER_URL_GREYLIST_POLICY_NAME" />-beleid. Met dit beleid wordt voorkomen dat <ph name="PRODUCT_NAME" /> en de alternatieve browser elkaar openen. @@ -9288,6 +9293,7 @@ <translation id="7586199729147257934">Hiermee wordt de registratie van clientcertificaten voor beheerde browsers aangezet</translation> <translation id="7587345076013230465">De gebruiker vragen om het clientcertificaat te selecteren als het beleid voor automatische selectie overeenkomt met meerdere certificaten op het inlogscherm</translation> <translation id="7587921466180902617">Dogfood-versie van Screencast aanzetten voor gebruikers van Family Link</translation> +<translation id="7588140323025689972">Logboeken voor kiosk-apps aanzetten</translation> <translation id="7595074040612182185">Als je het beleid instelt, kun je een lijst met URL-patronen instellen van sites die afbeeldingen mogen weergeven. Als je het beleid niet instelt, is <ph name="DEFAULT_IMAGES_SETTING_ENABLED_POLICY_NAME" /> (indien ingesteld) van toepassing op alle sites. Zo niet, dan gelden de persoonlijke instellingen van de gebruiker.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index a42f5113..8e5a6fd 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -6685,6 +6685,9 @@ <translation id="5740636973289452345">Передавать информацию о расширениях и плагинах</translation> <translation id="5740716956489996914">Определять, могут ли сайты отправлять запросы конечным точкам локальной сети, в режиме работы по умолчанию</translation> <translation id="5741110260062082926">Отключить Orca</translation> +<translation id="5746126833785204233">Если это правило включено, то при работе киоск-приложений будут собираться журналы. Журналы будут собираться для всех типов киоск-приложений +и храниться в отдельном файле kiosk_apps.log. +Если правило отключено или не настроено, журналы киоск-приложений собираться не будут.</translation> <translation id="5746149754419996562">Разрешает виджеты Glanceables в <ph name="PRODUCT_OS_NAME" />, например те, доступ к которым можно получить с помощью чипа даты на панели запуска. Если правило включено, виджеты Glanceables разрешены в <ph name="PRODUCT_OS_NAME" />. Если правило отключено или не настроено, виджеты Glanceables запрещены в <ph name="PRODUCT_OS_NAME" />.</translation> @@ -8463,6 +8466,7 @@ <translation id="6907778402784621686">Блокировка небезопасного контента на текущих сайтах</translation> <translation id="6908335885425855120">Использовать для просмотра PDF-файлов окно iframe в отдельном процессе</translation> <translation id="6908640907898649429">Настройка поисковой системы по умолчанию. Можно указать поисковую систему по умолчанию, применяемую пользователем, или отключить поиск по умолчанию.</translation> +<translation id="6910715067772088598">Запретить сбор журналов киоск-приложений</translation> <translation id="6913068954484253496">Разрешить <ph name="PRODUCT_NAME" /> подключаться к устройствам Google Cast на всех IP-адресах</translation> <translation id="6915493311660114995">Если правило включено, <ph name="PRODUCT_NAME" /> будет разрешать запросы веб-аутентификации на сайтах, в TLS-сертификатах которых есть ошибки (такие сайты считаются небезопасными). @@ -8538,6 +8542,7 @@ Если правило не настроено, принтеры не связаны с конкретными устройствами, а другие правила <ph name="DEVICE_PRINTERS_POLICY_PATTERN" /> игнорируются.</translation> <translation id="69525503251220566">Параметр функции поиска изображений для поисковой системы по умолчанию</translation> <translation id="6953102253399571439">Разрешить печать с вводом PIN-кода по умолчанию</translation> +<translation id="695532899547292238">Разрешить сбор журналов киоск-приложений</translation> <translation id="6956272732789158625">Запретить всем сайтам создавать ключи</translation> <translation id="6960996423652450945">Отключить подсветку текстового курсора на экране входа</translation> <translation id="6961602002757991199">Если задан действительный URL, <ph name="PRODUCT_NAME" /> скачивает список относящихся к этому URL сайтов и применяет элементы списка так же, как и при использовании правила <ph name="BROWSER_SWITCHER_URL_GREYLIST_POLICY_NAME" />. Эти правила не позволяют <ph name="PRODUCT_NAME" /> открывать альтернативный браузер, и наоборот. @@ -9341,6 +9346,7 @@ <translation id="7586199729147257934">Предоставление сертификатов клиента для управляемых браузеров</translation> <translation id="7587345076013230465">Предлагать пользователю выбрать сертификат клиента, если правилу автоматического выбора соответствует несколько сертификатов на экране входа</translation> <translation id="7587921466180902617">Включить тестовую версию Screencast для пользователей Family Link</translation> +<translation id="7588140323025689972">Разрешить сбор журналов киоск-приложений</translation> <translation id="7595074040612182185">Позволяет задать список шаблонов URL, чтобы указать сайты, на которых разрешен показ изображений. Если правило ImagesAllowedForUrls не настроено, все сайты следуют правилу <ph name="DEFAULT_IMAGES_SETTING_ENABLED_POLICY_NAME" /> при условии, что оно задано. Если второе правило не задано, действуют персональные настройки пользователя.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 9932fe80..ce32a32 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -6656,6 +6656,9 @@ <translation id="5740636973289452345">เปิดใช้การรายงานข้อมูลส่วนขยายและปลั๊กอิน</translation> <translation id="5740716956489996914">ใช้ลักษณะการทำงานที่เป็นค่าเริ่มต้นเมื่อกำหนดว่าเว็บไซต์ต่างๆ จะส่งคำขอไปยังอุปกรณ์ปลายทางของเครือข่ายภายในได้หรือไม่</translation> <translation id="5741110260062082926">ปิดใช้ Orca</translation> +<translation id="5746126833785204233">การตั้งค่านโยบายเป็น "เปิดใช้" หมายความว่าระบบจะรวบรวมบันทึกระดับแอปพลิเคชันคีออสก์เมื่อแอปพลิเคชันคีออสก์ทำงานบนอุปกรณ์ ระบบจะรวบรวมบันทึกสําหรับแอปพลิเคชันคีออสก์ทุกประเภท +บันทึกเหล่านี้จะเก็บไว้ในไฟล์ kiosk_apps.log แยกต่างหาก +การไม่ตั้งค่านโยบายนี้หรือตั้งค่าเป็น "ปิดใช้" หมายความว่าระบบจะไม่เก็บบันทึกระดับแอปพลิเคชันคีออสก์</translation> <translation id="5746149754419996562">เปิดใช้การแสดงวิดเจ็ต Glanceables ใน <ph name="PRODUCT_OS_NAME" /> นั่นคือวิดเจ็ตที่เข้าถึงได้ผ่านชิปวันที่ในแถบ เมื่อเปิดใช้นโยบายนี้ ระบบจะเปิดใช้ Glanceables ใน <ph name="PRODUCT_OS_NAME" /> เมื่อปิดใช้หรือไม่ได้ตั้งค่านโยบายนี้ ระบบจะไม่เปิดใช้ Glanceables ใน <ph name="PRODUCT_OS_NAME" /></translation> @@ -8423,6 +8426,7 @@ <translation id="6907778402784621686">บล็อกเนื้อหาที่ไม่ปลอดภัยในเว็บไซต์เหล่านี้</translation> <translation id="6908335885425855120">ใช้โปรแกรมอ่าน PDF แบบ iframe นอกกระบวนการ</translation> <translation id="6908640907898649429">กำหนดค่าผู้ให้บริการการค้นหาเริ่มต้น คุณสามารถระบุผู้ให้บริการการค้นหาเริ่มต้นที่ผู้ใช้จะใช้หรือเลือกปิดใช้งานการค้นหาเริ่มต้น</translation> +<translation id="6910715067772088598">ปิดใช้บันทึกแอปพลิเคชันคีออสก์</translation> <translation id="6913068954484253496">อนุญาตให้ <ph name="PRODUCT_NAME" /> เชื่อมต่อกับอุปกรณ์แคสต์ในที่อยู่ IP ทั้งหมด</translation> <translation id="6915493311660114995">หากตั้งค่าเป็นเปิดใช้ "<ph name="PRODUCT_NAME" />" จะอนุญาตคำขอการตรวจสอบสิทธิ์ผ่านเว็บในเว็บไซต์ที่มีใบรับรอง TLS ว่ามีข้อผิดพลาด (เช่น เว็บไซต์ที่ถือว่าไม่ปลอดภัย) @@ -8498,6 +8502,7 @@ หากไม่ตั้งค่า จะไม่มีเครื่องพิมพ์ของอุปกรณ์และระบบจะเพิกเฉยต่อนโยบาย <ph name="DEVICE_PRINTERS_POLICY_PATTERN" /> อื่นๆ</translation> <translation id="69525503251220566">พารามิเตอร์ที่ให้ฟีเจอร์การค้นหาโดยภาพสำหรับผู้ให้บริการการค้นหาเริ่มต้น</translation> <translation id="6953102253399571439">เปิดใช้การพิมพ์ด้วย PIN โดยค่าเริ่มต้น</translation> +<translation id="695532899547292238">เปิดใช้การรวบรวมบันทึกแอปพลิเคชันคีออสก์</translation> <translation id="6956272732789158625">ไม่อนุญาตให้เว็บไซต์ใดๆ ใช้การสร้างคีย์</translation> <translation id="6960996423652450945">ปิดใช้การไฮไลต์เคอร์เซอร์ข้อความในหน้าจอการเข้าสู่ระบบ</translation> <translation id="6961602002757991199">การตั้งค่านโยบายนี้เป็น URL ที่ถูกต้องจะทำให้ <ph name="PRODUCT_NAME" /> ดาวน์โหลดรายการเว็บไซต์จาก URL นั้นและใช้กฎเหมือนกับว่าได้รับการกำหนดค่าด้วยนโยบาย <ph name="BROWSER_SWITCHER_URL_GREYLIST_POLICY_NAME" /> นโยบายเหล่านี้จะป้องกันไม่ให้ <ph name="PRODUCT_NAME" /> และเบราว์เซอร์สำรองเปิดกันได้ @@ -9299,6 +9304,7 @@ <translation id="7586199729147257934">เปิดใช้การจัดสรรใบรับรองไคลเอ็นต์สำหรับเบราว์เซอร์ที่มีการจัดการ</translation> <translation id="7587345076013230465">แสดงข้อความแจ้งให้ผู้ใช้เลือกใบรับรองไคลเอ็นต์เมื่อนโยบายการเลือกอัตโนมัติตรงกับใบรับรองหลายรายการบนหน้าจอการลงชื่อเข้าใช้</translation> <translation id="7587921466180902617">เปิดการลองใช้ Screencast สำหรับผู้ใช้ Family Link</translation> +<translation id="7588140323025689972">เปิดใช้บันทึกแอปพลิเคชันคีออสก์</translation> <translation id="7595074040612182185">การตั้งค่านโยบายนี้จะให้คุณสร้างรายการรูปแบบ URL ซึ่งระบุเว็บไซต์ที่อาจมีการแสดงรูปภาพได้ การไม่ตั้งค่านโยบายหมายความว่า <ph name="DEFAULT_IMAGES_SETTING_ENABLED_POLICY_NAME" /> จะมีผลกับทุกเว็บไซต์ (หากตั้งค่าไว้) แต่หากไม่ได้ตั้งค่าไว้ การตั้งค่าส่วนตัวของผู้ใช้จะมีผล
diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc index d9ce75c..965f898 100644 --- a/components/search_engines/template_url.cc +++ b/components/search_engines/template_url.cc
@@ -10,6 +10,7 @@ #include "components/search_engines/template_url.h" #include <algorithm> +#include <memory> #include <string> #include <string_view> #include <tuple> @@ -202,7 +203,7 @@ bool IsTemplateParameterString(const std::string& param) { return (param.length() > 2) && (*(param.begin()) == kStartParameter) && - (*(param.rbegin()) == kEndParameter); + (*(param.rbegin()) == kEndParameter); } std::string YandexSearchPathFromDeviceFormFactor() { @@ -256,8 +257,7 @@ TemplateURLRef::SearchTermsArgs::SearchTermsArgs(const SearchTermsArgs& other) = default; -TemplateURLRef::SearchTermsArgs::~SearchTermsArgs() { -} +TemplateURLRef::SearchTermsArgs::~SearchTermsArgs() {} size_t TemplateURLRef::SearchTermsArgs::EstimateMemoryUsage() const { size_t res = 0; @@ -310,8 +310,7 @@ const ContextualSearchParams& other) = default; TemplateURLRef::SearchTermsArgs::ContextualSearchParams:: - ~ContextualSearchParams() { -} + ~ContextualSearchParams() {} size_t TemplateURLRef::SearchTermsArgs::ContextualSearchParams::EstimateMemoryUsage() @@ -333,8 +332,7 @@ DCHECK_LT(index_in_owner_, owner_->alternate_urls().size()); } -TemplateURLRef::~TemplateURLRef() { -} +TemplateURLRef::~TemplateURLRef() {} TemplateURLRef::TemplateURLRef(const TemplateURLRef& source) = default; @@ -456,8 +454,8 @@ if (!valid_) return std::string(); - std::string url(HandleReplacements(search_terms_args, search_terms_data, - post_content)); + std::string url( + HandleReplacements(search_terms_args, search_terms_data, post_content)); GURL gurl(url); if (!gurl.is_valid()) @@ -526,8 +524,7 @@ ParseIfNecessary(search_terms_data); std::string result(GetURL()); if (valid_ && !replacements_.empty()) { - base::ReplaceSubstringsAfterOffset(&result, 0, - kSearchTermsParameterFull, + base::ReplaceSubstringsAfterOffset(&result, 0, kSearchTermsParameterFull, kDisplaySearchTerms); base::ReplaceSubstringsAfterOffset(&result, 0, kGoogleUnescapedSearchTermsParameterFull, @@ -540,11 +537,9 @@ std::string TemplateURLRef::DisplayURLToURLRef( const std::u16string& display_url) { std::string result = base::UTF16ToUTF8(display_url); - base::ReplaceSubstringsAfterOffset(&result, 0, - kDisplaySearchTerms, + base::ReplaceSubstringsAfterOffset(&result, 0, kDisplaySearchTerms, kSearchTermsParameterFull); - base::ReplaceSubstringsAfterOffset(&result, 0, - kDisplayUnescapedSearchTerms, + base::ReplaceSubstringsAfterOffset(&result, 0, kDisplayUnescapedSearchTerms, kGoogleUnescapedSearchTermsParameterFull); return result; } @@ -730,8 +725,7 @@ size_t end, std::string* url, Replacements* replacements) const { - DCHECK(start != std::string::npos && - end != std::string::npos && end > start); + DCHECK(start != std::string::npos && end != std::string::npos && end > start); size_t length = end - start - 1; bool optional = false; // Make a copy of |url| that can be referenced in StringPieces below. |url| is @@ -785,11 +779,11 @@ replacements->emplace_back( Replacement(TemplateURLRef::GOOGLE_PROCESSED_IMAGE_DIMENSIONS, start)); } else if (parameter == "google:imageURL") { - replacements->push_back(Replacement(TemplateURLRef::GOOGLE_IMAGE_URL, - start)); + replacements->push_back( + Replacement(TemplateURLRef::GOOGLE_IMAGE_URL, start)); } else if (parameter == "google:inputType") { - replacements->push_back(Replacement(TemplateURLRef::GOOGLE_INPUT_TYPE, - start)); + replacements->push_back( + Replacement(TemplateURLRef::GOOGLE_INPUT_TYPE, start)); } else if (parameter == "google:omniboxFocusType") { replacements->push_back( Replacement(TemplateURLRef::GOOGLE_OMNIBOX_FOCUS_TYPE, start)); @@ -809,8 +803,8 @@ replacements->push_back( Replacement(GOOGLE_CONTEXTUAL_SEARCH_CONTEXT_DATA, start)); } else if (parameter == "google:originalQueryForSuggestion") { - replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, - start)); + replacements->push_back( + Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, start)); } else if (parameter == "google:pageClassification") { replacements->push_back(Replacement(GOOGLE_PAGE_CLASSIFICATION, start)); } else if (parameter == "google:clientCacheTimeToLive") { @@ -886,7 +880,7 @@ bool* valid) const { *valid = false; std::string parsed_url = url; - for (size_t last = 0; last != std::string::npos; ) { + for (size_t last = 0; last != std::string::npos;) { last = parsed_url.find(kStartParameter, last); if (last != std::string::npos) { size_t template_end = parsed_url.find(kEndParameter, last); @@ -928,7 +922,7 @@ size_t replacements_size = replacements->size(); if (IsTemplateParameterString(value)) ParseParameter(0, value.length() - 1, &value, replacements); - PostParam param = { parts[0], value }; + PostParam param = {parts[0], value}; post_params->push_back(param); // If there was a replacement added, points its index to last added // PostParam. @@ -1003,9 +997,8 @@ void TemplateURLRef::ParseHostAndSearchTermKey( const SearchTermsData& search_terms_data) const { std::string url_string(GetURL()); - base::ReplaceSubstringsAfterOffset( - &url_string, 0, "{google:baseURL}", - search_terms_data.GoogleBaseURLValue()); + base::ReplaceSubstringsAfterOffset(&url_string, 0, "{google:baseURL}", + search_terms_data.GoogleBaseURLValue()); base::ReplaceSubstringsAfterOffset( &url_string, 0, "{google:baseSuggestURL}", search_terms_data.GoogleBaseSuggestURLValue()); @@ -1452,10 +1445,9 @@ case GOOGLE_UNESCAPED_SEARCH_TERMS: { std::string unescaped_terms; - base::UTF16ToCodepage(search_terms_args.search_terms, - input_encoding.c_str(), - base::OnStringConversionError::SKIP, - &unescaped_terms); + base::UTF16ToCodepage( + search_terms_args.search_terms, input_encoding.c_str(), + base::OnStringConversionError::SKIP, &unescaped_terms); HandleReplacement(std::string(), unescaped_terms, replacement, &url); break; } @@ -1592,7 +1584,6 @@ return url; } - // TemplateURL ---------------------------------------------------------------- TemplateURL::AssociatedExtensionInfo::AssociatedExtensionInfo( @@ -1603,8 +1594,7 @@ install_time(install_time), wants_to_be_default_engine(wants_to_be_default_engine) {} -TemplateURL::AssociatedExtensionInfo::~AssociatedExtensionInfo() { -} +TemplateURL::AssociatedExtensionInfo::~AssociatedExtensionInfo() {} size_t TemplateURL::AssociatedExtensionInfo::EstimateMemoryUsage() const { return base::trace_event::EstimateMemoryUsage(extension_id); @@ -1645,8 +1635,7 @@ extension_id, install_time, wants_to_be_default_engine); } -TemplateURL::~TemplateURL() { -} +TemplateURL::~TemplateURL() {} bool TemplateURL::IsBetterThanConflictingEngine( const TemplateURL* other) const { @@ -1866,15 +1855,15 @@ return KEYWORD_MODE_PREPOPULATED_ENGINE; } else if (data().starter_pack_id != 0) { switch (data().starter_pack_id) { - case TemplateURLStarterPackData::kBookmarks: + case template_url_starter_pack_data::kBookmarks: return KEYWORD_MODE_STARTER_PACK_BOOKMARKS; - case TemplateURLStarterPackData::kHistory: + case template_url_starter_pack_data::kHistory: return KEYWORD_MODE_STARTER_PACK_HISTORY; - case TemplateURLStarterPackData::kTabs: + case template_url_starter_pack_data::kTabs: return KEYWORD_MODE_STARTER_PACK_TABS; - case TemplateURLStarterPackData::kGemini: + case template_url_starter_pack_data::kGemini: return KEYWORD_MODE_STARTER_PACK_GEMINI; - case TemplateURLStarterPackData::kPage: + case template_url_starter_pack_data::kPage: return KEYWORD_MODE_STARTER_PACK_PAGE; default: // In theory, this code path should never be reached. However, it's @@ -1903,7 +1892,7 @@ const SearchTermsData& search_terms_data) const { std::u16string search_terms; return ExtractSearchTermsFromURL(url, search_terms_data, &search_terms) && - !search_terms.empty(); + !search_terms.empty(); } bool TemplateURL::KeepSearchTermsInURL(const GURL& url, @@ -2178,7 +2167,8 @@ // Try to match with every pattern. for (const TemplateURLRef& ref : url_refs_) { if (ref.ExtractSearchTermsFromURL(url, search_terms, search_terms_data, - search_term_component, search_terms_position)) { + search_term_component, + search_terms_position)) { // If ExtractSearchTermsFromURL() returns true and |search_terms| is empty // it means the pattern matched but no search terms were present. In this // case we fail immediately without looking for matches in subsequent
diff --git a/components/search_engines/template_url_data_util.cc b/components/search_engines/template_url_data_util.cc index 38da87e1..74a0476a 100644 --- a/components/search_engines/template_url_data_util.cc +++ b/components/search_engines/template_url_data_util.cc
@@ -4,8 +4,10 @@ #include "components/search_engines/template_url_data_util.h" +#include <memory> #include <string> #include <string_view> +#include <vector> #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" @@ -504,7 +506,7 @@ } std::unique_ptr<TemplateURLData> TemplateURLDataFromStarterPackEngine( - const TemplateURLStarterPackData::StarterPackEngine& engine) { + const template_url_starter_pack_data::StarterPackEngine& engine) { auto turl = std::make_unique<TemplateURLData>(); turl->SetShortName(l10n_util::GetStringUTF16(engine.name_message_id)); turl->SetKeyword(u"@" + l10n_util::GetStringUTF16(engine.keyword_message_id));
diff --git a/components/search_engines/template_url_data_util.h b/components/search_engines/template_url_data_util.h index 3cae8b6..a05ac3fd9 100644 --- a/components/search_engines/template_url_data_util.h +++ b/components/search_engines/template_url_data_util.h
@@ -12,7 +12,7 @@ namespace TemplateURLPrepopulateData { struct PrepopulatedEngine; } -namespace TemplateURLStarterPackData { +namespace template_url_starter_pack_data { struct StarterPackEngine; } @@ -38,6 +38,6 @@ // Creates a TemplateURLData structure from a StarterPackEngine struct. std::unique_ptr<TemplateURLData> TemplateURLDataFromStarterPackEngine( - const TemplateURLStarterPackData::StarterPackEngine& engine); + const template_url_starter_pack_data::StarterPackEngine& engine); #endif // COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_DATA_UTIL_H_
diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc index 4351a245..79469d4 100644 --- a/components/search_engines/template_url_service.cc +++ b/components/search_engines/template_url_service.cc
@@ -1464,7 +1464,7 @@ Scoper scoper(this); std::vector<std::unique_ptr<TemplateURLData>> starter_pack_engines = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); DCHECK(!starter_pack_engines.empty()); ActionsFromCurrentData actions(CreateActionsFromCurrentStarterPackData( &starter_pack_engines, template_urls_)); @@ -2360,7 +2360,7 @@ // might happen occasionally when the starter pack gets new entries that are // not yet supported in this version of Chrome. if (specifics.starter_pack_id() >= - TemplateURLStarterPackData::kMaxStarterPackID) { + template_url_starter_pack_data::kMaxStarterPackId) { return nullptr; }
diff --git a/components/search_engines/template_url_service_util_unittest.cc b/components/search_engines/template_url_service_util_unittest.cc index 0464a69c..fc2a02f 100644 --- a/components/search_engines/template_url_service_util_unittest.cc +++ b/components/search_engines/template_url_service_util_unittest.cc
@@ -5,6 +5,8 @@ #include <stddef.h> #include <memory> +#include <string> +#include <vector> #include "base/check_deref.h" #include "base/files/scoped_temp_dir.h" @@ -331,7 +333,7 @@ os_crypt_.get()); size_t keyword_engines_count = template_urls.size() - - TemplateURLStarterPackData::GetStarterPackEngines().size(); + template_url_starter_pack_data::GetStarterPackEngines().size(); return { .data_version = resource_metadata.builtin_keyword_data_version,
diff --git a/components/search_engines/template_url_starter_pack_data.cc b/components/search_engines/template_url_starter_pack_data.cc index 6f0da96..05a06411 100644 --- a/components/search_engines/template_url_starter_pack_data.cc +++ b/components/search_engines/template_url_starter_pack_data.cc
@@ -4,15 +4,17 @@ #include "components/search_engines/template_url_starter_pack_data.h" +#include <memory> +#include <string> +#include <vector> + #include "base/strings/utf_string_conversions.h" -#include "components/omnibox/common/omnibox_features.h" #include "components/search_engines/search_engine_type.h" #include "components/search_engines/template_url_data.h" #include "components/search_engines/template_url_data_util.h" #include "components/strings/grit/components_strings.h" -#include "ui/base/l10n/l10n_util.h" -namespace TemplateURLStarterPackData { +namespace template_url_starter_pack_data { // Update this whenever a change is made to any starter pack data. const int kCurrentDataVersion = 12; @@ -28,7 +30,7 @@ .favicon_url = nullptr, .search_url = "chrome://bookmarks/?q={searchTerms}", .destination_url = "chrome://bookmarks", - .id = StarterPackID::kBookmarks, + .id = StarterPackId::kBookmarks, .type = SEARCH_ENGINE_STARTER_PACK_BOOKMARKS, }; @@ -38,7 +40,7 @@ .favicon_url = nullptr, .search_url = "chrome://history/?q={searchTerms}", .destination_url = "chrome://history", - .id = StarterPackID::kHistory, + .id = StarterPackId::kHistory, .type = SEARCH_ENGINE_STARTER_PACK_HISTORY, }; @@ -51,17 +53,17 @@ // only provide suggestions from the OpenTabProvider. .search_url = "chrome://tabs/?q={searchTerms}", .destination_url = "http://support.google.com/chrome/?p=tab_search", - .id = StarterPackID::kTabs, + .id = StarterPackId::kTabs, .type = SEARCH_ENGINE_STARTER_PACK_TABS, }; -const StarterPackEngine Gemini = { +const StarterPackEngine gemini = { .name_message_id = IDS_SEARCH_ENGINES_STARTER_PACK_GEMINI_NAME, .keyword_message_id = IDS_SEARCH_ENGINES_STARTER_PACK_GEMINI_KEYWORD, .favicon_url = nullptr, .search_url = "https://gemini.google.com/app?q={searchTerms}", .destination_url = "https://gemini.google.com", - .id = StarterPackID::kGemini, + .id = StarterPackId::kGemini, .type = SEARCH_ENGINE_STARTER_PACK_GEMINI, }; @@ -71,12 +73,12 @@ .favicon_url = nullptr, .search_url = "chrome://page/?q={searchTerms}", .destination_url = "chrome://page", - .id = StarterPackID::kPage, + .id = StarterPackId::kPage, .type = SEARCH_ENGINE_STARTER_PACK_PAGE, }; const StarterPackEngine* engines[] = { - &bookmarks, &history, &tabs, &Gemini, &page, + &bookmarks, &history, &tabs, &gemini, &page, }; int GetDataVersion() { @@ -96,7 +98,7 @@ return t_urls; } -std::u16string GetDestinationUrlForStarterPackID(int id) { +std::u16string GetDestinationUrlForStarterPackId(int id) { for (auto* engine : engines) { if (engine->id == id) { return base::UTF8ToUTF16(engine->destination_url); @@ -106,4 +108,4 @@ return u""; } -} // namespace TemplateURLStarterPackData +} // namespace template_url_starter_pack_data
diff --git a/components/search_engines/template_url_starter_pack_data.h b/components/search_engines/template_url_starter_pack_data.h index 6b393b7..d44f6b1 100644 --- a/components/search_engines/template_url_starter_pack_data.h +++ b/components/search_engines/template_url_starter_pack_data.h
@@ -19,7 +19,7 @@ // search the web. Instead, they use the built-in omnibox providers to provide // suggestions. This file defines those search engines and util functions. -namespace TemplateURLStarterPackData { +namespace template_url_starter_pack_data { typedef enum { kBookmarks = 1, @@ -28,8 +28,8 @@ kGemini = 4, kPage = 5, - kMaxStarterPackID -} StarterPackID; + kMaxStarterPackId +} StarterPackId; struct StarterPackEngine { int name_message_id; @@ -37,7 +37,7 @@ const char* const favicon_url; const char* const search_url; const char* const destination_url; - const StarterPackID id; + const StarterPackId id; const SearchEngineType type; }; @@ -48,7 +48,7 @@ extern const StarterPackEngine bookmarks; extern const StarterPackEngine history; extern const StarterPackEngine tabs; -extern const StarterPackEngine Gemini; +extern const StarterPackEngine gemini; extern const StarterPackEngine page; // Returns the current version of the starterpack data, so callers can know when @@ -64,8 +64,8 @@ // Returns the destination url for the starter pack engine associated with a // given starter pack id. -std::u16string GetDestinationUrlForStarterPackID(int id); +std::u16string GetDestinationUrlForStarterPackId(int id); -} // namespace TemplateURLStarterPackData +} // namespace template_url_starter_pack_data #endif // COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_STARTER_PACK_DATA_H_
diff --git a/components/search_engines/util.cc b/components/search_engines/util.cc index 6280078..dd2a091 100644 --- a/components/search_engines/util.cc +++ b/components/search_engines/util.cc
@@ -59,7 +59,7 @@ } const int starter_pack_data_version = - TemplateURLStarterPackData::GetDataVersion(); + template_url_starter_pack_data::GetDataVersion(); if (keywords_metadata.starter_pack_version < starter_pack_data_version) { out_metadata.starter_pack_version = starter_pack_data_version; } @@ -384,7 +384,7 @@ DCHECK(template_urls); std::vector<std::unique_ptr<TemplateURLData>> starter_pack_urls = - TemplateURLStarterPackData::GetStarterPackEngines(); + template_url_starter_pack_data::GetStarterPackEngines(); ActionsFromCurrentData actions(CreateActionsFromCurrentStarterPackData( &starter_pack_urls, *template_urls, merge_option)); @@ -562,7 +562,7 @@ if (required_metadata.HasStarterPackData()) { bool overwrite_user_edits = (in_out_keywords_metadata.starter_pack_version < - TemplateURLStarterPackData::GetFirstCompatibleDataVersion()); + template_url_starter_pack_data::GetFirstCompatibleDataVersion()); MergeEnginesFromStarterPackData( service, template_urls, default_search_provider, removed_keyword_guids, (overwrite_user_edits ? TemplateURLMergeOption::kOverwriteUserEdits
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index de28756..9a19381a 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -1649,7 +1649,7 @@ <translation id="3754210790023674521">الخروج من وضع "نافذة ضمن نافذة"</translation> <translation id="3759461132968374835">ليس لديك أي أعطال تم الإبلاغ عنها مؤخرًا. الأعطال التي حدثت عندما تم إيقاف الإبلاغ عن الأعطال لن تظهر هنا.</translation> <translation id="3760561303380396507">هل تريد استخدام Windows Hello بدلاً من رمز التحقق من البطاقة (CVC)؟</translation> -<translation id="3761171036307311438">الاسم كما على البطاقة:</translation> +<translation id="3761171036307311438">الاسم المكتوب على البطاقة</translation> <translation id="3761718714832595332">إخفاء الحالة</translation> <translation id="3763752038825281594">لم تسمح في السابق باستخدام <ph name="PERMISSION" /> لهذا الموقع الإلكتروني</translation> <translation id="3765588406864124894">صندوق البريد الإلكتروني 9</translation> @@ -2253,7 +2253,7 @@ <translation id="4800132727771399293">تحقق من تاريخ انتهاء الصلاحية ورمز التحقق من البطاقة (CVC) وأعد المحاولة مرة أخرى.</translation> <translation id="4800546479758254481">تم السماح باستخدام الواقع المعزّز</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> -<translation id="4807098396393229769">الاسم كما على البطاقة</translation> +<translation id="4807098396393229769">الاسم المكتوب على البطاقة</translation> <translation id="4809079943450490359">تعليمات من مشرف الجهاز:</translation> <translation id="4811450222531576619">الاطّلاع على مصدر الصفحة وموضوعها</translation> <translation id="4813512666221746211">حدث خطأ في الشبكة</translation> @@ -3184,7 +3184,7 @@ <translation id="6386565501269869892">ظرف You 4</translation> <translation id="6387645831795005740">يحاكي المخترِقون أحيانًا المواقع الإلكترونية من خلال إجراء تغييرات بسيطة يصعب رؤيتها على عنوان URL.</translation> <translation id="6388060462449937608">معدّات لياقة بدنية وملحقاتها</translation> -<translation id="6389470377220713856">الاسم الوارد على البطاقة</translation> +<translation id="6389470377220713856">الاسم المكتوب على البطاقة</translation> <translation id="6390200185239044127">الطي إلى نصفَين على شكل حرف Z</translation> <translation id="639068771471208680">نموذج متعدد الأجزاء</translation> <translation id="6391700400718590966">تم إغلاق صفحة عدم تطابق بيانات اعتماد الدفع الآمن.</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index c6abc84..7953a089 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -694,6 +694,7 @@ <translation id="2157640075051554492">দাম ট্র্যাক করার বিজ্ঞপ্তি</translation> <translation id="21613918653299710">অনলাইন ছবি সংক্রান্ত গ্যালারি</translation> <translation id="2161656808144014275">পাঠ্য</translation> +<translation id="2162435186600002085">প্রাথমিক হেডারের লোগো</translation> <translation id="2162620598375156287">এখন <ph name="SOURCE_WEBSITE" />-এ <ph name="CURRENT_PRICE" /></translation> <translation id="2164510882479075877"><ph name="HOST_NAME" />-এ কোনও বানান ভুল লেখা হয়েছে কিনা তা চেক করে দেখুন।</translation> <translation id="2166049586286450108">পূর্ণ প্রশাসক অ্যাক্সেস</translation> @@ -852,6 +853,7 @@ <translation id="2400263725572336749">পাসপোর্ট সম্পর্কিত তথ্য যোগ করুন</translation> <translation id="2400271059665846158">Google Wallet থেকে আপনার লয়ালটি কার্ড ম্যানেজ করুন</translation> <translation id="2400600116338235695">সিরিয়াল পোর্টের সাথে কানেক্ট করতে অনুমতি চাইতে পারে</translation> +<translation id="240450251994300576">দ্বিতীয় হেডারের লোগো</translation> <translation id="2404884497378469141">আপনার ফাইল আবার কপি করার চেষ্টা করে দেখুন</translation> <translation id="2413155254802890957">পুরনো</translation> <translation id="2413528052993050574">এই সার্ভার প্রমাণ করতে পারেনি যে এটি <ph name="DOMAIN" />; এর নিরাপত্তা সার্টিফিকেট প্রত্যাহার করা হতে পারে। কোনো ভুল কনফিগারেশনের কারণে অথবা কোনো আক্রমণকারী আপনার সংযোগ মাঝপথে আটকে দিচ্ছে বলে এমনটা হতে পারে।</translation> @@ -982,6 +984,7 @@ <translation id="2627847595568876492">পিডিএফ থেকে টেক্সট এক্সট্র্যাক্ট করা হচ্ছে...</translation> <translation id="2628224721443278970">Microsoft OneDrive-এ সাইন-ইন করুন</translation> <translation id="2634124572758952069"><ph name="HOST_NAME" />-এর সার্ভার আইপি অ্যাড্রেস পাওয়া যায়নি।</translation> +<translation id="2638567100095052009"><ph name="FEATURED_SEARCH_LIST" /> জুড়ে সার্চ করতে @ টাইপ করুন</translation> <translation id="2639739919103226564">স্থিতি: </translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">ফ্যাব্রিক (সেমি-গ্লস)</translation> @@ -2268,6 +2271,7 @@ <translation id="4827283332383516812">কার্ড মুছে দিন</translation> <translation id="4830443836091007686"><ph name="ITEMS" />টি বেছে নেওয়া হয়েছে</translation> <translation id="4831993743164297314">ইমেজ সেটার পেপার</translation> +<translation id="4832388034239846146">ট্যাব গ্রুপ শেয়ার করতে, Chrome আপডেট করুন</translation> <translation id="483241715238664915">সতর্কতা চালু করুন</translation> <translation id="4832961164064927107">বার্বিকিউ ও গ্রিলিং</translation> <translation id="4834250788637067901">Google Pay-এর সাথে যুক্ত পেমেন্ট পদ্ধতি, অফার ও ঠিকানা</translation> @@ -2975,6 +2979,7 @@ <translation id="6043357981274314628">হয়ে গেছে!</translation> <translation id="6044573915096792553">সাইজ ১২</translation> <translation id="6045164183059402045">ইম্পোজিশন টেমপ্লেট</translation> +<translation id="6046892054959167494"><ph name="SEARCH_AGGREGATOR_SHORT_NAME" /> সার্চ বা এই সম্পর্কে প্রশ্ন করতে <ph name="SEARCH_AGGREGATOR_KEYWORD" /> টাইপ করুন</translation> <translation id="6047927260846328439">এই কন্টেন্ট প্রতারণার মাধ্যমে আপনাকে দিয়ে কোনও সফ্টওয়্যার ইনস্টল করাতে অথবা আপনার ব্যক্তিগত তথ্য জেনে নেওয়ার চেষ্টা করতে পারে। <ph name="BEGIN_LINK" />তবুও এটি দেখতে চাই<ph name="END_LINK" /></translation> <translation id="6049056807983403918">এনভেলপ B4</translation> <translation id="6049488691372270142">পৃষ্ঠার ডেলিভারি</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 7d916f4a..6497b19 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">Ειδοποιήσεις παρακολούθησης τιμών</translation> <translation id="21613918653299710">Συλλογές εικόνων στο διαδίκτυο</translation> <translation id="2161656808144014275">Κείμενο</translation> +<translation id="2162435186600002085">Λογότυπο κύριας κεφαλίδας</translation> <translation id="2162620598375156287">Τώρα <ph name="CURRENT_PRICE" /> στο <ph name="SOURCE_WEBSITE" /></translation> <translation id="2164510882479075877">Ελέγξτε μήπως υπάρχει κάποιο ορθογραφικό λάθος στη διεύθυνση <ph name="HOST_NAME" />.</translation> <translation id="2166049586286450108">Πλήρης πρόσβαση διαχειριστή</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">Προσθήκη διαβατηρίου</translation> <translation id="2400271059665846158">Διαχείριση των καρτών επιβράβευσης αφοσιωμένων πελατών στο Πορτοφόλι Google</translation> <translation id="2400600116338235695">Μπορεί να ζητά να συνδεθεί σε σειριακές θύρες.</translation> +<translation id="240450251994300576">Λογότυπο δευτερεύουσας κεφαλίδας</translation> <translation id="2404884497378469141">Δοκιμάστε να αντιγράψετε ξανά τα αρχεία σας</translation> <translation id="2413155254802890957">Παλαιά</translation> <translation id="2413528052993050574">Ο διακομιστής δεν κατάφερε να αποδείξει ότι είναι <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του μπορεί να έχει ανακληθεί. Αυτό μπορεί να οφείλεται σε λανθασμένη ρύθμιση ή σε κάποιον τρίτο που επιτίθεται στη σύνδεσή σας.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">Εξαγωγή κειμένου από PDF…</translation> <translation id="2628224721443278970">Σύνδεση στο Microsoft OneDrive</translation> <translation id="2634124572758952069">Δεν ήταν δυνατή η εύρεση της διεύθυνσης IP διακομιστή του κεντρικού υπολογιστή <ph name="HOST_NAME" />.</translation> +<translation id="2638567100095052009">Πληκτρολογήστε @ για αναζήτηση σε <ph name="FEATURED_SEARCH_LIST" /></translation> <translation id="2639739919103226564">Κατάσταση:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">Ύφασμα (Ημι-γυαλιστερό)</translation> @@ -2268,6 +2271,7 @@ <translation id="4827283332383516812">Διαγραφή κάρτας</translation> <translation id="4830443836091007686">Επιλέχθηκαν <ph name="ITEMS" /></translation> <translation id="4831993743164297314">Χαρτί φωτοστοιχειοθετικής μηχανής</translation> +<translation id="4832388034239846146">Για να μοιραστείτε ομάδες καρτελών, ενημερώστε το Chrome</translation> <translation id="483241715238664915">Ενεργοποίηση ειδοποιήσεων</translation> <translation id="4832961164064927107">Μπάρμπεκιου και ψητά</translation> <translation id="4834250788637067901">Τρόποι πληρωμής, προσφορές και διευθύνσεις μέσω Google Pay</translation> @@ -2976,6 +2980,7 @@ <translation id="6043357981274314628">Τέλος!</translation> <translation id="6044573915096792553">Μέγεθος 12</translation> <translation id="6045164183059402045">Πρότυπο ένθεσης</translation> +<translation id="6046892054959167494">Πληκτρολογήστε <ph name="SEARCH_AGGREGATOR_KEYWORD" /> για αναζήτηση ή ρωτήστε το <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /></translation> <translation id="6047927260846328439">Αυτό το περιεχόμενο μπορεί να προσπαθήσει να σας εξαπατήσει έτσι ώστε να εγκαταστήσετε λογισμικό ή να αποκαλύψετε προσωπικά στοιχεία. <ph name="BEGIN_LINK" />Εμφάνιση ούτως ή άλλως<ph name="END_LINK" /></translation> <translation id="6049056807983403918">Φάκελος B4</translation> <translation id="6049488691372270142">Παράδοση σελίδας</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index d3f1ea1..b6c6f51 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">Notificaciones de seguimiento de precios</translation> <translation id="21613918653299710">Galerías de imágenes online</translation> <translation id="2161656808144014275">Texto</translation> +<translation id="2162435186600002085">Logotipo del encabezado principal</translation> <translation id="2162620598375156287">Ahora, por <ph name="CURRENT_PRICE" /> en <ph name="SOURCE_WEBSITE" /></translation> <translation id="2164510882479075877">Comprueba si hay un error de escritura en <ph name="HOST_NAME" />.</translation> <translation id="2166049586286450108">Acceso de administrador completo</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">Añadir pasaporte</translation> <translation id="2400271059665846158">Gestiona tus tarjetas de fidelización en Google Wallet</translation> <translation id="2400600116338235695">Puede solicitar permiso para conectarse a puertos serie</translation> +<translation id="240450251994300576">Logotipo del encabezado secundario</translation> <translation id="2404884497378469141">Prueba a copiar tus archivos de nuevo</translation> <translation id="2413155254802890957">Antigua</translation> <translation id="2413528052993050574">Este servidor no ha podido probar que su dominio es <ph name="DOMAIN" /> y se podría rechazar su certificado de seguridad. Este problema puede deberse a una configuración incorrecta o a que un atacante haya interceptado la conexión.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">Extrayendo texto del PDF...</translation> <translation id="2628224721443278970">Iniciar sesión en Microsoft OneDrive</translation> <translation id="2634124572758952069">No se ha podido encontrar la dirección IP del servidor de <ph name="HOST_NAME" />.</translation> +<translation id="2638567100095052009">Escribe @ para buscar en <ph name="FEATURED_SEARCH_LIST" /></translation> <translation id="2639739919103226564">Estado:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">Tela (semibrillante)</translation> @@ -2267,6 +2270,7 @@ <translation id="4827283332383516812">Eliminar tarjeta</translation> <translation id="4830443836091007686"><ph name="ITEMS" /> seleccionados</translation> <translation id="4831993743164297314">Papel de filmadora</translation> +<translation id="4832388034239846146">Para compartir grupos de pestañas, actualiza Chrome</translation> <translation id="483241715238664915">Activar advertencias</translation> <translation id="4832961164064927107">Barbacoas y parrilladas</translation> <translation id="4834250788637067901">Métodos de pago, ofertas y direcciones con Google Pay</translation> @@ -2974,6 +2978,7 @@ <translation id="6043357981274314628">Hecho.</translation> <translation id="6044573915096792553">Tamaño 12</translation> <translation id="6045164183059402045">Plantilla de imposición</translation> +<translation id="6046892054959167494">Escribe <ph name="SEARCH_AGGREGATOR_KEYWORD" /> para buscar o preguntar a <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /></translation> <translation id="6047927260846328439">Es posible que este contenido intente engañarte para que instales software o reveles información personal. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation> <translation id="6049056807983403918">Sobre B4</translation> <translation id="6049488691372270142">Entrega de página</translation> @@ -3143,6 +3148,7 @@ <translation id="6326947323444967009">Establece Chrome como navegador predeterminado del sistema en los ajustes de iOS</translation> <translation id="6327065120806001832">acceso a la red local</translation> <translation id="6328639280570009161">Prueba a inhabilitar la predicción de red</translation> +<translation id="6334834493885103305">Ahora puedes pagar a plazos con Affirm, Zip o Klarna</translation> <translation id="6335029926534404762">Calzado deportivo</translation> <translation id="6336948221660696475">Realidad virtual no permitida</translation> <translation id="6337133576188860026">Libera menos de <ph name="SIZE" />. Algunos sitios pueden tardar más en cargarse la próxima vez que accedas a ellos.</translation> @@ -4066,6 +4072,7 @@ <translation id="7878562273885520351">Es posible que tu contraseña se haya vulnerado</translation> <translation id="7881044256965445977">Buscar y conectarse a cualquier dispositivo de tu red local</translation> <translation id="7882421473871500483">Marrón</translation> +<translation id="7885670691503039914">Recibirás alertas por correo electrónico si el precio baja en algún sitio. Esta página se guardará en la carpeta de marcadores <ph name="LAST_BOOKMARKS_FOLDER" />.</translation> <translation id="7886897188117641322">Elige qué categorías amplias de temas se pueden usar para personalizar los anuncios</translation> <translation id="7887683347370398519">Comprueba el código CVC y vuelve a intentarlo</translation> <translation id="7887885240995164102">Activar el modo imagen en imagen</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 90ccbfe..4f11ffd 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -3143,6 +3143,7 @@ <translation id="6326947323444967009">iOS-i seadetes Chrome'i süsteemi vaikebrauseriks määramine</translation> <translation id="6327065120806001832">juurdepääs kohalikule võrgule</translation> <translation id="6328639280570009161">Proovige keelata võrguprognoos</translation> +<translation id="6334834493885103305">Nüüd saate tasuda Affirmi, Zipi või Klarna järelmaksuga</translation> <translation id="6335029926534404762">Spordijalatsid</translation> <translation id="6336948221660696475">VR ei ole lubatud</translation> <translation id="6337133576188860026">Vabastab alla <ph name="SIZE" />. Mõne saidi laadimine võib järgmisel külastusel rohkem aega võtta.</translation> @@ -4066,6 +4067,7 @@ <translation id="7878562273885520351">Teie parool võib olla ohus</translation> <translation id="7881044256965445977">Otsige mis tahes seadet oma kohalikus võrgus ja looge sellega ühendus</translation> <translation id="7882421473871500483">Pruun</translation> +<translation id="7885670691503039914">Teile saadetakse meiliteavitus, kui hind mõnel saidil langeb. See leht salvestatakse järjehoidjakausta <ph name="LAST_BOOKMARKS_FOLDER" />.</translation> <translation id="7886897188117641322">Valige, milliseid üldiseid teemade kategooriaid võib kasutada reklaamide isikupärastamise hõlbustamiseks</translation> <translation id="7887683347370398519">Kontrollige CVC-d ja proovige uuesti</translation> <translation id="7887885240995164102">Aktiveeri režiim Pilt pildis</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 24135f5..a8da431 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">કિંમત ટ્રૅક કરવા વિશેના નોટિફિકેશન</translation> <translation id="21613918653299710">ઑનલાઇન છબીની ગૅલરી</translation> <translation id="2161656808144014275">ટેક્સ્ટ</translation> +<translation id="2162435186600002085">પ્રાથમિક હેડરનો લોગો</translation> <translation id="2162620598375156287"><ph name="SOURCE_WEBSITE" /> પર હવે <ph name="CURRENT_PRICE" /> કિંમત છે</translation> <translation id="2164510882479075877">ચેક કરો કે <ph name="HOST_NAME" />માં કોઈ ટાઇપિંગ ભૂલ તો નથી ને.</translation> <translation id="2166049586286450108">સંપૂર્ણ વ્યવસ્થાપક ઍક્સેસ</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">પાસપોર્ટની માહિતી ઉમેરો</translation> <translation id="2400271059665846158">Google Walletમાં તમારા લૉયલ્ટિ કાર્ડ મેનેજ કરો</translation> <translation id="2400600116338235695">સીરિયલ પોર્ટ સાથે કનેક્ટ થવા માટે પૂછી શકે છે</translation> +<translation id="240450251994300576">ગૌણ હેડરનો લોગો</translation> <translation id="2404884497378469141">તમારી ફાઇલોની ફરીથી કૉપિ કરવાનો પ્રયાસ કરો</translation> <translation id="2413155254802890957">જૂનું</translation> <translation id="2413528052993050574">આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેનું સુરક્ષા પ્રમાણપત્ર રદબાતલ થયું હશે. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">PDFમાંથી ટેક્સ્ટ એક્સટ્રેક્ટ કરી રહ્યાં છીએ...</translation> <translation id="2628224721443278970">Microsoft OneDriveમાં સાઇન ઇન કરો</translation> <translation id="2634124572758952069"><ph name="HOST_NAME" />નું સર્વર IP ઍડ્રેસ ન મળ્યું.</translation> +<translation id="2638567100095052009">સમગ્ર <ph name="FEATURED_SEARCH_LIST" /> પર શોધવા માટે @ ટાઇપ કરો</translation> <translation id="2639739919103226564">સ્થિતિ:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">કાપડ (સેમી-ગ્લોસ)</translation> @@ -2267,6 +2270,7 @@ <translation id="4827283332383516812">કાર્ડ ડિલીટ કરો</translation> <translation id="4830443836091007686"><ph name="ITEMS" /> આઇટમ પસંદ કરી</translation> <translation id="4831993743164297314">ઇમેજ સેટર પેપર</translation> +<translation id="4832388034239846146">ટૅબના ગ્રૂપ શેર કરવા માટે, Chrome અપડેટ કરો</translation> <translation id="483241715238664915">ચેતવણીઓ ચાલુ કરો</translation> <translation id="4832961164064927107">BBQ અને ગ્રિલિંગ</translation> <translation id="4834250788637067901">Google Payનો ઉપયોગ કરતી ચુકવણી પદ્ધતિઓ, ઑફરો અને સરનામાં</translation> @@ -2974,6 +2978,7 @@ <translation id="6043357981274314628">થઈ ગયું!</translation> <translation id="6044573915096792553">કદ 12</translation> <translation id="6045164183059402045">લાગુ કરવા માટેનો નમૂનો</translation> +<translation id="6046892054959167494">શોધવા માટે <ph name="SEARCH_AGGREGATOR_KEYWORD" /> અથવા પૂછવા માટે <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /> ટાઇપ કરો</translation> <translation id="6047927260846328439">આ કન્ટેન્ટ કદાચ સૉફ્ટવેર ઇન્સ્ટૉલ કરવા માટે અથવા વ્યક્તિગત માહિતી કઢાવવા માટે તમારી સાથે કપટ કરવાનો પ્રયાસ કરી શકે છે. <ph name="BEGIN_LINK" />છતાં પણ બતાવો<ph name="END_LINK" /></translation> <translation id="6049056807983403918">એન્વલપ B4</translation> <translation id="6049488691372270142">પેજની ડિલિવરી</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 316d060..2a771fa 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">価格トラッキングの通知</translation> <translation id="21613918653299710">オンライン画像集</translation> <translation id="2161656808144014275">テキスト</translation> +<translation id="2162435186600002085">メインヘッダーのロゴ</translation> <translation id="2162620598375156287">現在の価格は <ph name="SOURCE_WEBSITE" /> で <ph name="CURRENT_PRICE" /></translation> <translation id="2164510882479075877"><ph name="HOST_NAME" /> にタイプミスがないか確認してください。</translation> <translation id="2166049586286450108">すべてのデータへの管理者アクセス</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">パスポートの追加</translation> <translation id="2400271059665846158">Google ウォレットでポイントカードを管理する</translation> <translation id="2400600116338235695">シリアルポートへの接続を要求できる</translation> +<translation id="240450251994300576">サブヘッダーのロゴ</translation> <translation id="2404884497378469141">ファイルをもう一度コピーしてみてください</translation> <translation id="2413155254802890957">旧</translation> <translation id="2413528052993050574">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書は取り消されている可能性があります。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">PDF からテキストを抽出しています...</translation> <translation id="2628224721443278970">Microsoft OneDrive にログイン</translation> <translation id="2634124572758952069"><ph name="HOST_NAME" /> のサーバーの IP アドレスが見つかりませんでした。</translation> +<translation id="2638567100095052009"><ph name="FEATURED_SEARCH_LIST" /> で検索するには、@ を入力してください</translation> <translation id="2639739919103226564">ステータス:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">布(半光沢)</translation> @@ -2267,6 +2270,7 @@ <translation id="4827283332383516812">カードを削除</translation> <translation id="4830443836091007686"><ph name="ITEMS" /> 件を選択中</translation> <translation id="4831993743164297314">イメージ セッター用紙</translation> +<translation id="4832388034239846146">タブグループを共有するには、Chrome を更新してください</translation> <translation id="483241715238664915">警告をオンにする</translation> <translation id="4832961164064927107">バーベキュー、グリル</translation> <translation id="4834250788637067901">Google Pay を使用したお支払方法、クーポン、住所</translation> @@ -2974,6 +2978,7 @@ <translation id="6043357981274314628">完了しました。</translation> <translation id="6044573915096792553">サイズ 12</translation> <translation id="6045164183059402045">面付けテンプレート</translation> +<translation id="6046892054959167494"><ph name="SEARCH_AGGREGATOR_KEYWORD" /> を入力して検索するか、<ph name="SEARCH_AGGREGATOR_SHORT_NAME" /> に質問してください</translation> <translation id="6047927260846328439">アクセス先のコンテンツは、ユーザーをだましてソフトウェアをインストールさせようとしたり、個人情報を危険にさらしたりする可能性があります。<ph name="BEGIN_LINK" />危険性を理解したうえで表示する<ph name="END_LINK" /></translation> <translation id="6049056807983403918">B4 封筒</translation> <translation id="6049488691372270142">排紙</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index 4973f15..cfe2511 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">შეტყობინებები ფასებისთვის თვალის მიდევნების შესახებ</translation> <translation id="21613918653299710">სურათების ონლაინგალერეები</translation> <translation id="2161656808144014275">ტექსტი</translation> +<translation id="2162435186600002085">ძირითადი სათაურის ლოგო</translation> <translation id="2162620598375156287"><ph name="SOURCE_WEBSITE" />-ზე ახლა <ph name="CURRENT_PRICE" /> ღირს</translation> <translation id="2164510882479075877">შეამოწმეთ, სწორად არის თუ არა აკრეფილი <ph name="HOST_NAME" />.</translation> <translation id="2166049586286450108">ადმინისტრატორის სრული წვდომა</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">პასპორტის დამატება</translation> <translation id="2400271059665846158">მართეთ თქვენი ერთგული კლიენტის ბარათები Google საფულეში</translation> <translation id="2400600116338235695">შეუძლია თანმიმდევრულ პორტებთან დაკავშირების თხოვნა</translation> +<translation id="240450251994300576">მეორეული სათაურის ლოგო</translation> <translation id="2404884497378469141">ცადეთ თქვენი ფაილების ხელახლა კოპირება</translation> <translation id="2413155254802890957">ძველი</translation> <translation id="2413528052993050574">ეს სერვერი ვერ ამტკიცებს რომ ის არის <ph name="DOMAIN" />; მისი უსაფრთხოების სერთიფიკატი შესაძლოა გაუქმებულია. ეს შეიძლება იყოს გამოწვეული არასწორი კონფიგურაციით ან თავდამსხმელის მიერ თქვენი კავშირის გადაჭრით.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">მიმდინარეობს PDF-დან ტექსტის ამოღება...</translation> <translation id="2628224721443278970">Microsoft OneDrive-ში შესვლა</translation> <translation id="2634124572758952069"><ph name="HOST_NAME" />-ის სერვერის IP მისამართი ვერ მოიძებნა.</translation> +<translation id="2638567100095052009">აკრიფეთ „@“, რომ მოიძიოთ აქ: <ph name="FEATURED_SEARCH_LIST" /></translation> <translation id="2639739919103226564">სტატუსი:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">ქსოვილი (ნახევარპრიალა)</translation> @@ -2267,6 +2270,7 @@ <translation id="4827283332383516812">ბარათის წაშლა</translation> <translation id="4830443836091007686">არჩეულია <ph name="ITEMS" /></translation> <translation id="4831993743164297314">ფოტოასაწყობი ქაღალდი</translation> +<translation id="4832388034239846146">ჩანართების ჯგუფის გასაზიარებლად განაახლეთ Chrome</translation> <translation id="483241715238664915">გაფრთხილებების ჩართვა</translation> <translation id="4832961164064927107">ბარბექიუ და გრილი</translation> <translation id="4834250788637067901">გადახდის მეთოდები, შემოთავაზებები და მისამართები Google Pay-დან</translation> @@ -2974,6 +2978,7 @@ <translation id="6043357981274314628">მზადაა!</translation> <translation id="6044573915096792553">ზომა 12</translation> <translation id="6045164183059402045">აწყობის შაბლონი</translation> +<translation id="6046892054959167494">აკრიფეთ „<ph name="SEARCH_AGGREGATOR_KEYWORD" />“, რომ მოიძიოთ <ph name="SEARCH_AGGREGATOR_SHORT_NAME" />-ში ან ჰკითხოთ მას</translation> <translation id="6047927260846328439">ამ კონტენტმა შეიძლება მოტყუებით დაგაინსტალირებინოთ პროგრამული უზრუნველყოფა ან გაგამჟღავნებინოთ პერსონალური ინფორმაცია. <ph name="BEGIN_LINK" />მაინც ჩვენება<ph name="END_LINK" /></translation> <translation id="6049056807983403918">კონვერტი B4</translation> <translation id="6049488691372270142">გვერდის მოწოდება</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index ba1c729..5767e47c 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">Бағаны қадағалау хабарландырулары</translation> <translation id="21613918653299710">Онлайн сурет галереялары</translation> <translation id="2161656808144014275">Мәтін</translation> +<translation id="2162435186600002085">Негізгі жоғарғы деректеме логотипі</translation> <translation id="2162620598375156287"><ph name="SOURCE_WEBSITE" /> сайтындағы қазіргі бағасы – <ph name="CURRENT_PRICE" />.</translation> <translation id="2164510882479075877"><ph name="HOST_NAME" /> қатесіз енгізілгенін тексеріңіз.</translation> <translation id="2166049586286450108">Әкімшінің бүкіл дерекке кіру рұқсаты</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">Паспорт қосу</translation> <translation id="2400271059665846158">Тұрақты клиент карталарын Google Wallet-те басқарыңыз.</translation> <translation id="2400600116338235695">Тізбекті порттарға қосылуға рұқсат сұрайды.</translation> +<translation id="240450251994300576">Қосымша жоғарғы деректеме логотипі</translation> <translation id="2404884497378469141">Файлдарды қайта көшіріп көріңіз</translation> <translation id="2413155254802890957">Ескі</translation> <translation id="2413528052993050574">Бұл сервер өзінің <ph name="DOMAIN" /> екенін дәлелдей алмады; оның қауіпсіздік сертификаты қайтарып алынған болуы мүмкін. Бұл дұрыс конфигурацияланбағаннан немесе зиянды бағдарламаның байланысқа кедергі келтіргенінен болуы мүмкін.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">PDF-тен мәтін алынып жатыр...</translation> <translation id="2628224721443278970">Microsoft OneDrive аккаунтына кіру</translation> <translation id="2634124572758952069"><ph name="HOST_NAME" /> серверінің IP мекенжайын табу мүмкін емес.</translation> +<translation id="2638567100095052009"><ph name="FEATURED_SEARCH_LIST" /> арқылы іздеу үшін @ деп теріңіз.</translation> <translation id="2639739919103226564">Күйі:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">Мата (жартылай жылтыр)</translation> @@ -2266,6 +2269,7 @@ <translation id="4827283332383516812">Картаны жою</translation> <translation id="4830443836091007686"><ph name="ITEMS" /> таңдалды</translation> <translation id="4831993743164297314">Сурет теру құралының қағазы</translation> +<translation id="4832388034239846146">Қойындылар топтарын бөлісу үшін Chrome-ды жаңартыңыз.</translation> <translation id="483241715238664915">Хабарландыруларды қосу</translation> <translation id="4832961164064927107">Гриль және барбекю</translation> <translation id="4834250788637067901">Google Pay қызметіндегі төлеу әдістері, ұсыныстар және мекенжайлар</translation> @@ -2973,6 +2977,7 @@ <translation id="6043357981274314628">Дайын!</translation> <translation id="6044573915096792553">Өлшемі: 12</translation> <translation id="6045164183059402045">Жолақтарды түсіру үлгісі</translation> +<translation id="6046892054959167494"><ph name="SEARCH_AGGREGATOR_SHORT_NAME" /> туралы іздеу немесе сұрау үшін <ph name="SEARCH_AGGREGATOR_KEYWORD" /> деп теріңіз.</translation> <translation id="6047927260846328439">Бұл контент бағдарламалық құрал орнату немесе жеке ақпаратыңызды көрсету мақсатында сізді алдауы мүмкін. <ph name="BEGIN_LINK" />Бәрібір көрсету<ph name="END_LINK" /></translation> <translation id="6049056807983403918">B4 хатқалтасы</translation> <translation id="6049488691372270142">Бетті беру</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index f595f61f..7bb56fb8 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -3152,6 +3152,7 @@ <translation id="6326947323444967009">កំណត់ Chrome ជាកម្មវិធីរុករកតាមអ៊ីនធឺណិតលំនាំដើមរបស់ប្រព័ន្ធនៅក្នុងការកំណត់ iOS</translation> <translation id="6327065120806001832">សិទ្ធិចូលប្រើបណ្ដាញមូលដ្ឋាន</translation> <translation id="6328639280570009161">សាកល្បងការបិទដំណើរការការព្យាករណ៍បណ្តាញ</translation> +<translation id="6334834493885103305">ឥឡូវនេះ អ្នកអាចបង់ប្រាក់ជាបន្តបន្ទាប់ដោយប្រើ Affirm, Zip ឬ Klarna បានហើយ</translation> <translation id="6335029926534404762">ស្បែកជើងកីឡា</translation> <translation id="6336948221660696475">មិនបានអនុញ្ញាតឱ្យប្រើ VR ទេ</translation> <translation id="6337133576188860026">បង្កើនទំហំផ្ទុកតិចជាង <ph name="SIZE" /> ។ ទំព័រមួយចំនួនអាចផ្ទុកយឺតជាងមុន នៅពេលដែលអ្នកចូលលើកក្រោយ។</translation> @@ -4075,6 +4076,7 @@ <translation id="7878562273885520351">ពាក្យសម្ងាត់របស់អ្នកអាចត្រូវបានគេលួចប្រើ</translation> <translation id="7881044256965445977">រកមើល និងភ្ជាប់ជាមួយឧបករណ៍ណាមួយនៅលើបណ្ដាញមូលដ្ឋានរបស់អ្នក</translation> <translation id="7882421473871500483">ត្នោត</translation> +<translation id="7885670691503039914">អ្នកនឹងទទួលបានការជូនដំណឹងតាមអ៊ីមែល ប្រសិនបើមានការធ្លាក់ថ្លៃនៅលើគេហទំព័រណាមួយ។ ទំព័រនេះនឹងត្រូវបានរក្សាទុកទៅថតចំណាំ <ph name="LAST_BOOKMARKS_FOLDER" />។</translation> <translation id="7886897188117641322">ជ្រើសរើសប្រភេទប្រធានបទទូលំទូលាយដែលអាចត្រូវបានប្រើដើម្បីជួយកំណត់ការផ្សាយពាណិជ្ជកម្មឱ្យមានលក្ខណៈផ្ទាល់ខ្លួន</translation> <translation id="7887683347370398519">ពិនិត្យលេខកូដ CVC ហើយព្យាយាមម្តងទៀត</translation> <translation id="7887885240995164102">ចូលមុខងាររូបក្នុងរូប</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index d084c04..aa30a44 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -358,6 +358,7 @@ <translation id="1593359183944365958">270 градус</translation> <translation id="1594030484168838125">Тандоо</translation> <translation id="1597307423671074806">WebM видеосу</translation> +<translation id="159800670740560023">Chrome кеңешинин шилтемеси. <ph name="IPH_LINK_FOCUSED_LINK_TEXT" /> кеңешин ачуу үчүн Enter баскычын басыңыз</translation> <translation id="1599199147673445968">Жаңы картабы? <ph name="BEGIN_LINK" />Картанын чоо-жайын киргизиңиз<ph name="END_LINK" /></translation> <translation id="1601786938618212857">Zip</translation> <translation id="1604192142734009334">Сулуулук жана фитнес</translation> @@ -835,6 +836,7 @@ <translation id="2383455408879745299">Chrome жөндөөлөрүндө атайын мүмкүнчүлүктөр куралдарын жекелештирүү</translation> <translation id="2384307209577226199">Демейки ишкана</translation> <translation id="238459632961158867">Вебсайт</translation> +<translation id="2384823392576123225">Кыстармаларды издөө</translation> <translation id="2385809941344967209">Chrome'дун параметрлерине өтүп, Chrome'ду жаңыртыңыз</translation> <translation id="2386255080630008482">Сервер тастыктамасы жокко чыгарылды.</translation> <translation id="2388828676877700238">Салык төлөөгө даярдануу жана пландоо</translation> @@ -1449,6 +1451,7 @@ <translation id="3461266716147554923"><ph name="URL" /> алмашуу буферине көчүрүлгөн текстти жана сүрөттөрдү көргөнү жатат</translation> <translation id="3461824795358126837">Бөлүп көрсөткүч</translation> <translation id="3462200631372590220">Өркүндөтүлгөндөрдү жашыруу</translation> +<translation id="3462288464915106745"><ph name="CONTEXTUAL_SEARCH_OPEN_LENS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google'дан бул бет жөнүндө суроо үчүн Enter баскычын басыңыз</translation> <translation id="3465972433695735758">Бул PDF жеткиликсиз. Текст Google'дун жасалма интеллекти аркылуу чыгарылды</translation> <translation id="346601286295919445">Химия</translation> <translation id="3467081767799433066">Жарнамаларды талдоо аркылуу сайттар бири-бири менен чектелген маалымат түрлөрүн (мисалы, товарды сайтка өткөндөн кийин сатып алганыңыз) бөлүшүп, жарнамаларынын майнаптуулугун талдай алышат.</translation> @@ -2056,6 +2059,7 @@ <translation id="444116852243722675">Баарын ачуу (<ph name="ITEMS" />)</translation> <translation id="4441832193888514600">Четке кагылды, анткени саясатты булуттагы колдонуучулар үчүн саясат катары гана коюуга болот.</translation> <translation id="4445133368066241428">Таанымал темалар</translation> +<translation id="4445694043187340808"><ph name="STARTER_PACK_TABS_FOCUSED_FRIENDLY_MATCH_TEXT" />, өтмөктөрдү издөө үчүн Enter баскычын басыңыз</translation> <translation id="4445964943162061557">Бул сынамык функция жана ал ар дайым туура иштебейт.</translation> <translation id="4449116177348980384">"Сайттын жөндөөлөрүн башкаруу" баскычы. Chrome параметрлеринен уруксаттарды жана сайттарда сакталган маалыматтарды башкаруу үчүн иштетиңиз</translation> <translation id="4451135742916150903">HID түзмөктөрүнө туташууга уруксат сурай алат</translation> @@ -2251,6 +2255,7 @@ <translation id="4811450222531576619">Булагы жана темасы тууралуу кеңири маалымат</translation> <translation id="4813512666221746211">Тармактык ката</translation> <translation id="4814114628197290459">IBAN кодун өчүрүү</translation> +<translation id="4816341377198595747">Кыстармаларды издөө баскычы. Кыстармаларды издөө үчүн басыңыз</translation> <translation id="4816492930507672669">Баракка чактоо</translation> <translation id="4819347708020428563">Ананнотацияларды демейки көрүнүштө түзөтөсүзбү?</translation> <translation id="4822493756793346865">Адаттагы баалар Интернетте акыркы 90 күндө жарыяланган дүкөндөрдүн бааларынын негизинде көрсөтүлдү.</translation> @@ -2380,6 +2385,7 @@ <translation id="5021557570875267742">Бааларга Chrome менен көз салуу</translation> <translation id="5023310440958281426">Администраторуңуздун эрежелерин текшериңиз</translation> <translation id="5024171724744627792">Картаңыз сакталганда тезирээк төлөңүз. Картанын чоо-жайы Google аккаунтуңузда шифрленген.</translation> +<translation id="5026466266082155886"><ph name="STARTER_PACK_HISTORY_FOCUSED_FRIENDLY_MATCH_TEXT" />, таржымалдан издөө үчүн Enter баскычын басыңыз</translation> <translation id="5030338702439866405">Ким берген</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" программасынын түпкү тастыктамасы талап кылынат, бирок ал орнотулган эмес. Көйгөйдү чечүү үчүн IT администраторуңуз "<ph name="SOFTWARE_NAME" />" программасынын конфигурациясында берилген нускамаларды карап чыгышы керек. <ph name="FURTHER_EXPLANATION" /></translation> <translation id="5034930251282078640">Салыштыруу кызматына кошулсунбу?</translation> @@ -2736,6 +2742,7 @@ <translation id="5619721953841297650">Алдын ала коюлган</translation> <translation id="5624120631404540903">Сырсөздөрдү башкаруу</translation> <translation id="5629630648637658800">Саясат параметрлери жүктөлбөй калды.</translation> +<translation id="5630981295558454585">Google'дан бул бет жөнүндө суроо баскычы. Google'дан бул бет жөнүндө суроо үчүн басыңыз</translation> <translation id="5631439013527180824">Түзмөктү башкаргычуу белгиси</translation> <translation id="5632485077360054581">Кантип?</translation> <translation id="563324245173044180">Адаштыруучу мазмун бөгөттөлдү.</translation> @@ -3616,6 +3623,7 @@ <translation id="7139892792842608322">Негизги түпкүч</translation> <translation id="7140087718106278457">Төлөм ыкмаларынын тизмеси жабылды.</translation> <translation id="714064300541049402">2-тараптын X сүрөтүн жылдыруу</translation> +<translation id="7140922144008419614">Издөө өтмөктөрү баскычы. Өтмөктөрдү издөө үчүн басыңыз</translation> <translation id="7143682719845053166">PRC 32K</translation> <translation id="7144878232160441200">Дагы аракет кылып көрүү</translation> <translation id="7152230779180489711">Акыркы жолу качан киргенсиз:</translation> @@ -3850,6 +3858,7 @@ <translation id="7526934274050461096">Бул сайтка туташуу кооптуу</translation> <translation id="7529884293139707752">Үйдө окуу</translation> <translation id="7531464389616946220">Картаны скандоо</translation> +<translation id="7534473948927234329"><ph name="STARTER_PACK_BOOKMARKS_FOCUSED_FRIENDLY_MATCH_TEXT" />, кыстармаларды издөө үчүн Enter баскычын басыңыз</translation> <translation id="7534987659046836932">Конверт C7</translation> <translation id="7535087603100972091">Маани</translation> <translation id="753556296624075801">Google иштеп чыккан</translation> @@ -4228,6 +4237,7 @@ <translation id="8194412401381329820">Башкарылбаган бул түзмөктө бул баракты башкарылган аккаунттан колдоно албайсыз. Эгер бул баракты колдонсоңуз, байланышкан аккаунттардан (бул түзмөк таандык болгон уюм башкарган аккаунттар) башка бардык башкарылган аккаунттар кулпуланат.</translation> <translation id="8194797478851900357">Жылдырууну &жасабоо</translation> <translation id="8194956568907463262">Атышмай оюндар</translation> +<translation id="8198379961710069585">Издөө таржымалы баскычы. Таржымалдан издөө үчүн басыңыз</translation> <translation id="8199437620497683918">Оптикалык диск (жылтырак)</translation> <translation id="8199730148066603000">HTTPS эмес URL дарегин алдын ала көрүүгө болбойт.</translation> <translation id="8200772114523450471">Улантуу</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 4a5bcebe..685348f 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">Kainų stebėjimo pranešimai</translation> <translation id="21613918653299710">Vaizdų galerijos prisijungus</translation> <translation id="2161656808144014275">Tekstas</translation> +<translation id="2162435186600002085">Pagrindinės antraštės logotipas</translation> <translation id="2162620598375156287">Dabar <ph name="CURRENT_PRICE" /> svetainėje <ph name="SOURCE_WEBSITE" /></translation> <translation id="2164510882479075877">Patikrinkite, ar pavadinime <ph name="HOST_NAME" /> nėra klaidos.</translation> <translation id="2166049586286450108">Visateisė administratoriaus prieiga</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">Paso pridėjimas</translation> <translation id="2400271059665846158">Tvarkykite lojalumo korteles programoje „Google Wallet“</translation> <translation id="2400600116338235695">Gali būti prašoma prisijungti prie nuosekliųjų prievadų</translation> +<translation id="240450251994300576">Antrinės antraštės logotipas</translation> <translation id="2404884497378469141">Pabandykite dar kartą nukopijuoti failus</translation> <translation id="2413155254802890957">Senas</translation> <translation id="2413528052993050574">Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikatas gali būti atšauktas. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užgrobėjo.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">Išskiriamas tekstas iš PDF...</translation> <translation id="2628224721443278970">Prisijungti prie „Microsoft OneDrive“</translation> <translation id="2634124572758952069">Nepavyko rasti <ph name="HOST_NAME" /> serverio IP adreso.</translation> +<translation id="2638567100095052009">Įveskite @, jei norite ieškoti <ph name="FEATURED_SEARCH_LIST" /></translation> <translation id="2639739919103226564">Būsena:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">Audinys (pusiau blizgus)</translation> @@ -2268,6 +2271,7 @@ <translation id="4827283332383516812">Ištrinti kortelę</translation> <translation id="4830443836091007686">Pasirinkta: <ph name="ITEMS" /></translation> <translation id="4831993743164297314">Vaizdo nustatymo metodo popierius</translation> +<translation id="4832388034239846146">Jei norite bendrinti skirtukų grupes, atnaujinkite „Chrome“</translation> <translation id="483241715238664915">Įjungti įspėjimus</translation> <translation id="4832961164064927107">Kepsniai ir kepimas ant grotelių</translation> <translation id="4834250788637067901">Mokėjimo metodai, pasiūlymai ir adresai naudojant „Google Pay“</translation> @@ -2975,6 +2979,7 @@ <translation id="6043357981274314628">Atlikta!</translation> <translation id="6044573915096792553">Dydis: 12</translation> <translation id="6045164183059402045">Paskyrimo šablonas</translation> +<translation id="6046892054959167494">Įveskite <ph name="SEARCH_AGGREGATOR_KEYWORD" />, jei norite ieškoti, arba paklauskite <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /></translation> <translation id="6047927260846328439">Šiuo turiniu gali būti bandoma apgaule priversti jus įdiegti programinę įrangą arba atskleisti asmens informaciją. <ph name="BEGIN_LINK" />Rodyti vis tiek<ph name="END_LINK" /></translation> <translation id="6049056807983403918">B4 vokas</translation> <translation id="6049488691372270142">Puslapių teikimas</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 355a02d..b545d44 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">मूल्य ट्र्याक गर्ने सुविधासम्बन्धी सूचनाहरू</translation> <translation id="21613918653299710">अनलाइन फोटो ग्यालरीहरू</translation> <translation id="2161656808144014275">पाठ</translation> +<translation id="2162435186600002085">मुख्य हेडरको लोगो</translation> <translation id="2162620598375156287">अहिले <ph name="SOURCE_WEBSITE" /> मा <ph name="CURRENT_PRICE" /> मा उपलब्ध छ</translation> <translation id="2164510882479075877"><ph name="HOST_NAME" /> मा कुनै हिज्जे गलत छ कि छैन भन्ने कुरा जाँच्नुहोस्।</translation> <translation id="2166049586286450108">पूर्ण प्रशासक पहुँच</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">राहदानीसम्बन्धी जानकारी हाल्नुहोस्</translation> <translation id="2400271059665846158">आफ्ना लोयल्टी कार्डहरू Google Wallet मा व्यवस्थापन गर्नुहोस्</translation> <translation id="2400600116338235695">सिरियल पोर्टहरूमा कनेक्ट हुने अनुमति माग्न सक्छ</translation> +<translation id="240450251994300576">सहायक हेडरको लोगो</translation> <translation id="2404884497378469141">आफ्ना फाइलहरू फेरि कपी गरी हेर्नुहोस्</translation> <translation id="2413155254802890957">पुरानो</translation> <translation id="2413528052993050574">यो सर्भरले यो <ph name="DOMAIN" /> को भनि प्रमाणित गर्न सकेन; यसको सुरक्षा प्रमाणपत्रलाई रद्द गरिएको हुन सक्छ। यो कुनै एउटा मिसकन्फिगरेसन वा कुनै आक्रमणकारीले तपाईंको जडानमा गरेको हस्तक्षेपको कारणले गर्दा भएको हुन सक्छ।</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">PDF बाट टेक्स्ट एक्स्ट्रयाक्ट गरिँदै छ...</translation> <translation id="2628224721443278970">Microsoft OneDrive मा साइन इन गर्नुहोस्</translation> <translation id="2634124572758952069"><ph name="HOST_NAME" /> को सर्भरको IP एड्रेस फेला पार्न सकिएन।</translation> +<translation id="2638567100095052009"><ph name="FEATURED_SEARCH_LIST" /> मा खोज्न @ टाइप गर्नुहोस्</translation> <translation id="2639739919103226564">स्थिति:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">फेब्रिक (सेमी ग्लस)</translation> @@ -2265,6 +2268,7 @@ <translation id="4827283332383516812">कार्ड मेटाउनुहोस्</translation> <translation id="4830443836091007686"><ph name="ITEMS" /> वटा सामान चयन गरिए</translation> <translation id="4831993743164297314">इमेज सेट्टर पेपर</translation> +<translation id="4832388034239846146">ट्याब समूहहरू सेयर गर्न Chrome अपडेट गर्नुहोस्</translation> <translation id="483241715238664915">चेतावनी देखाउने सुविधा अन गर्नुहोस्</translation> <translation id="4832961164064927107">बार्बिक्यू तथा पोलेका परिकार</translation> <translation id="4834250788637067901">Google Pay प्रयोग गर्दा इम्पोर्ट गरिने भुक्तानी विधि, अफर र ठेगानाहरू</translation> @@ -2972,6 +2976,7 @@ <translation id="6043357981274314628">सम्पन्न भयो!</translation> <translation id="6044573915096792553">आकार १२</translation> <translation id="6045164183059402045">इम्पोजिसन टेम्प्लेट</translation> +<translation id="6046892054959167494">स्क्रिनसट खोज्न <ph name="SEARCH_AGGREGATOR_KEYWORD" /> टाइप गर्नुहोस् वा <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /> भन्नुहोस्</translation> <translation id="6047927260846328439">यो सामग्रीले तपाईंलाई सफ्टवेयर स्थापना गर्न लगाएर वा व्यक्तिगत जानकारी खुलाउन लगाएर झुक्याउन सक्छ। <ph name="BEGIN_LINK" />जे भए पनि देखाउनुहोस्<ph name="END_LINK" /></translation> <translation id="6049056807983403918">Envelope B4</translation> <translation id="6049488691372270142">पृष्ठको डेलिभरी</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 36bb28bd..c232fb3 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">Meldingen voor prijstracking</translation> <translation id="21613918653299710">Online fotogalerijen</translation> <translation id="2161656808144014275">Tekst</translation> +<translation id="2162435186600002085">Primair koptekstlogo</translation> <translation id="2162620598375156287">Nu <ph name="CURRENT_PRICE" /> op <ph name="SOURCE_WEBSITE" /></translation> <translation id="2164510882479075877">Check of <ph name="HOST_NAME" /> een typfout bevat.</translation> <translation id="2166049586286450108">Volledige beheerderstoegang</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">Paspoort toevoegen</translation> <translation id="2400271059665846158">Beheer je klantenkaarten in Google Wallet</translation> <translation id="2400600116338235695">Kan vragen of deze site verbinding mag maken met seriële poorten</translation> +<translation id="240450251994300576">Secundair koptekstlogo</translation> <translation id="2404884497378469141">Probeer je bestanden opnieuw te kopiëren</translation> <translation id="2413155254802890957">Oud</translation> <translation id="2413528052993050574">De server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het beveiligingscertificaat van de server is mogelijk ingetrokken. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">Tekst uit pdf extraheren…</translation> <translation id="2628224721443278970">Inloggen bij Microsoft OneDrive</translation> <translation id="2634124572758952069">Het IP-adres van de server van <ph name="HOST_NAME" /> kan niet worden gevonden.</translation> +<translation id="2638567100095052009">Typ @ om te zoeken in <ph name="FEATURED_SEARCH_LIST" /></translation> <translation id="2639739919103226564">Status:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">Stof (zijdeglans)</translation> @@ -2261,6 +2264,7 @@ <translation id="4827283332383516812">Kaart verwijderen</translation> <translation id="4830443836091007686"><ph name="ITEMS" /> geselecteerd</translation> <translation id="4831993743164297314">Papier voor beeldbelichter</translation> +<translation id="4832388034239846146">Update Chrome om tabbladgroepen te delen</translation> <translation id="483241715238664915">Waarschuwingen aanzetten</translation> <translation id="4832961164064927107">Barbecue en grillen</translation> <translation id="4834250788637067901">Betaalmethoden, aanbiedingen en adressen via Google Pay</translation> @@ -2968,6 +2972,7 @@ <translation id="6043357981274314628">Klaar</translation> <translation id="6044573915096792553">Grootte 12</translation> <translation id="6045164183059402045">Plaatsingstemplate</translation> +<translation id="6046892054959167494">Typ <ph name="SEARCH_AGGREGATOR_KEYWORD" /> om te zoeken of vraag naar <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /></translation> <translation id="6047927260846328439">Deze content probeert je mogelijk te misleiden om software te installeren of persoonlijke informatie openbaar te maken. <ph name="BEGIN_LINK" />Toch bekijken<ph name="END_LINK" /></translation> <translation id="6049056807983403918">Envelop B4</translation> <translation id="6049488691372270142">Pagina-uitvoer</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 9c39524..a985a26 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -3148,6 +3148,7 @@ <translation id="6326947323444967009">Defina o Chrome como o navegador predefinido do sistema nas definições do iOS</translation> <translation id="6327065120806001832">acesso à rede local</translation> <translation id="6328639280570009161">Tente desativar a previsão de rede</translation> +<translation id="6334834493885103305">Já pode pagar em prestações com a Affirm, a Zip ou a Klarna</translation> <translation id="6335029926534404762">Calçado desportivo</translation> <translation id="6336948221660696475">RV não permitida</translation> <translation id="6337133576188860026">Liberta menos de <ph name="SIZE" />. É possível que alguns sites sejam carregados mais lentamente na sua próxima visita.</translation> @@ -4070,6 +4071,7 @@ <translation id="7878562273885520351">A palavra-passe pode estar comprometida</translation> <translation id="7881044256965445977">Procurar e fazer ligação a qualquer dispositivo na sua rede local</translation> <translation id="7882421473871500483">Castanho</translation> +<translation id="7885670691503039914">Vai receber alertas por email se o preço descer em qualquer site. Esta página vai ser guardada na pasta de marcadores <ph name="LAST_BOOKMARKS_FOLDER" />.</translation> <translation id="7886897188117641322">Escolha as categorias amplas de tópicos que podem ser usadas para ajudar a personalizar anúncios</translation> <translation id="7887683347370398519">Verifique o Código de Segurança/CVC e tente novamente</translation> <translation id="7887885240995164102">Entrar no modo ecrã no ecrã</translation> @@ -4665,6 +4667,7 @@ <translation id="8926389886865778422">Não voltar a perguntar</translation> <translation id="8932102934695377596">O seu relógio está atrasado</translation> <translation id="893332455753468063">Adicionar nome</translation> +<translation id="8938242527120341116">Os filtros de conteúdo do seu dispositivo bloquearam <ph name="BLOCKED_URL" /></translation> <translation id="8942355029279167844">O seu administrador autorizou a app <ph name="APP_NAME" /> a recolher dados de diagnóstico para melhorar a experiência do produto. Veja <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" /> para obter mais informações.</translation> <translation id="8943282376843390568">Lima</translation> <translation id="8949410982325929394">Tom</translation> @@ -4870,6 +4873,7 @@ <translation id="963837307749850257">Todos os utilizadores</translation> <translation id="964050462028070434">Gerir palavras-passe e chaves de acesso…</translation> <translation id="969892804517981540">Compilação oficial</translation> +<translation id="97054401902912338">Saber mais sobre os filtros de conteúdo</translation> <translation id="973788791897303708">Este grupo de separadores está cheio</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nenhum}=1{1 item}other{# itens}}</translation> <translation id="976522784004777030">5 x 8 pol.</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 9da6cd184..1fa1fb1 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">Уведомления об отслеживаемых ценах</translation> <translation id="21613918653299710">Веб-галереи изображений</translation> <translation id="2161656808144014275">Текст</translation> +<translation id="2162435186600002085">Логотип основного заголовка</translation> <translation id="2162620598375156287"><ph name="CURRENT_PRICE" /> на сайте <ph name="SOURCE_WEBSITE" /></translation> <translation id="2164510882479075877">Проверьте, нет ли опечаток в имени хоста <ph name="HOST_NAME" />.</translation> <translation id="2166049586286450108">Доступ администратора ко всем данным</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">Добавить паспортные данные</translation> <translation id="2400271059665846158">Настроить карты постоянного клиента в Google Кошельке</translation> <translation id="2400600116338235695">Разрешено отправлять запрос на подключение к последовательным портам</translation> +<translation id="240450251994300576">Логотип второстепенного заголовка</translation> <translation id="2404884497378469141">Попробуйте скопировать файлы ещё раз.</translation> <translation id="2413155254802890957">Старый</translation> <translation id="2413528052993050574">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Его сертификат безопасности может быть отозван. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">Текст извлекается из PDF-файла…</translation> <translation id="2628224721443278970">Войти в Microsoft OneDrive</translation> <translation id="2634124572758952069">Не удалось найти IP-адрес сервера <ph name="HOST_NAME" />.</translation> +<translation id="2638567100095052009">Введите @ для поиска в <ph name="FEATURED_SEARCH_LIST" /></translation> <translation id="2639739919103226564">Состояние:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">Ткань (полуглянцевая)</translation> @@ -2266,6 +2269,7 @@ <translation id="4827283332383516812">Удаление карты</translation> <translation id="4830443836091007686">Выбрано: <ph name="ITEMS" /></translation> <translation id="4831993743164297314">Бумага для фотонаборной машины</translation> +<translation id="4832388034239846146">Чтобы делиться группами вкладок, обновите Chrome.</translation> <translation id="483241715238664915">Включить предупреждения</translation> <translation id="4832961164064927107">Барбекю и гриль</translation> <translation id="4834250788637067901">Способы оплаты, предложения и адреса из Google Pay</translation> @@ -2973,6 +2977,7 @@ <translation id="6043357981274314628">Готово</translation> <translation id="6044573915096792553">Размер: 12</translation> <translation id="6045164183059402045">Шаблон спуска полос</translation> +<translation id="6046892054959167494">Введите "<ph name="SEARCH_AGGREGATOR_KEYWORD" />" для поиска или спросите <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /></translation> <translation id="6047927260846328439">Посещение этой страницы может привести к установке вредоносной программы или хищению вашей личной информации. <ph name="BEGIN_LINK" />Все равно продолжить<ph name="END_LINK" /></translation> <translation id="6049056807983403918">Конверт B4</translation> <translation id="6049488691372270142">Выдача страниц</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index 5b4e0ea..351eff9 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">การแจ้งเตือนการติดตามราคา</translation> <translation id="21613918653299710">แกลเลอรีภาพออนไลน์</translation> <translation id="2161656808144014275">ข้อความ</translation> +<translation id="2162435186600002085">โลโก้ส่วนหัวหลัก</translation> <translation id="2162620598375156287">ตอนนี้ราคา <ph name="CURRENT_PRICE" /> ใน <ph name="SOURCE_WEBSITE" /></translation> <translation id="2164510882479075877">ตรวจสอบว่ามีการพิมพ์ผิดใน <ph name="HOST_NAME" /> ไหม</translation> <translation id="2166049586286450108">การเข้าถึงระดับผู้ดูแลระบบโดยสมบูรณ์</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">เพิ่มหนังสือเดินทาง</translation> <translation id="2400271059665846158">จัดการบัตรสะสมคะแนนใน Google Wallet</translation> <translation id="2400600116338235695">สามารถขอเชื่อมต่อกับพอร์ตอนุกรมได้</translation> +<translation id="240450251994300576">โลโก้ส่วนหัวรอง</translation> <translation id="2404884497378469141">ลองคัดลอกไฟล์อีกครั้ง</translation> <translation id="2413155254802890957">เก่า</translation> <translation id="2413528052993050574">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เพราะอาจมีการเพิกถอนใบรับรองความปลอดภัย โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">กำลังดึงข้อความจาก PDF...</translation> <translation id="2628224721443278970">ลงชื่อเข้าใช้ Microsoft OneDrive</translation> <translation id="2634124572758952069">ไม่พบที่อยู่ IP ของเซิร์ฟเวอร์ <ph name="HOST_NAME" /></translation> +<translation id="2638567100095052009">พิมพ์ @ เพื่อค้นหาใน <ph name="FEATURED_SEARCH_LIST" /></translation> <translation id="2639739919103226564">สถานะ:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">ผ้า (กึ่งเงา)</translation> @@ -2266,6 +2269,7 @@ <translation id="4827283332383516812">ลบบัตร</translation> <translation id="4830443836091007686">เลือกไว้ <ph name="ITEMS" /> รายการ</translation> <translation id="4831993743164297314">กระดาษสำหรับเครื่องยิงฟิล์ม</translation> +<translation id="4832388034239846146">หากต้องการแชร์กลุ่มแท็บ ให้อัปเดต Chrome</translation> <translation id="483241715238664915">เปิดคำเตือน</translation> <translation id="4832961164064927107">ปิ้งย่างและบาร์บีคิว</translation> <translation id="4834250788637067901">วิธีการชำระเงิน ข้อเสนอ และที่อยู่จาก Google Pay</translation> @@ -2973,6 +2977,7 @@ <translation id="6043357981274314628">เสร็จแล้ว</translation> <translation id="6044573915096792553">ขนาด 12</translation> <translation id="6045164183059402045">เทมเพลตการจัดเรียงหน้าก่อนพิมพ์</translation> +<translation id="6046892054959167494">พิมพ์ <ph name="SEARCH_AGGREGATOR_KEYWORD" /> เพื่อค้นหาหรือถาม <ph name="SEARCH_AGGREGATOR_SHORT_NAME" /></translation> <translation id="6047927260846328439">เนื้อหานี้อาจพยายามหลอกล่อให้คุณติดตั้งซอฟต์แวร์หรือเปิดเผยข้อมูลส่วนบุคคล <ph name="BEGIN_LINK" />แสดงเนื้อหา<ph name="END_LINK" /></translation> <translation id="6049056807983403918">Envelope B4</translation> <translation id="6049488691372270142">หน้าที่แสดง</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index b0e828d9..74762928 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -693,6 +693,7 @@ <translation id="2157640075051554492">قیمت کو ٹریک کرنے کی اطلاعات</translation> <translation id="21613918653299710">آن لائن تصویری گیلریاں</translation> <translation id="2161656808144014275">متن</translation> +<translation id="2162435186600002085">بنیادی ہیڈر لوگو</translation> <translation id="2162620598375156287">اب <ph name="CURRENT_PRICE" /><ph name="SOURCE_WEBSITE" /> پر</translation> <translation id="2164510882479075877">چیک کریں کہ آیا <ph name="HOST_NAME" /> میں کوئی ہجوں کی کوئی غلطی تو نہیں۔</translation> <translation id="2166049586286450108">منتظم کیلئے مکمل رسائی</translation> @@ -851,6 +852,7 @@ <translation id="2400263725572336749">پاسپورٹ کی معلومات شامل کریں</translation> <translation id="2400271059665846158">Google والٹ میں اپنے لائلٹی کارڈز کا نظم کریں</translation> <translation id="2400600116338235695">سائٹ سیریل پورٹس سے منسلک ہونے کیلئے پوچھ سکتی ہے</translation> +<translation id="240450251994300576">ثانوی ہیڈر لوگو</translation> <translation id="2404884497378469141">اپنی فائلز کو دوبارہ کاپی کرنے کی کوشش کریں</translation> <translation id="2413155254802890957">پرانا</translation> <translation id="2413528052993050574">یہ سرور یہ ثابت نہیں کر سکا کہ یہ <ph name="DOMAIN" /> ہے؛ ممکن ہے کہ اس کا سیکیورٹی سرٹیفکیٹ کالعدم قرار دے دیا گیا ہو۔ یہ غلط کنفیگریشن یا آپ کے کنکشن کو قطع کرنے والے کسی حملہ آور کی وجہ سے ہو سکتا ہے۔</translation> @@ -981,6 +983,7 @@ <translation id="2627847595568876492">PDF سے ٹیکسٹ نکالا جا رہا ہے...</translation> <translation id="2628224721443278970">Microsoft OneDrive میں سائن ان کریں</translation> <translation id="2634124572758952069"><ph name="HOST_NAME" /> کے سرور کا IP پتہ نہیں مل سکا۔</translation> +<translation id="2638567100095052009"><ph name="FEATURED_SEARCH_LIST" /> میں تلاش کرنے کے لیے @ ٹائپ کریں</translation> <translation id="2639739919103226564">صورتحال:</translation> <translation id="2645435784669275700">ChromeOS</translation> <translation id="2647086987482648627">فیبرک (سیمی گلوس)</translation> @@ -2268,6 +2271,7 @@ <translation id="4827283332383516812">کارڈ حذف کریں</translation> <translation id="4830443836091007686"><ph name="ITEMS" /> منتخب کیا گیا</translation> <translation id="4831993743164297314">تصویر کو سیٹ کرنے والا کاغذ</translation> +<translation id="4832388034239846146">ٹیب گروپس کا اشتراک کرنے کے لیے، Chrome کو اپ ڈیٹ کریں</translation> <translation id="483241715238664915">وارننگز کو آن کریں</translation> <translation id="4832961164064927107">BBQ اور گرِلنگ</translation> <translation id="4834250788637067901">Google Pay استعمال کرنے والے ادائیگی کے طریقے، پیشکشیں اور پتے</translation> @@ -2975,6 +2979,7 @@ <translation id="6043357981274314628">ہو گیا!</translation> <translation id="6044573915096792553">سائز 12</translation> <translation id="6045164183059402045">نفاذ کی تمثیل</translation> +<translation id="6046892054959167494"><ph name="SEARCH_AGGREGATOR_SHORT_NAME" /> میں تلاش کرنے یا پوچھنے کیلئے <ph name="SEARCH_AGGREGATOR_KEYWORD" /> ٹائپ کریں</translation> <translation id="6047927260846328439">یہ مواد آپ سے دھوکہ سے سافٹ ویئر انسٹال کروا سکتا ہے یا ذاتی معلومات حاصل کر سکتا ہے۔ <ph name="BEGIN_LINK" />بہر صورت دکھائیں<ph name="END_LINK" /></translation> <translation id="6049056807983403918">B4 لفافہ</translation> <translation id="6049488691372270142">صفحہ کی ڈیلیوری</translation>
diff --git a/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json b/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json index 0a7daaa..8e88645 100644 --- a/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json +++ b/components/test/data/viz/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
@@ -116,10 +116,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 22, "width": 309, @@ -188,10 +184,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 28, "width": 511, @@ -218,10 +210,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 28, "width": 413, @@ -248,10 +236,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 255, "width": 255, @@ -278,10 +262,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 81, "width": 254, @@ -308,10 +288,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 81, "width": 254, @@ -338,10 +314,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 81, "width": 254, @@ -368,10 +340,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 255, "width": 131, @@ -398,10 +366,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 4, @@ -428,10 +392,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 4, @@ -458,10 +418,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 4, @@ -488,10 +444,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 4, @@ -518,10 +470,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 4, @@ -548,10 +496,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 4, @@ -578,10 +522,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 175, "width": 255, @@ -608,10 +548,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 4, "width": 254, @@ -638,10 +574,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 4, "width": 254, @@ -668,10 +600,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 4, "width": 254, @@ -698,10 +626,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 175, "width": 131, @@ -882,10 +806,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 1120, - "width": 64 - }, "visible_rect": { "height": 1107, "width": 16, @@ -912,10 +832,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 1088, - "width": 128 - }, "visible_rect": { "height": 1051, "width": 72, @@ -942,10 +858,6 @@ "x": 0.0, "y": 142.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 56, "width": 1124, @@ -972,10 +884,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 56, "width": 106, @@ -1002,10 +910,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 1152 - }, "visible_rect": { "height": 56, "width": 575, @@ -1032,10 +936,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 576 - }, "visible_rect": { "height": 56, "width": 477, @@ -1062,10 +962,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 1088 - }, "visible_rect": { "height": 58, "width": 1052, @@ -1092,10 +988,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 256 - }, "visible_rect": { "height": 18, "width": 238, @@ -1122,10 +1014,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 18, "width": 82, @@ -1152,10 +1040,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 18, "width": 113, @@ -1182,10 +1066,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 192 - }, "visible_rect": { "height": 18, "width": 147, @@ -1212,10 +1092,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 18, "width": 108, @@ -1242,10 +1118,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 18, "width": 97, @@ -1272,10 +1144,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 287, "width": 1124, @@ -1302,10 +1170,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1052, @@ -1332,10 +1196,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1052, @@ -1362,10 +1222,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 248, "width": 1052, @@ -1948,10 +1804,6 @@ "x": 480.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 576 - }, "visible_rect": { "height": 49, "width": 95, @@ -1978,10 +1830,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 576 - }, "visible_rect": { "height": 49, "width": 574, @@ -2008,10 +1856,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 576 - }, "visible_rect": { "height": 49, "width": 456, @@ -2038,10 +1882,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 287, "width": 1125, @@ -2068,10 +1908,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1125, @@ -2098,10 +1934,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1125, @@ -2128,10 +1960,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 200, "width": 1125, @@ -2372,10 +2200,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 15, "width": 15, @@ -2546,10 +2370,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 46, "width": 102, @@ -2576,10 +2396,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 50, "width": 50, @@ -2606,10 +2422,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 50, "width": 50, @@ -2636,10 +2448,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 50, "width": 50, @@ -2666,10 +2474,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 50, "width": 50, @@ -2696,10 +2500,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 50, "width": 50, @@ -2726,10 +2526,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 192, - "width": 256 - }, "visible_rect": { "height": 102, "width": 246, @@ -2756,10 +2552,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 256 - }, "visible_rect": { "height": 44, "width": 246, @@ -2786,10 +2578,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 320, - "width": 512 - }, "visible_rect": { "height": 259, "width": 462, @@ -2816,10 +2604,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 192, - "width": 256 - }, "visible_rect": { "height": 139, "width": 246, @@ -2846,10 +2630,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 192, - "width": 256 - }, "visible_rect": { "height": 102, "width": 247, @@ -2876,10 +2656,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 320, - "width": 512 - }, "visible_rect": { "height": 259, "width": 464, @@ -2906,10 +2682,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 192, - "width": 256 - }, "visible_rect": { "height": 139, "width": 247, @@ -2936,10 +2708,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 192, - "width": 256 - }, "visible_rect": { "height": 102, "width": 246, @@ -2966,10 +2734,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 320, - "width": 512 - }, "visible_rect": { "height": 259, "width": 462, @@ -2996,10 +2760,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 192, - "width": 256 - }, "visible_rect": { "height": 139, "width": 246, @@ -3026,10 +2786,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 512 - }, "visible_rect": { "height": 88, "width": 511, @@ -3056,10 +2812,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 192, - "width": 512 - }, "visible_rect": { "height": 130, "width": 511, @@ -3086,10 +2838,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 320, - "width": 512 - }, "visible_rect": { "height": 288, "width": 511, @@ -3140,10 +2888,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 15, "width": 90, @@ -3170,10 +2914,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 1024 - }, "visible_rect": { "height": 90, "width": 970, @@ -3235,10 +2975,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 192, - "width": 1152 - }, "visible_rect": { "height": 188, "width": 1093, @@ -3265,10 +3001,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 15, "width": 15, @@ -3330,10 +3062,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 287, "width": 1125, @@ -3360,10 +3088,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1125, @@ -3390,10 +3114,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1125, @@ -3420,10 +3140,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 233, "width": 1125, @@ -4699,10 +4415,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 31, @@ -4729,10 +4441,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4759,10 +4467,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4789,10 +4493,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4819,10 +4519,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4849,10 +4545,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4879,10 +4571,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4909,10 +4597,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4939,10 +4623,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4969,10 +4649,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -4999,10 +4675,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5029,10 +4701,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5059,10 +4727,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5089,10 +4753,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5119,10 +4779,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5149,10 +4805,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5179,10 +4831,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5209,10 +4857,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5239,10 +4883,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5269,10 +4909,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5299,10 +4935,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5329,10 +4961,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5359,10 +4987,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5389,10 +5013,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5419,10 +5039,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5449,10 +5065,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5479,10 +5091,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5509,10 +5117,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5539,10 +5143,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5569,10 +5169,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5599,10 +5195,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5629,10 +5221,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 30, @@ -5659,10 +5247,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 128, - "width": 32 - }, "visible_rect": { "height": 90, "width": 9, @@ -5765,10 +5349,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 287, "width": 1140, @@ -5795,10 +5375,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1140, @@ -5825,10 +5401,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 286, "width": 1140, @@ -5855,10 +5427,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1152 - }, "visible_rect": { "height": 248, "width": 1140,
diff --git a/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json b/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json index c3fda910..bfb5bdd 100644 --- a/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json +++ b/components/test/data/viz/render_pass_data/top_real_world_desktop/espn_2018/0463.json
@@ -357,10 +357,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 251, "width": 202, @@ -387,10 +383,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 251, "width": 202, @@ -417,10 +409,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 251, "width": 202, @@ -447,10 +435,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 251, "width": 202, @@ -626,10 +610,6 @@ "x": 0.0, "y": 6.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 14, "width": 19, @@ -656,10 +636,6 @@ "x": 0.0, "y": 16.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 24, "width": 40, @@ -803,10 +779,6 @@ "x": 0.0, "y": 6.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 14, "width": 19, @@ -833,10 +805,6 @@ "x": 0.0, "y": 16.0 }, - "texture_size": { - "height": 64, - "width": 128 - }, "visible_rect": { "height": 24, "width": 40, @@ -1185,10 +1153,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 18, "width": 511, @@ -1215,10 +1179,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 18, "width": 510, @@ -1245,10 +1205,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 18, "width": 510, @@ -1275,10 +1231,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 18, "width": 53, @@ -1305,10 +1257,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 55, "width": 511, @@ -1335,10 +1283,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 55, "width": 510, @@ -1365,10 +1309,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 55, "width": 510, @@ -1395,10 +1335,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 55, "width": 53, @@ -1497,10 +1433,6 @@ "x": 88.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 800 - }, "visible_rect": { "height": 55, "width": 711, @@ -1527,10 +1459,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 800 - }, "visible_rect": { "height": 55, "width": 798, @@ -1557,10 +1485,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 800 - }, "visible_rect": { "height": 55, "width": 54, @@ -1587,10 +1511,6 @@ "x": 26.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 1600 - }, "visible_rect": { "height": 55, "width": 1453, @@ -1617,10 +1537,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 1600 - }, "visible_rect": { "height": 62, "width": 1563, @@ -1691,10 +1607,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 288, - "width": 832 - }, "visible_rect": { "height": 172, "width": 825, @@ -1765,10 +1677,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 288, - "width": 1600 - }, "visible_rect": { "height": 287, "width": 825, @@ -1795,10 +1703,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1600 - }, "visible_rect": { "height": 286, "width": 825, @@ -1825,10 +1729,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 288, - "width": 1600 - }, "visible_rect": { "height": 195, "width": 825, @@ -1899,10 +1799,6 @@ "x": 0.0, "y": 7.0 }, - "texture_size": { - "height": 288, - "width": 1600 - }, "visible_rect": { "height": 152, "width": 825, @@ -1977,10 +1873,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 20, "width": 22, @@ -2007,10 +1899,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 35, "width": 511, @@ -2037,10 +1925,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 35, "width": 510, @@ -2067,10 +1951,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 512 - }, "visible_rect": { "height": 35, "width": 333, @@ -2097,10 +1977,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 64, - "width": 64 - }, "visible_rect": { "height": 32, "width": 24, @@ -2127,10 +2003,6 @@ "x": 0.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 100, "width": 255, @@ -2157,10 +2029,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 100, "width": 254, @@ -2187,10 +2055,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 100, "width": 254, @@ -2217,10 +2081,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 100, "width": 254, @@ -2247,10 +2107,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 100, "width": 254, @@ -2277,10 +2133,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 100, "width": 254, @@ -2307,10 +2159,6 @@ "x": 1.0, "y": 0.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 255, "width": 59, @@ -2337,10 +2185,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 1, @@ -2367,10 +2211,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 1, @@ -2397,10 +2237,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 1, @@ -2427,10 +2263,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 254, "width": 1, @@ -2457,10 +2289,6 @@ "x": 0.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 1, "width": 255, @@ -2487,10 +2315,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 1, "width": 254, @@ -2517,10 +2341,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 1, "width": 254, @@ -2547,10 +2367,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 1, "width": 254, @@ -2577,10 +2393,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 1, "width": 254, @@ -2607,10 +2419,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 1, "width": 254, @@ -2637,10 +2445,6 @@ "x": 1.0, "y": 1.0 }, - "texture_size": { - "height": 256, - "width": 256 - }, "visible_rect": { "height": 2, "width": 59,
diff --git a/components/viz/common/quads/content_draw_quad_base.cc b/components/viz/common/quads/content_draw_quad_base.cc index 3bf8095..01dac7d0 100644 --- a/components/viz/common/quads/content_draw_quad_base.cc +++ b/components/viz/common/quads/content_draw_quad_base.cc
@@ -20,13 +20,11 @@ const gfx::Rect& visible_rect, bool needs_blending, const gfx::RectF& coord_rect, - const gfx::Size& size, bool nearest, bool anti_aliasing_off) { DrawQuad::SetAll(shared_quad_state, material, rect, visible_rect, needs_blending); tex_coord_rect = coord_rect; - texture_size = size; nearest_neighbor = nearest; force_anti_aliasing_off = anti_aliasing_off; } @@ -37,13 +35,11 @@ const gfx::Rect& visible_rect, bool needs_blending, const gfx::RectF& coord_rect, - const gfx::Size& size, bool nearest, bool anti_aliasing_off) { DrawQuad::SetAll(shared_quad_state, material, rect, visible_rect, needs_blending); tex_coord_rect = coord_rect; - texture_size = size; nearest_neighbor = nearest; force_anti_aliasing_off = anti_aliasing_off; } @@ -51,7 +47,6 @@ void ContentDrawQuadBase::ExtendValue( base::trace_event::TracedValue* value) const { cc::MathUtil::AddToTracedValue("tex_coord_rect", tex_coord_rect, value); - cc::MathUtil::AddToTracedValue("texture_size", texture_size, value); value->SetBoolean("nearest_neighbor", nearest_neighbor); value->SetBoolean("force_anti_aliasing_off", force_anti_aliasing_off);
diff --git a/components/viz/common/quads/content_draw_quad_base.h b/components/viz/common/quads/content_draw_quad_base.h index 98adeb8f..9114fc7c 100644 --- a/components/viz/common/quads/content_draw_quad_base.h +++ b/components/viz/common/quads/content_draw_quad_base.h
@@ -24,7 +24,6 @@ const gfx::Rect& visible_rect, bool needs_blending, const gfx::RectF& coord_rect, - const gfx::Size& size, bool nearest, bool anti_aliasing_off); @@ -34,12 +33,10 @@ const gfx::Rect& visible_rect, bool needs_blending, const gfx::RectF& coord_rect, - const gfx::Size& size, bool nearest, bool anti_aliasing_off); gfx::RectF tex_coord_rect; - gfx::Size texture_size; bool nearest_neighbor = false; bool force_anti_aliasing_off = false;
diff --git a/components/viz/common/quads/draw_quad_unittest.cc b/components/viz/common/quads/draw_quad_unittest.cc index 9a421fb..03afcb0 100644 --- a/components/viz/common/quads/draw_quad_unittest.cc +++ b/components/viz/common/quads/draw_quad_unittest.cc
@@ -330,28 +330,24 @@ bool blending = true; ResourceId resource_id(104); gfx::RectF tex_coord_rect(31.f, 12.f, 54.f, 20.f); - gfx::Size texture_size(85, 32); bool nearest_neighbor = true; bool force_anti_aliasing_off = false; CREATE_SHARED_STATE(); CREATE_QUAD_NEW(TileDrawQuad, visible_rect, blending, resource_id, - tex_coord_rect, texture_size, nearest_neighbor, - force_anti_aliasing_off); + tex_coord_rect, nearest_neighbor, force_anti_aliasing_off); EXPECT_EQ(DrawQuad::Material::kTiledContent, copy_quad->material); EXPECT_EQ(visible_rect, copy_quad->visible_rect); EXPECT_EQ(blending, copy_quad->needs_blending); EXPECT_EQ(resource_id, copy_quad->resource_id); EXPECT_EQ(tex_coord_rect, copy_quad->tex_coord_rect); - EXPECT_EQ(texture_size, copy_quad->texture_size); EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor); - CREATE_QUAD_ALL(TileDrawQuad, resource_id, tex_coord_rect, texture_size, - nearest_neighbor, force_anti_aliasing_off); + CREATE_QUAD_ALL(TileDrawQuad, resource_id, tex_coord_rect, nearest_neighbor, + force_anti_aliasing_off); EXPECT_EQ(DrawQuad::Material::kTiledContent, copy_quad->material); EXPECT_EQ(resource_id, copy_quad->resource_id); EXPECT_EQ(tex_coord_rect, copy_quad->tex_coord_rect); - EXPECT_EQ(texture_size, copy_quad->texture_size); EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor); } @@ -374,7 +370,6 @@ gfx::Rect visible_rect(40, 50, 30, 20); bool blending = true; gfx::RectF tex_coord_rect(31.f, 12.f, 54.f, 20.f); - gfx::Size texture_size(85, 32); bool nearest_neighbor = true; gfx::Rect content_rect(30, 40, 20, 30); float contents_scale = 3.141592f; @@ -386,13 +381,12 @@ CREATE_SHARED_STATE(); CREATE_QUAD_NEW(PictureDrawQuad, visible_rect, blending, tex_coord_rect, - texture_size, nearest_neighbor, content_rect, contents_scale, - {}, display_item_list, raster_inducing_scroll_offsets); + nearest_neighbor, content_rect, contents_scale, {}, + display_item_list, raster_inducing_scroll_offsets); EXPECT_EQ(DrawQuad::Material::kPictureContent, copy_quad->material); EXPECT_EQ(visible_rect, copy_quad->visible_rect); EXPECT_EQ(blending, copy_quad->needs_blending); EXPECT_EQ(tex_coord_rect, copy_quad->tex_coord_rect); - EXPECT_EQ(texture_size, copy_quad->texture_size); EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor); EXPECT_EQ(content_rect, copy_quad->content_rect); EXPECT_EQ(contents_scale, copy_quad->contents_scale); @@ -492,14 +486,12 @@ gfx::Rect visible_rect(40, 50, 30, 20); ResourceId resource_id(104); gfx::RectF tex_coord_rect(31.f, 12.f, 54.f, 20.f); - gfx::Size texture_size(85, 32); bool nearest_neighbor = true; bool force_anti_aliasing_off = false; CREATE_SHARED_STATE(); CREATE_QUAD_NEW(TileDrawQuad, visible_rect, needs_blending, resource_id, - tex_coord_rect, texture_size, nearest_neighbor, - force_anti_aliasing_off); + tex_coord_rect, nearest_neighbor, force_anti_aliasing_off); EXPECT_EQ(resource_id, quad_new->resource_id); }
diff --git a/components/viz/common/quads/picture_draw_quad.cc b/components/viz/common/quads/picture_draw_quad.cc index 1de04db..617442a 100644 --- a/components/viz/common/quads/picture_draw_quad.cc +++ b/components/viz/common/quads/picture_draw_quad.cc
@@ -25,17 +25,15 @@ const gfx::Rect& visible_rect, bool needs_blending, const gfx::RectF& tex_coord_rect, - const gfx::Size& texture_size, bool nearest_neighbor, const gfx::Rect& content, float scale, ImageAnimationMap animation_map, scoped_refptr<const cc::DisplayItemList> display_items, cc::ScrollOffsetMap raster_inducing_scrolls) { - ContentDrawQuadBase::SetNew(shared_quad_state, - DrawQuad::Material::kPictureContent, rect, - visible_rect, needs_blending, tex_coord_rect, - texture_size, nearest_neighbor, false); + ContentDrawQuadBase::SetNew( + shared_quad_state, DrawQuad::Material::kPictureContent, rect, + visible_rect, needs_blending, tex_coord_rect, nearest_neighbor, false); content_rect = content; contents_scale = scale; image_animation_map = std::move(animation_map);
diff --git a/components/viz/common/quads/picture_draw_quad.h b/components/viz/common/quads/picture_draw_quad.h index 8f6321e..4e15d18 100644 --- a/components/viz/common/quads/picture_draw_quad.h +++ b/components/viz/common/quads/picture_draw_quad.h
@@ -33,7 +33,6 @@ const gfx::Rect& visible_rect, bool needs_blending, const gfx::RectF& tex_coord_rect, - const gfx::Size& texture_size, bool nearest_neighbor, const gfx::Rect& content, float scale,
diff --git a/components/viz/common/quads/render_pass_io.cc b/components/viz/common/quads/render_pass_io.cc index 11edf61..bd5ba10 100644 --- a/components/viz/common/quads/render_pass_io.cc +++ b/components/viz/common/quads/render_pass_io.cc
@@ -1096,7 +1096,6 @@ DCHECK(draw_quad); DCHECK(dict); dict->Set("tex_coord_rect", RectFToDict(draw_quad->tex_coord_rect)); - dict->Set("texture_size", SizeToDict(draw_quad->texture_size)); dict->Set("nearest_neighbor", draw_quad->nearest_neighbor); dict->Set("force_anti_aliasing_off", draw_quad->force_anti_aliasing_off); } @@ -1153,7 +1152,6 @@ struct ContentDrawQuadCommon { gfx::RectF tex_coord_rect; - gfx::Size texture_size; bool is_premultiplied; bool nearest_neighbor; bool force_anti_aliasing_off; @@ -1162,26 +1160,23 @@ std::optional<ContentDrawQuadCommon> GetContentDrawQuadCommonFromDict( const base::Value::Dict& dict) { const base::Value::Dict* tex_coord_rect = dict.FindDict("tex_coord_rect"); - const base::Value::Dict* texture_size = dict.FindDict("texture_size"); std::optional<bool> is_premultiplied = dict.FindBool("is_premultiplied"); std::optional<bool> nearest_neighbor = dict.FindBool("nearest_neighbor"); std::optional<bool> force_anti_aliasing_off = dict.FindBool("force_anti_aliasing_off"); - if (!tex_coord_rect || !texture_size || !is_premultiplied || - !nearest_neighbor || !force_anti_aliasing_off) { + if (!tex_coord_rect || !is_premultiplied || !nearest_neighbor || + !force_anti_aliasing_off) { return std::nullopt; } gfx::RectF t_tex_coord_rect; - gfx::Size t_texture_size; - if (!RectFFromDict(*tex_coord_rect, &t_tex_coord_rect) || - !SizeFromDict(*texture_size, &t_texture_size)) { + if (!RectFFromDict(*tex_coord_rect, &t_tex_coord_rect)) { return std::nullopt; } - return ContentDrawQuadCommon{ - t_tex_coord_rect, t_texture_size, is_premultiplied.value(), - nearest_neighbor.value(), force_anti_aliasing_off.value()}; + return ContentDrawQuadCommon{t_tex_coord_rect, is_premultiplied.value(), + nearest_neighbor.value(), + force_anti_aliasing_off.value()}; } void CompositorRenderPassDrawQuadToDict( @@ -1494,11 +1489,11 @@ ResourceId resource_id = common.resource_id; - draw_quad->SetAll( - common.shared_quad_state, common.rect, common.visible_rect, - common.needs_blending, resource_id, content_common->tex_coord_rect, - content_common->texture_size, content_common->nearest_neighbor, - content_common->force_anti_aliasing_off); + draw_quad->SetAll(common.shared_quad_state, common.rect, common.visible_rect, + common.needs_blending, resource_id, + content_common->tex_coord_rect, + content_common->nearest_neighbor, + content_common->force_anti_aliasing_off); return true; }
diff --git a/components/viz/common/quads/render_pass_io_unittest.cc b/components/viz/common/quads/render_pass_io_unittest.cc index a5590435e3..85a49f73 100644 --- a/components/viz/common/quads/render_pass_io_unittest.cc +++ b/components/viz/common/quads/render_pass_io_unittest.cc
@@ -268,8 +268,8 @@ render_pass0->CreateAndAppendDrawQuad<TileDrawQuad>(); quad->SetAll(render_pass0->shared_quad_state_list.ElementAt(sqs_index), gfx::Rect(0, 0, 256, 512), gfx::Rect(2, 2, 250, 500), true, - ResourceId(512u), gfx::RectF(0.0f, 0.0f, 0.9f, 0.8f), - gfx::Size(256, 512), true, true); + ResourceId(512u), gfx::RectF(0.0f, 0.0f, 0.9f, 0.8f), true, + true); ++quad_count; } {
diff --git a/components/viz/common/quads/tile_draw_quad.cc b/components/viz/common/quads/tile_draw_quad.cc index 012ddeb3..70c2309 100644 --- a/components/viz/common/quads/tile_draw_quad.cc +++ b/components/viz/common/quads/tile_draw_quad.cc
@@ -20,14 +20,13 @@ bool needs_blending, ResourceId resource, const gfx::RectF& tex_coord_rect, - const gfx::Size& texture_size, bool nearest_neighbor, bool force_anti_aliasing_off) { CHECK_NE(resource, kInvalidResourceId); - ContentDrawQuadBase::SetNew( - shared_quad_state, DrawQuad::Material::kTiledContent, rect, visible_rect, - needs_blending, tex_coord_rect, texture_size, nearest_neighbor, - force_anti_aliasing_off); + ContentDrawQuadBase::SetNew(shared_quad_state, + DrawQuad::Material::kTiledContent, rect, + visible_rect, needs_blending, tex_coord_rect, + nearest_neighbor, force_anti_aliasing_off); resource_id = resource; } @@ -37,14 +36,13 @@ bool needs_blending, ResourceId resource, const gfx::RectF& tex_coord_rect, - const gfx::Size& texture_size, bool nearest_neighbor, bool force_anti_aliasing_off) { CHECK_NE(resource, kInvalidResourceId); - ContentDrawQuadBase::SetAll( - shared_quad_state, DrawQuad::Material::kTiledContent, rect, visible_rect, - needs_blending, tex_coord_rect, texture_size, nearest_neighbor, - force_anti_aliasing_off); + ContentDrawQuadBase::SetAll(shared_quad_state, + DrawQuad::Material::kTiledContent, rect, + visible_rect, needs_blending, tex_coord_rect, + nearest_neighbor, force_anti_aliasing_off); resource_id = resource; }
diff --git a/components/viz/common/quads/tile_draw_quad.h b/components/viz/common/quads/tile_draw_quad.h index 8e86a88..3bf6ff28 100644 --- a/components/viz/common/quads/tile_draw_quad.h +++ b/components/viz/common/quads/tile_draw_quad.h
@@ -29,7 +29,6 @@ // TODO(reveman): Make the use of normalized vs non-normalized // coordinates consistent across all quad types: crbug.com/487370 const gfx::RectF& tex_coord_rect, - const gfx::Size& texture_size, bool nearest_neighbor, bool force_anti_aliasing_off); @@ -42,7 +41,6 @@ // TODO(reveman): Make the use of normalized vs non-normalized // coordinates consistent across all quad types: crbug.com/487370 const gfx::RectF& tex_coord_rect, - const gfx::Size& texture_size, bool nearest_neighbor, bool force_anti_aliasing_off);
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc index 66084938d..9859c40 100644 --- a/components/viz/service/display/overlay_unittest.cc +++ b/components/viz/service/display/overlay_unittest.cc
@@ -888,8 +888,8 @@ auto* overlay_quad = render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); overlay_quad->SetNew(shared_quad_state, rect, rect, needs_blending, - resource_id, gfx::RectF(0, 0, 1, 1), rect.size(), - nearest_neighbor, force_anti_aliasing_off); + resource_id, gfx::RectF(0, 0, 1, 1), nearest_neighbor, + force_anti_aliasing_off); return overlay_quad; }
diff --git a/components/viz/service/display/readback_pixeltest.cc b/components/viz/service/display/readback_pixeltest.cc index 7fe6540c..a0653981 100644 --- a/components/viz/service/display/readback_pixeltest.cc +++ b/components/viz/service/display/readback_pixeltest.cc
@@ -483,7 +483,7 @@ auto* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); quad->SetNew(sqs, output_rect, output_rect, /*needs_blending=*/false, - mapped_resource_id, gfx::RectF(output_rect), source_size, + mapped_resource_id, gfx::RectF(output_rect), /*nearest_neighbor=*/true, /*force_anti_aliasing_off=*/false); return pass;
diff --git a/components/viz/service/display/renderer_perftest.cc b/components/viz/service/display/renderer_perftest.cc index 3393a02..fd895dd 100644 --- a/components/viz/service/display/renderer_perftest.cc +++ b/components/viz/service/display/renderer_perftest.cc
@@ -194,7 +194,6 @@ void CreateTestTileDrawQuad(ResourceId resource_id, const gfx::Rect& rect, - const gfx::Size& texture_size, const SharedQuadState* shared_state, CompositorRenderPass* render_pass) { // TileDrawQuads are non-normalized texture coords, so assume it's 1-1 with @@ -205,8 +204,7 @@ const bool force_anti_aliasing_off = false; auto* quad = render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); quad->SetNew(shared_state, rect, rect, needs_blending, resource_id, - tex_coord_rect, texture_size, nearest_neighbor, - force_anti_aliasing_off); + tex_coord_rect, nearest_neighbor, force_anti_aliasing_off); } } // namespace @@ -347,6 +345,7 @@ void SetUpRenderPassListResources( CompositorRenderPassList* render_pass_list) { + const gfx::Size kTextureSize(256, 256); base::flat_map<ResourceId, ResourceId> resource_map; for (auto& render_pass : *render_pass_list) { for (auto* quad : render_pass->quad_list) { @@ -357,9 +356,11 @@ case DrawQuad::Material::kTiledContent: { TileDrawQuad* tile_quad = reinterpret_cast<TileDrawQuad*>(quad); ResourceId recorded_id = tile_quad->resource_id; - ResourceId actual_id = this->MapResourceId( - &resource_map, recorded_id, tile_quad->texture_size, - SkColor4f{0.0f, 1.0f, 0.0f, 0.5f}); + // We no longer record texture_size, but for testing purpose, + // use a generic size is OK. + ResourceId actual_id = + this->MapResourceId(&resource_map, recorded_id, kTextureSize, + SkColor4f{0.0f, 1.0f, 0.0f, 0.5f}); tile_quad->resource_id = actual_id; } break; case DrawQuad::Material::kTextureContent: { @@ -518,8 +519,8 @@ gfx::MaskFilterInfo()); ResourceId resource_id = share_resources ? resource_list_[0].id : resource_list_[i].id; - CreateTestTileDrawQuad(resource_id, gfx::Rect(kTileSize), kTextureSize, - shared_state, pass.get()); + CreateTestTileDrawQuad(resource_id, gfx::Rect(kTileSize), shared_state, + pass.get()); current_transform.PostConcat(transform_step); }
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc index 15758d49..9f08df9 100644 --- a/components/viz/service/display/renderer_pixeltest.cc +++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -2095,11 +2095,10 @@ auto* blue_quad = this->render_pass_->template CreateAndAppendDrawQuad<PictureDrawQuad>(); - blue_quad->SetNew(this->front_quad_state_, this->quad_rect_, this->quad_rect_, - needs_blending, gfx::RectF(this->quad_rect_), - this->quad_rect_.size(), false, this->quad_rect_, 1.f, {}, - blue_raster_source->GetDisplayItemList(), - cc::ScrollOffsetMap()); + blue_quad->SetNew( + this->front_quad_state_, this->quad_rect_, this->quad_rect_, + needs_blending, gfx::RectF(this->quad_rect_), false, this->quad_rect_, + 1.f, {}, blue_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); cc::FakeRecordingSource green_recording(quad_rect_.size()); green_recording.add_draw_rect_with_flags(outer_rect, green_flags); @@ -2111,8 +2110,8 @@ auto* green_quad = this->render_pass_->template CreateAndAppendDrawQuad<PictureDrawQuad>(); green_quad->SetNew(this->back_quad_state_, this->quad_rect_, this->quad_rect_, - needs_blending, gfx::RectF(this->quad_rect_), - this->quad_rect_.size(), false, this->quad_rect_, 1.f, {}, + needs_blending, gfx::RectF(this->quad_rect_), false, + this->quad_rect_, 1.f, {}, green_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); this->AppendBackgroundAndRunTest( @@ -4316,7 +4315,7 @@ gfx::MaskFilterInfo()); TileDrawQuad* hole = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); hole->SetNew(hole_shared_state, rect, rect, needs_blending, mapped_resource, - gfx::RectF(gfx::Rect(tile_size)), tile_size, nearest_neighbor, + gfx::RectF(gfx::Rect(tile_size)), nearest_neighbor, force_anti_aliasing_off); gfx::Transform green_quad_to_target_transform; @@ -4488,7 +4487,7 @@ blue_quad->SetNew(blue_shared_state, viewport, // Intentionally bigger than clip. viewport, needs_blending, gfx::RectF(viewport), - viewport.size(), nearest_neighbor, viewport, 1.f, {}, + nearest_neighbor, viewport, 1.f, {}, blue_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); @@ -4502,14 +4501,14 @@ green_recording.CreateRasterSource(); gfx::Transform green_quad_to_target_transform; - SharedQuadState* green_shared_state = CreateTestSharedQuadState( - green_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo()); + SharedQuadState* green_shared_state = + CreateTestSharedQuadState(green_quad_to_target_transform, viewport, + pass.get(), gfx::MaskFilterInfo()); auto* green_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); green_quad->SetNew(green_shared_state, viewport, viewport, needs_blending, - gfx::RectF(0.f, 0.f, 1.f, 1.f), viewport.size(), - nearest_neighbor, viewport, 1.f, {}, - green_raster_source->GetDisplayItemList(), + gfx::RectF(0.f, 0.f, 1.f, 1.f), nearest_neighbor, viewport, + 1.f, {}, green_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); AggregatedRenderPassList pass_list; @@ -4541,15 +4540,16 @@ green_recording.CreateRasterSource(); gfx::Transform green_quad_to_target_transform; - SharedQuadState* green_shared_state = CreateTestSharedQuadState( - green_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo()); + SharedQuadState* green_shared_state = + CreateTestSharedQuadState(green_quad_to_target_transform, viewport, + pass.get(), gfx::MaskFilterInfo()); green_shared_state->opacity = 0.5f; auto* green_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); - green_quad->SetNew( - green_shared_state, viewport, viewport, needs_blending, - gfx::RectF(0, 0, 1, 1), viewport.size(), nearest_neighbor, viewport, 1.f, - {}, green_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); + green_quad->SetNew(green_shared_state, viewport, viewport, needs_blending, + gfx::RectF(0, 0, 1, 1), nearest_neighbor, viewport, 1.f, + {}, green_raster_source->GetDisplayItemList(), + cc::ScrollOffsetMap()); // One viewport-filling white quad. cc::FakeRecordingSource white_recording(viewport.size()); @@ -4565,10 +4565,10 @@ white_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo()); auto* white_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); - white_quad->SetNew( - white_shared_state, viewport, viewport, needs_blending, - gfx::RectF(0, 0, 1, 1), viewport.size(), nearest_neighbor, viewport, 1.f, - {}, white_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); + white_quad->SetNew(white_shared_state, viewport, viewport, needs_blending, + gfx::RectF(0, 0, 1, 1), nearest_neighbor, viewport, 1.f, + {}, white_raster_source->GetDisplayItemList(), + cc::ScrollOffsetMap()); AggregatedRenderPassList pass_list; pass_list.push_back(std::move(pass)); @@ -4602,11 +4602,10 @@ transparent_shared_state->opacity = 0.5f; auto* transparent_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); - transparent_quad->SetNew(transparent_shared_state, viewport, viewport, - needs_blending, gfx::RectF(0, 0, 1, 1), - viewport.size(), nearest_neighbor, viewport, 1.f, {}, - transparent_raster_source->GetDisplayItemList(), - cc::ScrollOffsetMap()); + transparent_quad->SetNew( + transparent_shared_state, viewport, viewport, needs_blending, + gfx::RectF(0, 0, 1, 1), nearest_neighbor, viewport, 1.f, {}, + transparent_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); // One viewport-filling white quad. cc::FakeRecordingSource white_recording(viewport.size()); @@ -4622,10 +4621,10 @@ white_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo()); auto* white_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); - white_quad->SetNew( - white_shared_state, viewport, viewport, needs_blending, - gfx::RectF(0, 0, 1, 1), viewport.size(), nearest_neighbor, viewport, 1.f, - {}, white_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); + white_quad->SetNew(white_shared_state, viewport, viewport, needs_blending, + gfx::RectF(0, 0, 1, 1), nearest_neighbor, viewport, 1.f, + {}, white_raster_source->GetDisplayItemList(), + cc::ScrollOffsetMap()); AggregatedRenderPassList pass_list; pass_list.push_back(std::move(pass)); @@ -4679,9 +4678,8 @@ auto* quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); quad->SetNew(shared_state, viewport, viewport, needs_blending, - gfx::RectF(0, 0, 2, 2), viewport.size(), nearest_neighbor, - viewport, 1.f, {}, raster_source->GetDisplayItemList(), - cc::ScrollOffsetMap()); + gfx::RectF(0, 0, 2, 2), nearest_neighbor, viewport, 1.f, {}, + raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); AggregatedRenderPassList pass_list; pass_list.push_back(std::move(pass)); @@ -4782,8 +4780,8 @@ }; auto* quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); quad->SetNew(shared_state, viewport, viewport, needs_blending, - gfx::RectF(viewport), viewport.size(), nearest_neighbor, - viewport, 1.f, {}, raster_source->GetDisplayItemList(), + gfx::RectF(viewport), nearest_neighbor, viewport, 1.f, {}, + raster_source->GetDisplayItemList(), raster_inducing_scroll_offsets); AggregatedRenderPassList pass_list; @@ -4846,7 +4844,7 @@ auto* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); quad->SetNew(shared_state, viewport, viewport, needs_blending, - mapped_resource, gfx::RectF(gfx::Rect(tile_size)), tile_size, + mapped_resource, gfx::RectF(gfx::Rect(tile_size)), nearest_neighbor, force_anti_aliasing_off); AggregatedRenderPassList pass_list; @@ -5005,14 +5003,14 @@ green_quad1->SetNew( top_right_green_shared_quad_state, green_rect1, green_rect1, needs_blending, gfx::RectF(gfx::SizeF(green_rect1.size())), - green_rect1.size(), nearest_neighbor, green_rect1, 1.f, {}, + nearest_neighbor, green_rect1, 1.f, {}, green_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); auto* green_quad2 = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); green_quad2->SetNew( top_right_green_shared_quad_state, green_rect2, green_rect2, needs_blending, gfx::RectF(gfx::SizeF(green_rect2.size())), - green_rect2.size(), nearest_neighbor, green_rect2, 1.f, {}, + nearest_neighbor, green_rect2, 1.f, {}, green_raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); // Add a green clipped checkerboard in the bottom right to help test @@ -5075,8 +5073,7 @@ auto* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); blue_quad->SetNew(blue_shared_state, quad_content_rect, quad_content_rect, needs_blending, gfx::RectF(quad_content_rect), - content_union_rect.size(), nearest_neighbor, - content_union_rect, contents_scale, {}, + nearest_neighbor, content_union_rect, contents_scale, {}, raster_source->GetDisplayItemList(), cc::ScrollOffsetMap()); // Fill left half of viewport with green. @@ -5399,7 +5396,7 @@ gfx::MaskFilterInfo()); auto* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); quad->SetNew(quad_shared, gfx::Rect(layer_size), gfx::Rect(layer_size), - needs_blending, mapped_resource, tex_coord_rect, tile_size, + needs_blending, mapped_resource, tex_coord_rect, nearest_neighbor, use_aa); // Green background.
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index 915573a..16de85a38 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -2852,7 +2852,8 @@ // images won't be fully filled so use the unclipped texture coords. On // interior tiles or left/top tiles, the image has been filled with // overlapping content so the entire image is valid for sampling. - gfx::RectF valid_texel_bounds(gfx::SizeF(quad->texture_size)); + gfx::RectF valid_texel_bounds(gfx::SizeF( + resource_provider()->GetResourceBackedSize(quad->resource_id))); if (quad->IsRightEdge()) { // Restrict the width to match far side of texture coords valid_texel_bounds.set_width(quad->tex_coord_rect.right());
diff --git a/components/viz/service/display/software_renderer_unittest.cc b/components/viz/service/display/software_renderer_unittest.cc index 10962049..a4ed8ac 100644 --- a/components/viz/service/display/software_renderer_unittest.cc +++ b/components/viz/service/display/software_renderer_unittest.cc
@@ -267,11 +267,11 @@ auto* inner_quad = root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); inner_quad->SetNew(shared_quad_state, inner_rect, inner_rect, needs_blending, mapped_resource_cyan, gfx::RectF(gfx::SizeF(inner_size)), - inner_size, false, false); + false, false); auto* outer_quad = root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); outer_quad->SetNew(shared_quad_state, outer_rect, outer_rect, needs_blending, mapped_resource_yellow, gfx::RectF(gfx::SizeF(outer_size)), - outer_size, false, false); + false, false); AggregatedRenderPassList list; list.push_back(std::move(root_render_pass)); @@ -326,8 +326,8 @@ /*layer_id=*/0u, /*fast_rounded_corner=*/false); auto* quad = root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); quad->SetNew(shared_quad_state, tile_rect, tile_rect, needs_blending, - mapped_resource_cyan, gfx::RectF(gfx::SizeF(tile_size)), - tile_size, false, false); + mapped_resource_cyan, gfx::RectF(gfx::SizeF(tile_size)), false, + false); quad->visible_rect = visible_rect; AggregatedRenderPassList list;
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.h b/content/browser/accessibility/browser_accessibility_manager_android.h index ca41cdf..7974bae 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.h +++ b/content/browser/accessibility/browser_accessibility_manager_android.h
@@ -5,10 +5,10 @@ #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_ANDROID_H_ #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_ANDROID_H_ -#include <unordered_set> #include <utility> #include "content/common/content_export.h" +#include "third_party/abseil-cpp/absl/container/flat_hash_set.h" #include "ui/accessibility/platform/browser_accessibility_manager.h" namespace ui { @@ -78,7 +78,7 @@ allow_image_descriptions_for_testing_ = is_allowed; } - const std::unordered_set<int32_t>& nodes_already_cleared_for_test() const { + const absl::flat_hash_set<int32_t>& nodes_already_cleared_for_test() const { return nodes_already_cleared_; } @@ -192,10 +192,9 @@ // tree dumps for nodes without creating web_contents_accessibility_android. bool allow_image_descriptions_for_testing_ = false; - // An unordered_set of |unique_id| values for nodes cleared from the cache + // A set of |unique_id| values for nodes cleared from the cache // with each atomic update to prevent superfluous cache clear calls. - std::unordered_set<int32_t> nodes_already_cleared_ = - std::unordered_set<int32_t>(); + absl::flat_hash_set<int32_t> nodes_already_cleared_; }; } // namespace content
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc index 15a3c71..98f72f5 100644 --- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc +++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -7,10 +7,10 @@ #include <optional> #include <string> -#include <unordered_set> #include <vector> #include "base/command_line.h" +#include "base/containers/contains.h" #include "base/functional/callback_helpers.h" #include "base/strings/escape.h" #include "base/strings/utf_string_conversions.h" @@ -33,6 +33,7 @@ #include "content/public/test/scoped_accessibility_mode_override.h" #include "content/shell/browser/shell.h" #include "testing/gmock/include/gmock/gmock.h" +#include "third_party/abseil-cpp/absl/container/flat_hash_set.h" #include "third_party/blink/public/common/features.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/accessibility_switches.h" @@ -75,8 +76,9 @@ // Make sure each node in the tree has a unique id. void RecursiveAssertUniqueIds(const ui::AXNode* node, - std::unordered_set<int>* ids) const { - ASSERT_TRUE(ids->find(node->id()) == ids->end()); + absl::flat_hash_set<int>* ids) const { + ASSERT_TRUE(ids); + ASSERT_FALSE(base::Contains(*ids, node->id())); ids->insert(node->id()); for (const ui::AXNode* child : node->children()) { RecursiveAssertUniqueIds(child, ids); @@ -444,7 +446,7 @@ const ui::AXTree& tree = GetAXTree(); const ui::AXNode* root = tree.root(); - std::unordered_set<int> ids; + absl::flat_hash_set<int> ids; RecursiveAssertUniqueIds(root, &ids); } @@ -1618,7 +1620,7 @@ const ui::AXTree& tree = GetAXTree(); const ui::AXNode* root = tree.root(); - std::unordered_set<int> ids; + absl::flat_hash_set<int> ids; RecursiveAssertUniqueIds(root, &ids); }
diff --git a/content/browser/accessibility/web_contents_accessibility_android.cc b/content/browser/accessibility/web_contents_accessibility_android.cc index 5c0af34..fd45e6d 100644 --- a/content/browser/accessibility/web_contents_accessibility_android.cc +++ b/content/browser/accessibility/web_contents_accessibility_android.cc
@@ -439,11 +439,12 @@ // Converts RangePairs into a pair of int vectors. std::pair<std::vector<int>, std::vector<int>> ToVectorPair( const RangePairs& range_pairs) { - std::vector<int> starts(range_pairs.size()); - std::vector<int> ends(range_pairs.size()); - for (size_t i = 0; i < range_pairs.size(); ++i) { - starts[i] = range_pairs[i].first; - ends[i] = range_pairs[i].second; + std::vector<int> starts, ends; + starts.reserve(range_pairs.size()); + ends.reserve(range_pairs.size()); + for (const auto& range : range_pairs) { + starts.push_back(range.first); + ends.push_back(range.second); } return {starts, ends}; }
diff --git a/content/browser/renderer_host/navigation_controller_impl.cc b/content/browser/renderer_host/navigation_controller_impl.cc index 5287553..26f75f0 100644 --- a/content/browser/renderer_host/navigation_controller_impl.cc +++ b/content/browser/renderer_host/navigation_controller_impl.cc
@@ -1769,7 +1769,9 @@ // after a race with an OOPIF (see https://crbug.com/616820). FrameNavigationEntry* frame_entry = active_entry->GetFrameEntry(rfh->frame_tree_node()); - if (frame_entry && frame_entry->site_instance()) { + if (base::FeatureList::IsEnabled( + features::kCheckSiteInstanceOnHistoryNavigation) && + frame_entry && frame_entry->site_instance()) { int64_t dsn = navigation_request->frame_entry_document_sequence_number(); if (dsn != -1 && dsn == frame_entry->document_sequence_number()) { // We CHECK that the SiteInstance matches the one stored in the session
diff --git a/content/browser/webid/federated_sd_jwt_handler.cc b/content/browser/webid/federated_sd_jwt_handler.cc index c19539bc..459773e 100644 --- a/content/browser/webid/federated_sd_jwt_handler.cc +++ b/content/browser/webid/federated_sd_jwt_handler.cc
@@ -19,8 +19,8 @@ #include "content/browser/webid/flags.h" #include "content/browser/webid/jwt_signer.h" #include "content/browser/webid/sd_jwt.h" -#include "crypto/ec_private_key.h" #include "crypto/hash.h" +#include "crypto/keypair.h" #include "crypto/sha2.h" #include "third_party/blink/public/mojom/webid/federated_auth_request.mojom.h" @@ -52,7 +52,7 @@ // The browser selectively discloses the fields that were // requested and binds the audience and the nonce to the // Key Binding JWT before returning to the verifier. - private_key_ = crypto::ECPrivateKey::Create(); + private_key_ = crypto::keypair::PrivateKey::GenerateEcP256(); } FederatedSdJwtHandler::~FederatedSdJwtHandler() {} @@ -156,7 +156,7 @@ auto sdjwtkb = sdjwt::SdJwtKb::Create( result, render_frame_host_->GetLastCommittedOrigin().Serialize(), nonce_, /*iat=*/base::Time::Now(), base::BindRepeating(Sha256), - sdjwt::CreateJwtSigner(std::move(private_key_))); + sdjwt::CreateJwtSigner(*std::move(private_key_))); if (!sdjwtkb) { federated_auth_request_impl_->CompleteRequestWithError(
diff --git a/content/browser/webid/federated_sd_jwt_handler.h b/content/browser/webid/federated_sd_jwt_handler.h index b9d718a..e2d5c0ef 100644 --- a/content/browser/webid/federated_sd_jwt_handler.h +++ b/content/browser/webid/federated_sd_jwt_handler.h
@@ -10,7 +10,7 @@ #include "base/functional/callback_forward.h" #include "base/memory/weak_ptr.h" #include "content/browser/webid/sd_jwt.h" -#include "crypto/ec_private_key.h" +#include "crypto/keypair.h" #include "services/data_decoder/public/cpp/data_decoder.h" #include "third_party/blink/public/mojom/webid/federated_auth_request.mojom-forward.h" #include "url/gurl.h" @@ -44,7 +44,7 @@ std::vector<std::pair<std::string, content::sdjwt::JSONString>> disclosures_; // A private key that is used to bind the token when the token "format" is // "vc+sd-jwt". - std::unique_ptr<crypto::ECPrivateKey> private_key_; + std::optional<crypto::keypair::PrivateKey> private_key_; std::optional<std::vector<std::string>> fields_; std::string nonce_;
diff --git a/content/browser/webid/jwt_signer.cc b/content/browser/webid/jwt_signer.cc index cbf938dd..6554c4a 100644 --- a/content/browser/webid/jwt_signer.cc +++ b/content/browser/webid/jwt_signer.cc
@@ -16,10 +16,9 @@ #include "base/logging.h" #include "base/values.h" #include "content/browser/webid/sd_jwt.h" -#include "crypto/ec_private_key.h" -#include "crypto/ec_signature_creator.h" #include "crypto/openssl_util.h" #include "crypto/random.h" +#include "crypto/sign.h" #include "third_party/boringssl/src/include/openssl/base.h" #include "third_party/boringssl/src/include/openssl/bn.h" #include "third_party/boringssl/src/include/openssl/bytestring.h" @@ -98,28 +97,23 @@ } std::optional<std::vector<uint8_t>> SignJwt( - std::unique_ptr<crypto::ECPrivateKey> private_key, + crypto::keypair::PrivateKey private_key, const std::string_view& message) { // The signature unpacking step won't work if the key uses a curve other than // P-256. - if (!IsEcdsaP256(private_key->key())) { + if (!IsEcdsaP256(private_key.key())) { return std::nullopt; } - base::span<const uint8_t> data(base::as_byte_span(message)); - auto signer = crypto::ECSignatureCreator::Create(private_key.get()); - - std::vector<uint8_t> der; - if (!signer->Sign(data, &der)) { - return std::nullopt; - } - - return UnpackDERSignature(der); + const auto sig = crypto::sign::Sign(crypto::sign::SignatureKind::ECDSA_SHA256, + private_key, base::as_byte_span(message)); + return UnpackDERSignature(sig); } } // namespace -std::optional<Jwk> ExportPublicKey(const crypto::ECPrivateKey& private_pkey) { +std::optional<Jwk> ExportPublicKey( + const crypto::keypair::PrivateKey& private_pkey) { EC_KEY* ec = EVP_PKEY_get0_EC_KEY(private_pkey.key()); if (!ec) { return std::nullopt; @@ -160,7 +154,7 @@ return jwk; } -Signer CreateJwtSigner(std::unique_ptr<crypto::ECPrivateKey> private_key) { +Signer CreateJwtSigner(crypto::keypair::PrivateKey private_key) { return base::BindOnce(SignJwt, std::move(private_key)); }
diff --git a/content/browser/webid/jwt_signer.h b/content/browser/webid/jwt_signer.h index 131e777..999af0bf 100644 --- a/content/browser/webid/jwt_signer.h +++ b/content/browser/webid/jwt_signer.h
@@ -13,10 +13,7 @@ #include "base/functional/callback_forward.h" #include "content/common/content_export.h" - -namespace crypto { -class ECPrivateKey; -} +#include "crypto/keypair.h" namespace content::sdjwt { @@ -26,9 +23,8 @@ Signer; CONTENT_EXPORT std::optional<Jwk> ExportPublicKey( - const crypto::ECPrivateKey& private_key); -CONTENT_EXPORT Signer -CreateJwtSigner(std::unique_ptr<crypto::ECPrivateKey> private_key); + const crypto::keypair::PrivateKey& private_key); +CONTENT_EXPORT Signer CreateJwtSigner(crypto::keypair::PrivateKey private_key); } // namespace content::sdjwt
diff --git a/content/browser/webid/jwt_signer_browsertest.cc b/content/browser/webid/jwt_signer_browsertest.cc index db3f857..3217760 100644 --- a/content/browser/webid/jwt_signer_browsertest.cc +++ b/content/browser/webid/jwt_signer_browsertest.cc
@@ -10,7 +10,7 @@ #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" -#include "crypto/ec_private_key.h" +#include "crypto/keypair.h" #include "crypto/sha2.h" #include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gtest/include/gtest/gtest.h" @@ -36,10 +36,10 @@ std::pair<SdJwtKb, Jwk> CreateTestSdJwtKb(const std::string aud, const std::string nonce, int iat) { - auto holder_private_key = crypto::ECPrivateKey::Create(); - auto jwk = ExportPublicKey(*holder_private_key); + auto holder_private_key = crypto::keypair::PrivateKey::GenerateEcP256(); + auto jwk = ExportPublicKey(holder_private_key); - auto issuer_private_key = crypto::ECPrivateKey::Create(); + auto issuer_private_key = crypto::keypair::PrivateKey::GenerateEcP256(); Header header; header.typ = "jwt"; @@ -63,7 +63,7 @@ issued.header = *header.ToJson(); issued.payload = *payload.ToJson(); - auto issuer_jwk = ExportPublicKey(*issuer_private_key); + auto issuer_jwk = ExportPublicKey(issuer_private_key); issued.Sign(CreateJwtSigner(std::move(issuer_private_key)));
diff --git a/content/browser/webid/jwt_signer_unittest.cc b/content/browser/webid/jwt_signer_unittest.cc index e09bc19..99cb316 100644 --- a/content/browser/webid/jwt_signer_unittest.cc +++ b/content/browser/webid/jwt_signer_unittest.cc
@@ -15,10 +15,10 @@ #include "base/logging.h" #include "base/values.h" #include "content/browser/webid/sd_jwt.h" -#include "crypto/ec_private_key.h" -#include "crypto/ec_signature_creator.h" +#include "crypto/keypair.h" #include "crypto/random.h" #include "crypto/sha2.h" +#include "crypto/sign.h" #include "crypto/signature_verifier.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -84,9 +84,8 @@ } TEST_F(JwtSignerTest, JwtSigner) { - auto private_key = crypto::ECPrivateKey::Create(); - std::vector<uint8_t> public_key; - EXPECT_TRUE(private_key->ExportPublicKey(&public_key)); + auto private_key = crypto::keypair::PrivateKey::GenerateEcP256(); + std::vector<uint8_t> public_key = private_key.ToSubjectPublicKeyInfo(); const std::string message = "hello wold"; auto signer = CreateJwtSigner(std::move(private_key)); @@ -96,11 +95,8 @@ } TEST_F(JwtSignerTest, CreateJwt) { - auto private_key = crypto::ECPrivateKey::Create(); - EXPECT_TRUE(private_key); - - std::vector<uint8_t> public_key; - EXPECT_TRUE(private_key->ExportPublicKey(&public_key)); + auto private_key = crypto::keypair::PrivateKey::GenerateEcP256(); + std::vector<uint8_t> public_key = private_key.ToSubjectPublicKeyInfo(); Header header; header.typ = "jwt"; @@ -138,10 +134,10 @@ } TEST_F(JwtSignerTest, CreateSdJwtKb) { - auto holder_private_key = crypto::ECPrivateKey::Create(); - auto jwk = ExportPublicKey(*holder_private_key); + auto holder_private_key = crypto::keypair::PrivateKey::GenerateEcP256(); + auto jwk = ExportPublicKey(holder_private_key); - auto issuer_private_key = crypto::ECPrivateKey::Create(); + auto issuer_private_key = crypto::keypair::PrivateKey::GenerateEcP256(); Header header; header.typ = "jwt"; @@ -161,7 +157,7 @@ confirmation.jwk = *jwk; payload.cnf = confirmation; - auto issuer_json = ExportPublicKey(*issuer_private_key); + auto issuer_json = ExportPublicKey(issuer_private_key); EXPECT_TRUE(issuer_json); EXPECT_TRUE(issuer_json->Serialize());
diff --git a/content/browser/webid/webid_browsertest.cc b/content/browser/webid/webid_browsertest.cc index 5add42b8..4c8eabb 100644 --- a/content/browser/webid/webid_browsertest.cc +++ b/content/browser/webid/webid_browsertest.cc
@@ -53,7 +53,6 @@ #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" #include "content/shell/browser/shell.h" -#include "crypto/ec_private_key.h" #include "crypto/sha2.h" #include "net/base/features.h" #include "net/base/url_util.h" @@ -1940,8 +1939,6 @@ class WebIdDelegationBrowserTest : public WebIdBrowserTest { public: void SetUpCommandLine(base::CommandLine* command_line) override { - private_key_ = crypto::ECPrivateKey::Create(); - std::vector<base::test::FeatureRef> features; features.push_back(features::kFedCm); features.push_back(features::kFedCmDelegation); @@ -2014,7 +2011,7 @@ sdjwt::Jwt jwt; jwt.header = *header.ToJson(); jwt.payload = *payload.ToJson(); - jwt.Sign(sdjwt::CreateJwtSigner(private_key_->Copy())); + jwt.Sign(sdjwt::CreateJwtSigner(private_key_)); sdjwt::SdJwt sd_jwt; sd_jwt.jwt = jwt; @@ -2028,7 +2025,8 @@ idp_server()->SetConfigResponseDetails(config_details); } - std::unique_ptr<crypto::ECPrivateKey> private_key_; + crypto::keypair::PrivateKey private_key_{ + crypto::keypair::PrivateKey::GenerateEcP256()}; }; IN_PROC_BROWSER_TEST_F(WebIdDelegationBrowserTest, IssueVCs) { @@ -2059,7 +2057,7 @@ auto token = EvalJs(shell(), script).ExtractString(); - auto public_key = sdjwt::ExportPublicKey(*private_key_); + auto public_key = sdjwt::ExportPublicKey(private_key_); EXPECT_TRUE(public_key); @@ -2154,7 +2152,7 @@ modal_loop.Run(); // Verify that the token is correct. - auto public_key = sdjwt::ExportPublicKey(*private_key_); + auto public_key = sdjwt::ExportPublicKey(private_key_); EXPECT_TRUE(public_key); // Load the key into an object
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java index 8470bf5..1cc0bee 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java
@@ -16,16 +16,41 @@ @NullMarked public class AccessibilityActionAndEventTracker { private final LinkedList<String> mEvents; + private final boolean mShouldFilterTrivialEvents; private boolean mTestComplete; public AccessibilityActionAndEventTracker() { - this.mEvents = new LinkedList<String>(); - this.mTestComplete = false; + mEvents = new LinkedList<String>(); + mTestComplete = false; + mShouldFilterTrivialEvents = true; + } + + public AccessibilityActionAndEventTracker(boolean shouldFilterTrivialEvents) { + // TODO(crbug.com/414363686) this overloaded constructor should be removed after flakiness + // of event test with trivial events included is solved. mShouldFilterTrivialEvents should + // also be removed after fixing the flakiness. + mEvents = new LinkedList<String>(); + mTestComplete = false; + mShouldFilterTrivialEvents = shouldFilterTrivialEvents; } public void addEvent(AccessibilityEvent event) { // In rare cases there may be a lingering event, so only add if the test is not complete. if (!mTestComplete) { + if (mShouldFilterTrivialEvents) { + // Convert event type to a human readable String (except TYPE_WINDOW_CONTENT_CHANGED + // with no CONTENT_CHANGE_TYPE_STATE_DESCRIPTION flag or + // CONTENT_CHANGE_TYPE_PANE_TITLE flag) + if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED + && (event.getContentChangeTypes() + & AccessibilityEvent.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION) + == 0 + && (event.getContentChangeTypes() + & AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_TITLE) + == 0) { + return; + } + } mEvents.add(eventToString(event)); } } @@ -109,19 +134,8 @@ * @param event AccessibilityEvent event to get a string for * @return String representation of the given event */ - private static @Nullable String eventToString(AccessibilityEvent event) { - // Convert event type to a human readable String (except TYPE_WINDOW_CONTENT_CHANGED with no - // CONTENT_CHANGE_TYPE_STATE_DESCRIPTION flag or CONTENT_CHANGE_TYPE_PANE_TITLE flag) - if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED - && (event.getContentChangeTypes() - & AccessibilityEvent.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION) - == 0 - && (event.getContentChangeTypes() - & AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_TITLE) - == 0) { - return null; - } - + private static String eventToString(AccessibilityEvent event) { + // Convert event type to a human readable String StringBuilder builder = new StringBuilder(); builder.append(AccessibilityEvent.eventTypeToString(event.getEventType()));
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java index 7362aef..5008ca2 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/AccessibilityContentShellActivityTestRule.java
@@ -73,19 +73,32 @@ /** * Helper methods for setup of a basic web contents accessibility unit test. * - * This method replaces the usual setUp() method annotated with @Before because we wish to - * load different data with each test, but the process is the same for all tests. + * <p>Equivalent to calling {@link #setupTestFromFile(String, boolean)} with true * - * Leaving a commented @Before annotation on each method as a reminder/context clue. */ /* @Before */ protected void setupTestFromFile(String file) { + // Default behavior: ignore trivial TYPE_WINDOW_CONTENT_CHANGED events. + setupTestFromFile(file, /* shouldFilterTrivialEvents= */ true); + } + + /** + * Helper methods for setup of a basic web contents accessibility unit test. + * + * <p>This method replaces the usual setUp() method annotated with @Before because we wish to + * load different data with each test, but the process is the same for all tests. + * + * @param file Test file URL, including path and name + * @param shouldFilterTrivialEvents Flag to filter out TYPE_WINDOW_CONTENT_CHANGED event + */ + /* @Before */ + protected void setupTestFromFile(String file, boolean shouldFilterTrivialEvents) { // Verify file exists before beginning the test. verifyInputFile(file); launchContentShellWithUrl(UrlUtils.getIsolatedTestFileUrl(file)); waitForActiveShellToBeDoneLoading(); - setupTestFramework(); + setupTestFramework(shouldFilterTrivialEvents); setAccessibilityDelegate(); // To prevent flakes, do not disable accessibility mid tests. @@ -97,9 +110,23 @@ /** * Helper method to set up our tests. This method replaces the @Before method. Leaving a * commented @Before annotation on method as a reminder/context clue. + * + * <p>Equivalent to calling {@link #setupTestFramework(boolean)} with true + * */ /* @Before */ public void setupTestFramework() { + setupTestFramework(/* shouldFilterTrivialEvents= */ true); + } + + /** + * Helper method to set up our tests. This method replaces the @Before method. Leaving a + * commented @Before annotation on method as a reminder/context clue. + * + * @param shouldFilterTrivialEvents Flag to filter out TYPE_WINDOW_CONTENT_CHANGED event + */ + /* @Before */ + public void setupTestFramework(boolean shouldFilterTrivialEvents) { ThreadUtils.runOnUiThreadBlocking( () -> { AccessibilityState.setIsAnyAccessibilityServiceEnabledForTesting(true); @@ -110,7 +137,7 @@ mWcax = getWebContentsAccessibility(); mNodeProvider = getAccessibilityNodeProvider(); - mTracker = new AccessibilityActionAndEventTracker(); + mTracker = new AccessibilityActionAndEventTracker(shouldFilterTrivialEvents); mWcax.setAccessibilityTrackerForTesting(mTracker); }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java index fbb5cbba..ca18084 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityEventsTest.java
@@ -45,6 +45,15 @@ new AccessibilityContentShellActivityTestRule(); /** + * + * <p>Equivalent to calling {@link #performTest(String, String, boolean)} with true + * + */ + private void performTest(String inputFile, String expectationFile) { + performTest(inputFile, expectationFile, true); + } + + /** * Perform a single test which will: * 1. Open the given HTML file * 2. Execute the javascript method "go()" @@ -52,9 +61,12 @@ * * @param inputFile HTML test input file * @param expectationFile TXT expectations file + * @param shouldFilterTrivialEvents Flag to filter out TYPE_WINDOW_CONTENT_CHANGED event */ - private void performTest(String inputFile, String expectationFile) { - performTestWithJavascriptMethod(inputFile, expectationFile, "go()"); + private void performTest( + String inputFile, String expectationFile, boolean shouldFilterTrivialEvents) { + performTestWithJavascriptMethod( + inputFile, expectationFile, "go()", shouldFilterTrivialEvents); } /** @@ -91,11 +103,15 @@ * @param inputFile HTML test input file * @param expectationFile TXT expectations file * @param javascriptMethod javascript method (e.g. "expand()" or "go()") + * @param shouldFilterTrivialEvents Flag to filter out TYPE_WINDOW_CONTENT_CHANGED event */ private void performTestWithJavascriptMethod( - String inputFile, String expectationFile, String javascriptMethod) { + String inputFile, + String expectationFile, + String javascriptMethod, + boolean shouldFilterTrivialEvents) { // Build page from given file and enable testing framework, set a tracker. - mActivityTestRule.setupTestFromFile(BASE_FILE_PATH + inputFile); + mActivityTestRule.setupTestFromFile(BASE_FILE_PATH + inputFile, shouldFilterTrivialEvents); // Execute given javascript function. executeJS(javascriptMethod);
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 40a1caf..028d483c 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -196,6 +196,14 @@ "CapturedSurfaceControlKillswitch", base::FEATURE_ENABLED_BY_DEFAULT); +// Enables a CHECK in RendererDidNavigate to ensure that session +// history navigations commit in the expected SiteInstance when the +// document sequence number matches. Helps detect navigation process +// mismatches and potential security issues. +BASE_FEATURE(kCheckSiteInstanceOnHistoryNavigation, + "CheckSiteInstanceOnHistoryNavigation", + base::FEATURE_ENABLED_BY_DEFAULT); + // Clear the window.name property for the top-level cross-site navigations that // swap BrowsingContextGroups(BrowsingInstances). BASE_FEATURE(kClearCrossSiteCrossBrowsingContextGroupWindowName,
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index a026e2d..17a2aff 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -63,6 +63,7 @@ kBrokerFileOperationsOnDiskCacheInNetworkService); CONTENT_EXPORT BASE_DECLARE_FEATURE(kCacheControlNoStoreEnterBackForwardCache); CONTENT_EXPORT BASE_DECLARE_FEATURE(kCapturedSurfaceControlKillswitch); +CONTENT_EXPORT BASE_DECLARE_FEATURE(kCheckSiteInstanceOnHistoryNavigation); CONTENT_EXPORT BASE_DECLARE_FEATURE( kClearCrossSiteCrossBrowsingContextGroupWindowName); CONTENT_EXPORT BASE_DECLARE_FEATURE(kCompositeBGColorAnimation);
diff --git a/crypto/keypair.h b/crypto/keypair.h index 6cc3060..4669d66 100644 --- a/crypto/keypair.h +++ b/crypto/keypair.h
@@ -65,6 +65,7 @@ std::vector<uint8_t> ToUncompressedForm() const; EVP_PKEY* key() { return key_.get(); } + const EVP_PKEY* key() const { return key_.get(); } bool IsRsa() const; bool IsEc() const;
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json index 875f89c..de863478 100644 --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json
@@ -2240,10 +2240,14 @@ }, { "id": 347, - "cr_bugs": [1119491], - "description": "Intel GPUs fail to report BGRA8 overlay support", + "cr_bugs": [1119491, 344343039], + "description": "Older Windows fails to report BGRA8 overlay support for Intel GPUs", "os": { - "type": "win" + "type": "win", + "version": { + "op": "<", + "value": "10.0.26100.4061" + } }, "vendor_id": "0x8086", "features": [ @@ -3587,6 +3591,23 @@ "op": ">", "value": "32.0.101.6078" } + }, + { + "id": 451, + "cr_bugs": [1119491, 344343039], + "description": "Older Intel GPU drivers fail to report BGRA8 overlay support on Windows", + "os": { + "type": "win" + }, + "vendor_id": "0x8086", + "multi_gpu_category": "any", + "driver_version": { + "op": "<", + "value": "32.0.101.6314" + }, + "features": [ + "enable_bgra8_overlays_with_yuv_overlay_support" + ] } ] }
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb index f86f2dd..8d9d995 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
@@ -306,7 +306,7 @@ <translation id="840168496893712993">تتسبب بعض الإضافات في تعطل Chrome. يُرجى محاولة إزالتها.</translation> <translation id="8413500425974960807">نصيحة من Chrome: انقُل Chrome إلى شريط التطبيقات</translation> <translation id="8413795581997394485">يوفر لك هذا الوضع حماية من المواقع الإلكترونية وعمليات التنزيل والإضافات التي تبيَّن أنها ضارة. عند زيارة موقع إلكتروني، يرسل متصفِّح Chrome جزءًا مشفّرًا من عنوان URL إلى Google من خلال خادم لحماية الخصوصية يخفي عنوان IP الخاص بجهازك. وفي حال رصد سلوك مريب على موقع إلكتروني، يتم أيضًا إرسال عناوين URL الكاملة وأجزاء من محتوى الصفحة.</translation> -<translation id="84594714173170813">مواصلة استخدام بيانات Chrome في حسابك على Google</translation> +<translation id="84594714173170813">يمكنك مواصلة استخدام بيانات Chrome في حسابك على Google</translation> <translation id="8459495907675268833">تمت إزالة البيانات المُحددة من متصفح Chrome والأجهزة التي تمت مزامنتها. قد يحتوي حسابك في Google على نماذج أخرى من سجل التصفح، مثل عمليات البحث والأنشطة من خدمات Google الأخرى في history.google.com.</translation> <translation id="8491300088149538575">تم تسجيل الدخول باستخدام حساب "<ph name="EMAIL" />".
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb index 60effdb..7be8197 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Maak in Wallet oop?</translation> <translation id="183878838231635348">Hierdie kaart wys enige privaatheid- of sekuriteitkwessies wat veiligheidskontrole outomaties vir jou bespeur.</translation> <translation id="1845230888742614096">Hou groep</translation> +<translation id="1853692000353488670">Nuwe incognito-oortjie</translation> <translation id="1854463785401910334">Deursoek oop oortjies</translation> <translation id="1861067954551502701">{count,plural, =1{{position} van {count} wagwoord}other{{position} van {count} wagwoorde}}</translation> <translation id="1861262398884155592">Hierdie vouer is leeg</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index c1257e49..e2f4130 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Wallet ውስጥ ይከፈት?</translation> <translation id="183878838231635348">ይህ ካርድ የደህንነት ፍተሻ በራስ-ሰር የሚያገኝልዎትን ማንኛውንም የግላዊነት ወይም የደህንነት ችግሮችን ያሳያል።</translation> <translation id="1845230888742614096">ቡድን አቆይ</translation> +<translation id="1853692000353488670">አዲስ ማንነት የማያሳውቅ ትር</translation> <translation id="1854463785401910334">ክፍት ትሮችን ይፈልጉ</translation> <translation id="1861067954551502701">{count,plural, =1{{position} ከ{count} የይለፍ ቃል}one{{position} ከ{count} የይለፍ ቃል}other{{position} ከ{count} የይለፍ ቃላት}}</translation> <translation id="1861262398884155592">ይህ አቃፊ ባዶ ነው</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index eee1bf6..dc0b2ce 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">"هل المطلوب فتح الملف في تطبيق Apple Wallet؟" (Open in Wallet?)</translation> <translation id="183878838231635348">تعرض هذه البطاقة أي مشاكل تتعلّق بالخصوصية أو الأمان يتم رصدها تلقائيًا من خلال ميزة "التحقّق من الأمان".</translation> <translation id="1845230888742614096">الاحتفاظ بمجموعة علامات التبويب</translation> +<translation id="1853692000353488670">علامة تبويب جديدة للتصفح المتخفي</translation> <translation id="1854463785401910334">البحث في علامات التبويب المفتوحة</translation> <translation id="1861067954551502701">{count,plural, =1{{position} من إجمالي كلمة مرور واحدة ({count})}zero{{position} من إجمالي {count} كلمة مرور}two{{position} من إجمالي كلمتَي مرور ({count})}few{{position} من إجمالي {count} كلمات مرور}many{{position} من إجمالي {count} كلمة مرور}other{{position} من إجمالي {count} كلمة مرور}}</translation> <translation id="1861262398884155592">هذا المجلد فارغ</translation> @@ -919,7 +920,7 @@ <translation id="4803185665210547709">تتم إدارة المتصفِّح من خلال مؤسستك. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="4803728135431112209">عليك رسم دائرة حول أي محتوى على شاشتك أو تمييزه أو النقر عليه للبحث عن معلومات حوله، والحصول على النتائج بدون الخروج من علامة التبويب</translation> -<translation id="4807098396393229769">الاسم كما على البطاقة</translation> +<translation id="4807098396393229769">الاسم المكتوب على البطاقة</translation> <translation id="4808744395915275922">التحديثات</translation> <translation id="4813345808229079766">اتصال</translation> <translation id="4821595350501541683">تم إغلاق علامات التبويب وحذف بيانات التصفُّح</translation> @@ -1408,7 +1409,7 @@ <translation id="6672241253012342409">يسمح هذا الخيار للمواقع الإلكترونية باستخدام ملفات تعريف الارتباط لتحسين تجربة التصفُّح، مثل مواصلة تسجيل دخولك أو الاحتفاظ بالمنتجات التي تمت إضافتها إلى سلة التسوق. في وضع التصفُّح المتخفي، لا يمكن للمواقع الإلكترونية استخدام ملفات تعريف الارتباط للاطّلاع على نشاط التصفُّح الخاص بك على المواقع الإلكترونية المختلفة، بهدف تقديم إعلانات مخصّصة لك مثلاً.</translation> -<translation id="6672697278890207089">إدخال عبارة المرور</translation> +<translation id="6672697278890207089">يُرجى إدخال عبارة المرور</translation> <translation id="6674917187596384849">يمكنك التبديل بسهولة بين الحسابات</translation> <translation id="6676349090816247042">خيارات تسجيل الدخول</translation> <translation id="667999046851023355">مستند</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index 33c970e..8ccbc453 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Walletত খুলিবনে?</translation> <translation id="183878838231635348">এই কাৰ্ডখনে সুৰক্ষা পৰীক্ষাটোৱে আপোনাৰ বাবে স্বয়ংক্ৰিয়ভাৱে চিনাক্ত কৰা যিকোনো গোপনীয়তা অথবা সুৰক্ষা সম্পৰ্কীয় সমস্যা দেখুৱায়।</translation> <translation id="1845230888742614096">গোটটো ৰাখক</translation> +<translation id="1853692000353488670">নতুন ইনকগনিট’ টেব</translation> <translation id="1854463785401910334">খোলা থকা টেবত সন্ধান কৰক</translation> <translation id="1861067954551502701">{count,plural, =1{{count} টা পাছৱৰ্ডৰ {position} নম্বৰ পাছৱৰ্ডটো}one{{count} টা পাছৱৰ্ডৰ {position} নম্বৰ পাছৱৰ্ডটো}other{{count} টা পাছৱৰ্ডৰ {position} নম্বৰ পাছৱৰ্ডটো}}</translation> <translation id="1861262398884155592">এই ফল্ডাৰটো খালী</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index b95b6c1..d33849d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Pulqabında açılsın?</translation> <translation id="183878838231635348">Bu kart Təhlükəsizlik yoxlanışının avtomatik aşkar etdiyi məxfilik və ya güvənlik problemlərini göstərir.</translation> <translation id="1845230888742614096">Qrupu saxlayın</translation> +<translation id="1853692000353488670">Yeni gizli panel</translation> <translation id="1854463785401910334">Açıq tabları axtarın</translation> <translation id="1861067954551502701">{count,plural, =1{Parol {position}/{count}}other{Parol {position}/{count}}}</translation> <translation id="1861262398884155592">Qovluq boşdur</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index 3ca3269..3375a71 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Адкрыць у Кашальку?</translation> <translation id="183878838231635348">На гэтай картцы адлюстроўваюцца праблемы з прыватнасцю і бяспекай, выяўленыя падчас аўтаматычнай праверкі бяспекі.</translation> <translation id="1845230888742614096">Захаваць групу</translation> +<translation id="1853692000353488670">Новая ўкладка інкогніта</translation> <translation id="1854463785401910334">Пошук у адкрытых укладках</translation> <translation id="1861067954551502701">{count,plural, =1{Пароль {position} з {count}}one{Пароль {position} з {count}}few{Пароль {position} з {count}}many{Пароль {position} з {count}}other{Пароль {position} з {count}}}</translation> <translation id="1861262398884155592">Гэта папка пустая</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index 6410bf9..e7c7ff85 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Да се отвори ли в Wallet?</translation> <translation id="183878838231635348">Тази карта показва всички проблеми, свързани с поверителността и сигурността, които са открити автоматично от функцията за проверка на безопасността.</translation> <translation id="1845230888742614096">Запазване на групата</translation> +<translation id="1853692000353488670">Нов раздел „инкогнито“</translation> <translation id="1854463785401910334">Търсене в отворените раздели</translation> <translation id="1861067954551502701">{count,plural, =1{{position} от {count} парола}other{{position} от {count} пароли}}</translation> <translation id="1861262398884155592">Тази папка е празна</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index 77c4f1c..57463a1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">শেয়ার করা ব্যার্থ হয়েছে কারণ আপনি নেটওয়ার্কের সাথে সংযুক্ত নন৷</translation> <translation id="1668001730617725852">নতুন ট্যাব গ্রুপে খুলুন</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> থেকে <ph name="TARGET_LANGUAGE" />-এ</translation> +<translation id="168389590065701766">আপনি এখন নিজের অ্যাড্রেস বার থেকে Google Lens খুলতে ও যা কিছু দেখছেন তা সার্চ করতে পারবেন</translation> <translation id="1689333818294560261">বিশেষ নাম</translation> <translation id="169048873465870056">ট্যাব সরিয়ে গ্রুপ মুছে ফেলবেন?</translation> <translation id="1698090540708020240">পাসওয়ার্ড ইমপোর্ট করুন…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Wallet-এ খুলতে চান?</translation> <translation id="183878838231635348">আপনার জন্য 'নিরাপত্তা সংক্রান্ত পরীক্ষা' ফিচার অটোমেটিক যেকোনও গোপনীয়তা বা সুরক্ষা সংক্রান্ত সমস্যা শনাক্ত করলে, এই কার্ড তা দেখায়।</translation> <translation id="1845230888742614096">গ্রুপ রেখে দিন</translation> +<translation id="1853692000353488670">নতুন ছদ্মবেশী ট্যাব</translation> <translation id="1854463785401910334">খুলে রাখা ট্যাবে সার্চ করুন</translation> <translation id="1861067954551502701">{count,plural, =1{{count}টি পাসওয়ার্ডের মধ্যে {position} নম্বর}one{{count}টি পাসওয়ার্ডের মধ্যে {position} নম্বর}other{{count}টি পাসওয়ার্ডের মধ্যে {position} নম্বর}}</translation> <translation id="1861262398884155592">ফোল্ডারটি খালি</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332"><ph name="USER_EMAIL" /> অ্যাকাউন্ট <ph name="HOSTED_DOMAIN" /> দ্বারা ম্যানেজ করা হয়, যেটি কিছু তথ্য দেখতে পেতে পারে। <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation> <translation id="20485545164632846">নতুন আইটেম</translation> <translation id="2049727122989709386"><ph name="COUNT" />টি অ্যাকাউন্ট একই পাসওয়ার্ড ব্যবহার করছে</translation> +<translation id="205013082884273671">আপনার স্ক্রিনে যেকোনও কিছু সার্চ করুন</translation> <translation id="2054044186557130763"><ph name="NAME" /> <ph name="EMAIL" /> হিসেবে সাইন-ইন করুন, যা আপনার সংস্থা ম্যানেজ করে।</translation> <translation id="2059166748188874810">মিউনিসিপ্যালিটি</translation> <translation id="2060638295449304809">এই ঠিকানাটি শুধুমাত্র এই ডিভাইসে সেভ আছে। এটি অন্য ডিভাইসে ব্যবহার করার জন্য আপনার Google অ্যাকাউন্টে সেভ করুন, <ph name="USER_EMAIL" /></translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">চালু করা থাকলে, আপনার Google অ্যাকাউন্টে ডেটা সেভ করা হয়। বন্ধ করা থাকলে, ডেটা শুধু এই ডিভাইসে সেভ করা হয় এবং আপনি সাইন-আউট করলে তা মুছে ফেলা হয়।</translation> <translation id="2827760117436553203">ডেটা আলাদা রাখবেন?</translation> <translation id="2829172210806130158">আপনার স্ক্রিনে সার্চ করুন</translation> +<translation id="2831109159746537587">সার্চ করার জন্য ছবিতে সার্কেল বানিয়ে বা ট্যাপ করে দেখুন</translation> <translation id="2834399722155632105">৩. পাসওয়ার্ড বিকল্পে ট্যাপ করুন</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">সময়</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index 7e438d8..278cb6c8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Otvoriti u Novčaniku?</translation> <translation id="183878838231635348">Kartica prikazuje probleme s privatnošću ili sigurnošću koje je sigurnosna provjera automatski otkrila za vas.</translation> <translation id="1845230888742614096">Zadrži grupu</translation> +<translation id="1853692000353488670">Nova anonimna kartica</translation> <translation id="1854463785401910334">Pretražite otvorene kartice</translation> <translation id="1861067954551502701">{count,plural, =1{{position}. od {count} lozinke}one{{position}. od {count} lozinke}few{{position}. od {count} lozinke}other{{position}. od {count} lozinki}}</translation> <translation id="1861262398884155592">Ovaj folder je prazan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 1f768d2..bf14cba 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Vols que s'obri a Wallet?</translation> <translation id="183878838231635348">Aquesta targeta mostra qualsevol problema de privadesa o de seguretat que la funció Comprovació de seguretat detecta automàticament.</translation> <translation id="1845230888742614096">Conserva el grup</translation> +<translation id="1853692000353488670">Pestanya d'incògnit nova</translation> <translation id="1854463785401910334">Cerca a les pestanyes obertes</translation> <translation id="1861067954551502701">{count,plural, =1{{position} d’{count} contrasenya}other{{position} de {count} contrasenyes}}</translation> <translation id="1861262398884155592">Aquesta carpeta és buida</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 302e507..5b7523c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Otevřít v Peněžence?</translation> <translation id="183878838231635348">Na této kartě se zobrazují veškeré problémy se soukromím nebo zabezpečením zjištěné při automatické bezpečnostní kontrole.</translation> <translation id="1845230888742614096">Zachovat skupinu</translation> +<translation id="1853692000353488670">Nová anonymní karta</translation> <translation id="1854463785401910334">Vyhledat v otevřených kartách</translation> <translation id="1861067954551502701">{count,plural, =1{{position} z {count} hesla}few{{position} ze {count} hesel}many{{position} z {count} hesla}other{{position} z {count} hesel}}</translation> <translation id="1861262398884155592">Tato složka je prázdná</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb index ab6e706..00ee5dce 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Agor yn Wallet?</translation> <translation id="183878838231635348">Mae'r cerdyn hwn yn dangos unrhyw faterion preifatrwydd neu ddiogelwch y mae Gwiriad Diogelwch yn eu canfod yn awtomatig i chi.</translation> <translation id="1845230888742614096">Cadw'r grŵp</translation> +<translation id="1853692000353488670">Tab anhysbys newydd</translation> <translation id="1854463785401910334">Chwilio tabiau sydd ar agor</translation> <translation id="1861067954551502701">{count,plural, =1{{position} o {count} cyfrinair}zero{{position} o {count} cyfrineiriau}two{{position} o {count} gyfrinair}few{{position} o {count} chyfrinair}many{{position} o {count} chyfrinair}other{{position} o {count} cyfrinair}}</translation> <translation id="1861262398884155592">Mae'r ffolder hon yn wag</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 83e723ec..3867486 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Vil du åbne i Wallet?</translation> <translation id="183878838231635348">Dette kort viser eventuelle privatlivs- eller sikkerhedsproblemer, som Sikkerhedstjek automatisk registrerer for dig.</translation> <translation id="1845230888742614096">Behold gruppen</translation> +<translation id="1853692000353488670">Ny inkognitofane</translation> <translation id="1854463785401910334">Søg i åbne faner</translation> <translation id="1861067954551502701">{count,plural, =1{{position} af {count} adgangskode}one{{position} af {count} adgangskode}other{{position} af {count} adgangskoder}}</translation> <translation id="1861262398884155592">Denne mappe er tom</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 2a07ae12..bee1f37 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">In Wallet öffnen?</translation> <translation id="183878838231635348">Auf dieser Karte werden alle Datenschutz- oder Sicherheitsprobleme angezeigt, die der Sicherheitscheck automatisch erkennt.</translation> <translation id="1845230888742614096">Gruppe beibehalten</translation> +<translation id="1853692000353488670">Neuer Inkognitotab</translation> <translation id="1854463785401910334">In geöffneten Tabs suchen</translation> <translation id="1861067954551502701">{count,plural, =1{{position} von {count} Passwort}other{{position} von {count} Passwörtern}}</translation> <translation id="1861262398884155592">Dieser Ordner ist leer</translation> @@ -1019,7 +1020,7 @@ <translation id="519530786644929958">Der Download ist fehlgeschlagen und kann nicht wiederholt werden.</translation> <translation id="5197255632782567636">Internet</translation> <translation id="5200894869889836319">Optionen zum Festlegen von Berechtigungen</translation> -<translation id="5203051773066903947">Eingabetaste</translation> +<translation id="5203051773066903947">Eingeben</translation> <translation id="5206453674369664567">Abmelden und Daten löschen</translation> <translation id="5210365745912300556">Schließen</translation> <translation id="5211488077761630279">Zulassen, dass „<ph name="SITE_NAME" />“ <ph name="PERMISSION" /> verwendet?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index a2d6564..b634f91c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">Η κοινοποίηση απέτυχε επειδή δεν έχετε συνδεθεί στο δίκτυο.</translation> <translation id="1668001730617725852">Άνοιγμα σε νέα ομάδα καρτελών</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> προς <ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">Μπορείτε πλέον να ανοίξετε το Google Lens από τη γραμμή διευθύνσεων και να αναζητήσετε οτιδήποτε βλέπετε</translation> <translation id="1689333818294560261">Ψευδώνυμο</translation> <translation id="169048873465870056">Κατάργηση καρτέλας και διαγραφή ομάδας;</translation> <translation id="1698090540708020240">Εισαγωγή κωδικών πρόσβασης…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Άνοιγμα στο Πορτοφόλι;</translation> <translation id="183878838231635348">Αυτή η κάρτα εμφανίζει τυχόν προβλήματα απορρήτου ή ασφάλειας που εντοπίζει αυτόματα για εσάς ο Έλεγχος ασφαλείας.</translation> <translation id="1845230888742614096">Διατήρηση ομάδας</translation> +<translation id="1853692000353488670">Νέα καρτέλα ανώνυμης περιήγησης</translation> <translation id="1854463785401910334">Αναζήτηση σε ανοικτές καρτέλες</translation> <translation id="1861067954551502701">{count,plural, =1{{position} από {count} κωδικό πρόσβασης}other{{position} από {count} κωδικούς πρόσβασης}}</translation> <translation id="1861262398884155592">Αυτός ο φάκελος είναι άδειος</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">Η διαχείριση του λογαριασμού <ph name="USER_EMAIL" /> γίνεται από τον τομέα <ph name="HOSTED_DOMAIN" />, ο οποίος μπορεί να βλέπει ορισμένες πληροφορίες. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> <translation id="20485545164632846">νέο στοιχείο</translation> <translation id="2049727122989709386"><ph name="COUNT" /> λογαριασμοί χρησιμοποιούν τον ίδιο κωδικό πρόσβασης</translation> +<translation id="205013082884273671">Αναζητήστε οτιδήποτε στην οθόνη σας</translation> <translation id="2054044186557130763">Συνδεθείτε ως <ph name="NAME" /> <ph name="EMAIL" />, υπό τη διαχείριση του οργανισμού σας.</translation> <translation id="2059166748188874810">Δήμος</translation> <translation id="2060638295449304809">Αυτή η διεύθυνση αποθηκεύεται μόνο σε αυτή τη συσκευή. Για να τη χρησιμοποιήσετε στις άλλες συσκευές σας, αποθηκεύστε τη στον Λογαριασμό σας Google, <ph name="USER_EMAIL" /></translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">Όταν είναι ενεργοποιημένη αυτή η ρύθμιση, τα δεδομένα αποθηκεύονται στον Λογαριασμό σας Google. Όταν είναι απενεργοποιημένη, τα δεδομένα αποθηκεύονται μόνο σε αυτή τη συσκευή και διαγράφονται εάν αποσυνδεθείτε.</translation> <translation id="2827760117436553203">Διατήρηση δεδομένων ξεχωριστά;</translation> <translation id="2829172210806130158">Αναζήτηση στην οθόνη</translation> +<translation id="2831109159746537587">Δοκιμάστε να κυκλώσετε ή να πατήσετε την εικόνα για αναζήτηση</translation> <translation id="2834399722155632105">3. Πατήστε Επιλογές κωδικών πρόσβασης</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">Ώρα</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb index b482b74f..1cac3523 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Open in Wallet?</translation> <translation id="183878838231635348">This card shows any privacy or security issues that Safety Check automatically detects for you.</translation> <translation id="1845230888742614096">Keep group</translation> +<translation id="1853692000353488670">New incognito tab</translation> <translation id="1854463785401910334">Search open tabs</translation> <translation id="1861067954551502701">{count,plural, =1{{position} of {count} password}other{{position} of {count} passwords}}</translation> <translation id="1861262398884155592">This folder is empty</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index 9dcdcde..18887c3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">¿Quieres abrir el archivo en Billetera?</translation> <translation id="183878838231635348">En esta tarjeta se muestran los problemas de privacidad o seguridad que la Verificación de seguridad detecta automáticamente.</translation> <translation id="1845230888742614096">Conservar grupo</translation> +<translation id="1853692000353488670">Nueva pestaña de incógnito</translation> <translation id="1854463785401910334">Buscar pestañas abiertas</translation> <translation id="1861067954551502701">{count,plural, =1{{position} de {count} contraseña}other{{position} de {count} contraseñas}}</translation> <translation id="1861262398884155592">Esta carpeta está vacía</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 2670f0f..e9083e7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">Error al compartir contenido porque no estás conectado a la red</translation> <translation id="1668001730617725852">Abrir en un nuevo grupo de pestañas</translation> <translation id="1674504678466460478">De <ph name="SOURCE_LANGUAGE" /> a <ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">Ahora puedes abrir Google Lens desde la barra de direcciones y buscar cualquier cosa que veas</translation> <translation id="1689333818294560261">Apodo</translation> <translation id="169048873465870056">¿Eliminar la pestaña y el grupo?</translation> <translation id="1698090540708020240">Importar contraseñas…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">¿Abrir en Wallet?</translation> <translation id="183878838231635348">Esta tarjeta muestra los problemas de privacidad o seguridad que haya detectado automáticamente la comprobación de seguridad.</translation> <translation id="1845230888742614096">Conservar grupo</translation> +<translation id="1853692000353488670">Nueva pestaña de Incógnito</translation> <translation id="1854463785401910334">Buscar en pestañas abiertas</translation> <translation id="1861067954551502701">{count,plural, =1{{position} de {count} contraseña}other{{position} de {count} contraseñas}}</translation> <translation id="1861262398884155592">Esta carpeta está vacía</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">La cuenta <ph name="USER_EMAIL" /> la gestiona <ph name="HOSTED_DOMAIN" />, que podría ver cierta información. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="20485545164632846">nuevo elemento</translation> <translation id="2049727122989709386"><ph name="COUNT" /> cuentas usan la misma contraseña</translation> +<translation id="205013082884273671">Busca cualquier elemento de tu pantalla</translation> <translation id="2054044186557130763">Inicia sesión como <ph name="NAME" /> (<ph name="EMAIL" />), gestionado por tu organización.</translation> <translation id="2059166748188874810">Municipio</translation> <translation id="2060638295449304809">Esta dirección solo se guarda en este dispositivo. Para usarla en tus otros dispositivos, guárdala en tu cuenta de Google (<ph name="USER_EMAIL" />).</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">Si esta opción está activada, los datos se guardan en tu cuenta de Google. Si está desactivada, los datos solo se guardan en este dispositivo y se eliminan al cerrar sesión.</translation> <translation id="2827760117436553203">¿Mantener los datos separados?</translation> <translation id="2829172210806130158">Hacer búsquedas en la pantalla</translation> +<translation id="2831109159746537587">Prueba a rodear o tocar la imagen para buscar</translation> <translation id="2834399722155632105">3. Toca Opciones de las contraseñas</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" /> (<ph name="URL" />)</translation> <translation id="2841013758207633010">Hora</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 6a9bd9a..8336264 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Kas avada rakenduses Wallet?</translation> <translation id="183878838231635348">Sellel kaardil kuvatakse kõik privaatsus- või turvaohud, mille ohutuskontroll teie eest automaatselt tuvastab.</translation> <translation id="1845230888742614096">Säilita grupp</translation> +<translation id="1853692000353488670">Uus inkognito vaheleht</translation> <translation id="1854463785401910334">Otsi avatud vahelehtedelt</translation> <translation id="1861067954551502701">{count,plural, =1{Parool {position}, kokku {count} parool}other{Parool {position}, kokku {count} parooli}}</translation> <translation id="1861262398884155592">See kaust on tühi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index 70326d2..64db6d81 100644 --- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Diru-zorroa zerbitzuan ireki nahi duzu?</translation> <translation id="183878838231635348">Segurtasun-egiaztapenak pribatutasun- edo segurtasun-arazoren bat aurkitzen badu automatikoki, txartel honetan agertuko da.</translation> <translation id="1845230888742614096">Mantendu taldea</translation> +<translation id="1853692000353488670">Ezkutuko moduko fitxa berria</translation> <translation id="1854463785401910334">Bilatu irekitako fitxetan</translation> <translation id="1861067954551502701">{count,plural, =1{Pasahitz {count}etik {position}garrena}other{{count} pasahitzetatik {position}garrena}}</translation> <translation id="1861262398884155592">Hutsik dago karpeta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index d461cb4..76b2198 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">در «کیف پول» باز شود؟</translation> <translation id="183878838231635348">در این کارت، همه مشکلات امنیتی یا حریم خصوصیای که «کنترل ایمنی» بهطور خودکار شناسایی میکند نمایش داده میشود.</translation> <translation id="1845230888742614096">نگه داشتن گروه</translation> +<translation id="1853692000353488670">برگه جدید ناشناس</translation> <translation id="1854463785401910334">جستجوی برگههای باز</translation> <translation id="1861067954551502701">{count,plural, =1{{position} از {count} گذرواژه}one{{position} از {count} گذرواژه}other{{position} از {count} گذرواژه}}</translation> <translation id="1861262398884155592">این پوشه خالی است</translation> @@ -1727,7 +1728,7 @@ <translation id="7993619969781047893">ویژگیهای بعضی از سایتها ممکن است درست کار نکنند</translation> <translation id="7996239959906074962">راهاندازی کردن…</translation> <translation id="800361585186029508">نشانیهای وب واردشده در Google Chrome را باز میکند.</translation> -<translation id="8005666035647241369">به «مدیر گذرواژه Google» در این دستگاه</translation> +<translation id="8005666035647241369">در «مدیر گذرواژه Google» در این دستگاه</translation> <translation id="8010488806779226127">ویژگیهایی را کاوش کنید که میتواند به شما در انجام کارهای بیشتر درحین مرور کمک کند</translation> <translation id="8011489434346330032">بازرس وب</translation> <translation id="8017015647846870183">از «مدیر گذرواژه Google»، ازجمله گذرواژهها و گذرکلیدها</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index f739653..a51d6bf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Avataanko tiedosto Walletissa?</translation> <translation id="183878838231635348">Kortissa näkyvät yksityisyys- tai tietoturvaongelmat, jotka turvatarkistus havaitsee puolestasi automaattisesti.</translation> <translation id="1845230888742614096">Säilytä ryhmä</translation> +<translation id="1853692000353488670">Uusi incognito-välilehti</translation> <translation id="1854463785401910334">Hae avoimilta välilehdiltä</translation> <translation id="1861067954551502701">{count,plural, =1{{position}/{count} salasana}other{{position}/{count} salasanaa}}</translation> <translation id="1861262398884155592">Tämä kansio on tyhjä</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index 5896487..d8959767bd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Buksan sa Wallet?</translation> <translation id="183878838231635348">Ipinapakita ng card na ito ang anumang isyu sa privacy o seguridad na awtomatikong dine-detect ng Pag-check sa Kaligtasan para sa iyo.</translation> <translation id="1845230888742614096">Panatilihin ang Grupo</translation> +<translation id="1853692000353488670">Bagong tab na incognito</translation> <translation id="1854463785401910334">Maghanap sa mga bukas na tab</translation> <translation id="1861067954551502701">{count,plural, =1{{position} sa {count} password}one{{position} sa {count} password}other{{position} sa {count} na password}}</translation> <translation id="1861262398884155592">Walang laman ang folder na ito</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index d1d9f77..018bc57 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Ouvrir dans Portefeuille?</translation> <translation id="183878838231635348">Cette carte affiche tous les problèmes de confidentialité ou de sécurité que la Vérification de sécurité détecte automatiquement pour vous.</translation> <translation id="1845230888742614096">Conserver le groupe</translation> +<translation id="1853692000353488670">Nouvel onglet de navigation privée</translation> <translation id="1854463785401910334">Rechercher dans les onglets ouverts</translation> <translation id="1861067954551502701">{count,plural, =1{{position} mot de passe sur {count}}one{{position} mot de passe sur {count}}other{{position} mots de passe sur {count}}}</translation> <translation id="1861262398884155592">Ce dossier est vide</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 3cd9e8e..ba34637 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Ouvrir dans Cartes ?</translation> <translation id="183878838231635348">Cette fiche présente les problèmes de confidentialité ou de sécurité que le contrôle de sécurité détecte automatiquement pour vous.</translation> <translation id="1845230888742614096">Conserver le groupe</translation> +<translation id="1853692000353488670">Nouvel onglet de navigation privée</translation> <translation id="1854463785401910334">Rechercher dans les onglets ouverts</translation> <translation id="1861067954551502701">{count,plural, =1{{position} mot de passe sur {count}}one{{position} mot de passe sur {count}}other{{position} mots de passe sur {count}}}</translation> <translation id="1861262398884155592">Ce dossier est vide</translation> @@ -1410,7 +1411,7 @@ <translation id="6672241253012342409">Les sites peuvent utiliser des cookies pour améliorer votre expérience de navigation (par exemple, pour maintenir votre connexion ou mémoriser les articles de votre panier). Lorsque vous êtes en navigation privée, ils ne peuvent pas utiliser de cookies pour voir votre activité de navigation sur différents sites (par exemple, pour personnaliser les annonces).</translation> -<translation id="6672697278890207089">Saisissez votre mot de passe multiterme.</translation> +<translation id="6672697278890207089">Saisir votre phrase secrète</translation> <translation id="6674917187596384849">Vous pouvez facilement passer d'un compte à l'autre</translation> <translation id="6676349090816247042">Options de connexion.</translation> <translation id="667999046851023355">Document</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index 4115d676..00d855e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Queres abrilo en Wallet?</translation> <translation id="183878838231635348">Nesta tarxeta mostraranse os problemas de privacidade ou seguranza que detecte automaticamente Comprobación de seguranza.</translation> <translation id="1845230888742614096">Manter grupo</translation> +<translation id="1853692000353488670">Nova pestana de incógnito</translation> <translation id="1854463785401910334">Fai buscas nas pestanas abertas</translation> <translation id="1861067954551502701">{count,plural, =1{Contrasinal {position} de {count}}other{Contrasinal {position} de {count}}}</translation> <translation id="1861262398884155592">Este cartafol está baleiro</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 8b08616..dfb621b6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">શેરિંગ નિષ્ફળ થઇ કારણ કે તમે નેટવર્ક સાથે જોડાયેલ નથી.</translation> <translation id="1668001730617725852">નવા ટૅબના ગ્રૂપમાં ખોલો</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" />થી<ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">હવે તમે તમારા ઍડ્રેસ બારમાંથી Google Lens ખોલી શકો છો અને તમને જે કંઈ પણ દેખાય છે તેને શોધી શકો છો</translation> <translation id="1689333818294560261">ઉપનામ</translation> <translation id="169048873465870056">શું ટૅબ કાઢી નાખીને ગ્રૂપ ડિલીટ કરીએ?</translation> <translation id="1698090540708020240">પાસવર્ડ આયાત કરો…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Walletમાં ખોલીએ?</translation> <translation id="183878838231635348">આ કાર્ડ, સલામતી માટે તપાસની સુવિધા દ્વારા તમારા માટે ઑટોમૅટિક રીતે ભાળ મેળવવામાં આવેલી પ્રાઇવસી કે સુરક્ષા સંબંધિત કોઈપણ સમસ્યા બતાવે છે.</translation> <translation id="1845230888742614096">ગ્રૂપ રાખો</translation> +<translation id="1853692000353488670">નવી છુપી ટેબ</translation> <translation id="1854463785401910334">ખુલ્લા ટૅબમાં શોધો</translation> <translation id="1861067954551502701">{count,plural, =1{{count}માંથી {position} નંબરનો પાસવર્ડ}one{{count}માંથી {position} નંબરનો પાસવર્ડ}other{{count}માંથી {position} નંબરનો પાસવર્ડ}}</translation> <translation id="1861262398884155592">આ ફોલ્ડર ખાલી છે</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332"><ph name="USER_EMAIL" /> એકાઉન્ટ, <ph name="HOSTED_DOMAIN" /> દ્વારા મેનેજ કરવામાં આવે છે, જે કદાચ અમુક માહિતી જોઈ શકે છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation> <translation id="20485545164632846">નવી આઇટમ</translation> <translation id="2049727122989709386"><ph name="COUNT" /> એકાઉન્ટ એક જ પાસવર્ડનો ઉપયોગ કરી રહ્યાં છે</translation> +<translation id="205013082884273671">તમારી સ્ક્રીન પર જે કંઈ પણ દેખાય છે તે શોધો</translation> <translation id="2054044186557130763"><ph name="NAME" /> <ph name="EMAIL" /> તરીકે સાઇન ઇન કરો, તમારી સંસ્થા દ્વારા મેનેજ કરવામાં આવે છે.</translation> <translation id="2059166748188874810">નગરપાલિકા</translation> <translation id="2060638295449304809">આ સરનામું માત્ર આ ડિવાઇસ પર સાચવવામાં આવે છે. તમારા અન્ય ડિવાઇસમાં તેનો ઉપયોગ કરવા માટે, તેને તમારા Google એકાઉન્ટમાં સાચવો, <ph name="USER_EMAIL" /></translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">જ્યારે ચાલુ હોય, ત્યારે ડેટા તમારા Google એકાઉન્ટમાં સાચવવામાં આવે છે. જ્યારે આ બંધ હોય, ત્યારે ડેટા માત્ર આ ડિવાઇસમાં સાચવવામાં આવે છે અને જો તમે સાઇન આઉટ કરો, તો ડિલીટ કરવામાં આવે છે.</translation> <translation id="2827760117436553203">ડેટા અલગ રાખીએ?</translation> <translation id="2829172210806130158">તમારી સ્ક્રીન પર શોધવાની સુવિધા</translation> +<translation id="2831109159746537587">શોધવા માટે ચિત્ર પર વર્તુળ દોરીને કે તેના પર ટૅપ કરીને અજમાવી જુઓ</translation> <translation id="2834399722155632105">3. પાસવર્ડના વિકલ્પો પર ટૅપ કરો</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">સમય</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index d9dee149..7829d3c0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">क्या Wallet में फ़ाइल खोलनी है?</translation> <translation id="183878838231635348">इस कार्ड में निजता या सुरक्षा से जुड़ी वे सभी समस्याएं दिखती हैं जिनका सुरक्षा जांच में अपने-आप पता चलता है.</translation> <translation id="1845230888742614096">ग्रुप को सेव करें</translation> +<translation id="1853692000353488670">नया गुप्त टैब</translation> <translation id="1854463785401910334">खोले गए टैब में खोजें</translation> <translation id="1861067954551502701">{count,plural, =1{{count} में से {position} पासवर्ड}one{{count} में से {position} पासवर्ड}other{{count} में से {position} पासवर्ड}}</translation> <translation id="1861262398884155592">यह फ़ोल्डर खाली है</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index ee259ccf..4c1ecd8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Želite li otvoriti u Walletu?</translation> <translation id="183878838231635348">Na toj se kartici prikazuju problemi s privatnošću ili sigurnošću koje sigurnosna provjera automatski otkrije za vas.</translation> <translation id="1845230888742614096">Zadržite grupu</translation> +<translation id="1853692000353488670">Nova anonimna kartica</translation> <translation id="1854463785401910334">Pretražite otvorene kartice</translation> <translation id="1861067954551502701">{count,plural, =1{Zaporka {position} od {count}}one{Zaporka {position} od {count}}few{Zaporka {position} od {count}}other{Zaporka {position} od {count}}}</translation> <translation id="1861262398884155592">Mapa je prazna</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 60eb6b8..0a8ef4a1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Megnyitja a Walletban?</translation> <translation id="183878838231635348">Ez a kártya azokat az adatvédelmi és biztonsági problémákat jeleníti meg, amelyeket a biztonsági ellenőrzés automatikusan észlelt.</translation> <translation id="1845230888742614096">Csoport megtartása</translation> +<translation id="1853692000353488670">Új inkognitó lap</translation> <translation id="1854463785401910334">Keresés a megnyitott lapokon</translation> <translation id="1861067954551502701">{count,plural, =1{{position}. jelszó, összesen ennyiből: {count}}other{{position}. jelszó, összesen ennyiből: {count}}}</translation> <translation id="1861262398884155592">Ez a mappa üres</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index f36d1f4..60dadfc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Բացե՞լ Wallet-ում</translation> <translation id="183878838231635348">Այս քարտում ցուցադրված են գաղտնիության կամ անվտանգության հետ կապված բոլոր խնդիրները, որոնք ավտոմատ հայտնաբերել է անվտանգության ստուգման գործառույթը։</translation> <translation id="1845230888742614096">Պահպանել խումբը</translation> +<translation id="1853692000353488670">Նոր ինկոգնիտո ներդիր</translation> <translation id="1854463785401910334">Որոնել բաց ներդիրներում</translation> <translation id="1861067954551502701">{count,plural, =1{{position} գաղտնաբառ՝ {count}-ից}one{{position} գաղտնաբառ՝ {count}-ից}other{{position} գաղտնաբառ՝ {count}-ից}}</translation> <translation id="1861262398884155592">Այս պանակը դատարկ է</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 9566fb2..1e85d45 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Buka di Wallet?</translation> <translation id="183878838231635348">Kartu ini menampilkan setiap masalah privasi atau keamanan yang otomatis terdeteksi oleh Pemeriksaan Keamanan untuk Anda.</translation> <translation id="1845230888742614096">Simpan Grup</translation> +<translation id="1853692000353488670">Tab samaran baru</translation> <translation id="1854463785401910334">Telusuri tab yang terbuka</translation> <translation id="1861067954551502701">{count,plural, =1{{position} dari {count} sandi}other{{position} dari {count} sandi}}</translation> <translation id="1861262398884155592">Folder ini kosong</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index 96aecc1..8155522 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Opna í Veski?</translation> <translation id="183878838231635348">Þetta spjald sýnir persónuverndar- og öryggisvandamál sem öryggisathugun greinir sjálfkrafa.</translation> <translation id="1845230888742614096">Halda hópnum</translation> +<translation id="1853692000353488670">Nýr huliðsflipi</translation> <translation id="1854463785401910334">Leita í opnum flipum</translation> <translation id="1861067954551502701">{count,plural, =1{{position} af {count} aðgangsorði}one{{position} af {count} aðgangsorði}other{{position} af {count} aðgangsorðum}}</translation> <translation id="1861262398884155592">Mappan er tóm</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index ca2a7c0..a2695de 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Aprire in Wallet?</translation> <translation id="183878838231635348">In questa scheda vengono mostrati eventuali problemi di privacy o di sicurezza che il controllo di sicurezza rileva automaticamente per te.</translation> <translation id="1845230888742614096">Mantieni gruppo</translation> +<translation id="1853692000353488670">Nuova scheda in incognito</translation> <translation id="1854463785401910334">Esegui una ricerca nelle schede aperte</translation> <translation id="1861067954551502701">{count,plural, =1{{position} di {count} password}other{{position} di {count} password}}</translation> <translation id="1861262398884155592">Questa cartella è vuota</translation> @@ -1019,7 +1020,7 @@ <translation id="519530786644929958">Download non riuscito. Impossibile riprovare.</translation> <translation id="5197255632782567636">Internet</translation> <translation id="5200894869889836319">Opzioni per impostare le autorizzazioni</translation> -<translation id="5203051773066903947">Invio</translation> +<translation id="5203051773066903947">Inserisci</translation> <translation id="5206453674369664567">Esci e cancella i dati</translation> <translation id="5210365745912300556">Chiudi scheda</translation> <translation id="5211488077761630279">Vuoi consentire a "<ph name="SITE_NAME" />" di usare <ph name="PERMISSION" />?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 531cbfa..6a6ab27 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">לפתוח ב-Wallet?</translation> <translation id="183878838231635348">בכרטיס הזה מוצגות כל הבעיות בפרטיות או באבטחה שזוהו באופן אוטומטי בבדיקת האבטחה.</translation> <translation id="1845230888742614096">שמירת הקבוצה</translation> +<translation id="1853692000353488670">כרטיסייה אנונימית חדשה</translation> <translation id="1854463785401910334">חיפוש בכרטיסיות הפתוחות</translation> <translation id="1861067954551502701">{count,plural, =1{סיסמה אחת ({position}) מתוך {count}}one{{position} מתוך {count} סיסמאות}two{{position} מתוך {count} סיסמאות}other{{position} מתוך {count} סיסמאות}}</translation> <translation id="1861262398884155592">התיקייה הזו ריקה</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index 5dc602d..7bfa0bb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">ネットワークに接続されていないため共有できませんでした。</translation> <translation id="1668001730617725852">新しいタブグループで開く</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" />から<ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">アドレスバーから Google レンズを開いて、画面に表示されているものを何でも検索できるようになりました</translation> <translation id="1689333818294560261">ニックネーム</translation> <translation id="169048873465870056">タブとグループを削除しますか?</translation> <translation id="1698090540708020240">パスワードをインポート…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">ウォレットで開きますか?</translation> <translation id="183878838231635348">このカードには、安全チェックで自動検出されたプライバシーやセキュリティの問題が表示されます。</translation> <translation id="1845230888742614096">グループを保持</translation> +<translation id="1853692000353488670">新しいシークレット タブ</translation> <translation id="1854463785401910334">開いているタブを検索</translation> <translation id="1861067954551502701">{count,plural, =1{{count} 件中 {position} 件目のパスワード}other{{count} 件中 {position} 件目のパスワード}}</translation> <translation id="1861262398884155592">このフォルダは空です</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">アカウント(<ph name="USER_EMAIL" />)は <ph name="HOSTED_DOMAIN" /> によって管理されており、この組織は一部の情報を見ることができます。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> <translation id="20485545164632846">新しいアイテム</translation> <translation id="2049727122989709386"><ph name="COUNT" /> 個のアカウントで同じパスワードを使用しています</translation> +<translation id="205013082884273671">画面に表示されているものを検索</translation> <translation id="2054044186557130763"><ph name="NAME" />(<ph name="EMAIL" />)としてログインします、組織によって管理されています。</translation> <translation id="2059166748188874810">市区町村</translation> <translation id="2060638295449304809">この住所は、このデバイスにのみ保存されます。他のデバイスで使用するには、Google アカウント(<ph name="USER_EMAIL" />)に保存してください。</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">オンにすると、データが Google アカウントに保存されます。オフにすると、データはこのデバイスのみに保存され、ログアウトすると削除されます。</translation> <translation id="2827760117436553203">データを分けて保存しますか?</translation> <translation id="2829172210806130158">画面検索</translation> +<translation id="2831109159746537587">画像を丸で囲むかタップして検索してみてください</translation> <translation id="2834399722155632105">3. [パスワードのオプション] をタップします</translation> <translation id="2834956026595107950"><ph name="TITLE" />、<ph name="STATE" />、<ph name="URL" /></translation> <translation id="2841013758207633010">時間</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 4b10ce3..fe4fa230 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">ვერ გაზიარდა, რადგან არ ხართ დაკავშირებული ქსელთან.</translation> <translation id="1668001730617725852">ჩანართების ახალ ჯგუფში გახსნა</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> — <ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">უკვე შეგიძლიათ გახსნათ Google Lens მისამართთა ზოლიდან და მოიძიოთ ნებისმიერი რამ, რასაც ხედავთ</translation> <translation id="1689333818294560261">მეტსახელი</translation> <translation id="169048873465870056">ამოიშალოს ჩანართი და წაიშალოს ჯგუფი?</translation> <translation id="1698090540708020240">მიმდინარეობს პაროლების იმპორტირება…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">გაიხსნას საფულეში?</translation> <translation id="183878838231635348">ამ ბარათზე ნაჩვენები იქნება კონფიდენციალურობასთან თუ უსაფრთხოებასთან დაკავშირებული ის პრობლემები, რომლებიც ავტომატურად გამოვლინდება უსაფრთხოების შემოწმების დროს.</translation> <translation id="1845230888742614096">ჯგუფის შენარჩუნება</translation> +<translation id="1853692000353488670">ახალი ინკოგნიტო ჩანართი</translation> <translation id="1854463785401910334">ღია ჩანართებში ძიება</translation> <translation id="1861067954551502701">{count,plural, =1{{count}-დან {position} პაროლი}other{{count}-დან {position} პაროლი}}</translation> <translation id="1861262398884155592">ეს საქაღალდე ცარიელია</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">ანგარიშს <ph name="USER_EMAIL" /> მართავს <ph name="HOSTED_DOMAIN" /> და მან შეიძლება ნახოს გარკვეული ინფორმაცია. <ph name="BEGIN_LINK" />შეიტყვეთ მეტი<ph name="END_LINK" /></translation> <translation id="20485545164632846">ახალი ერთეული</translation> <translation id="2049727122989709386"><ph name="COUNT" /> ანგარიში ერთსა და იმავე პაროლს იყენებს</translation> +<translation id="205013082884273671">მოიძიეთ ნებისმიერი რამ, რასაც ეკრანზე ხედავთ</translation> <translation id="2054044186557130763">შედით, როგორც <ph name="NAME" /> <ph name="EMAIL" />, მართავს თქვენი ორგანიზაცია.</translation> <translation id="2059166748188874810">მუნიციპალიტეტი</translation> <translation id="2060638295449304809">ეს მისამართი შენახულია მხოლოდ ამ მოწყობილობაში. თქვენს სხვა მოწყობილობებში მის გამოსაყენებლად შეინახეთ ის თქვენს Google ანგარიშში (<ph name="USER_EMAIL" />)</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">ჩართვის შემთხვევაში, მონაცემები შეინახება თქვენს Google ანგარიშში. გამორთვის შემთხვევაში, მონაცემები შეინახება მხოლოდ ამ მოწყობილობაში და წაიშლება სისტემიდან გასვლისას.</translation> <translation id="2827760117436553203">ცალკე შეინახავთ მონაცემებს?</translation> <translation id="2829172210806130158">თქვენს ეკრანზე ძიება</translation> +<translation id="2831109159746537587">საძიებლად ცადეთ წრის მოხაზვა ან სურათზე შეხება</translation> <translation id="2834399722155632105">3. შეეხეთ „პაროლების ვარიანტებს“</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">დრო</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 86fcbfc9..c2565ef3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">Бөлісу сәтсіз аяқталды, себебі желіге қосылмағансыз.</translation> <translation id="1668001730617725852">Жаңа қойындылар тобында ашу</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> тілінен <ph name="TARGET_LANGUAGE" /> тіліне</translation> +<translation id="168389590065701766">Енді Google Lens-ді мекенжай жолағынан ашуға және көріп жатқан кез келген нәрсені іздеуге болады.</translation> <translation id="1689333818294560261">Лақап ат</translation> <translation id="169048873465870056">Қойындыны өшіріп, топты жою қажет пе?</translation> <translation id="1698090540708020240">Құпия сөздерді импорттау…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Wallet-тен ашу қажет пе?</translation> <translation id="183878838231635348">Бұл картада қауіпсіздік тексерісі автоматты түрде анықтайтын құпиялық немесе қауіпсіздік мәселелері беріледі.</translation> <translation id="1845230888742614096">Топты сақтау</translation> +<translation id="1853692000353488670">Жаңа жасырын қойынды</translation> <translation id="1854463785401910334">Ашық қойындылардан іздеу</translation> <translation id="1861067954551502701">{count,plural, =1{{count} құпия сөздің {position}}other{{count} құпия сөздің {position}}}</translation> <translation id="1861262398884155592">Бұл қалта бос</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332"><ph name="USER_EMAIL" /> аккаунтыңызды <ph name="HOSTED_DOMAIN" /> басқарады. Ол кейбір ақпаратты көреді. <ph name="BEGIN_LINK" />Толық ақпарат<ph name="END_LINK" /></translation> <translation id="20485545164632846">жаңа элемент</translation> <translation id="2049727122989709386"><ph name="COUNT" /> аккаунт бірдей құпия сөз пайдаланып жүр</translation> +<translation id="205013082884273671">Экрандағы кез келген нәрсені іздеңіз</translation> <translation id="2054044186557130763"><ph name="NAME" /> <ph name="EMAIL" /> ретінде кіру, ұйымыңыз басқарады.</translation> <translation id="2059166748188874810">Қала әкімшілігі</translation> <translation id="2060638295449304809">Бұл мекенжай тек осы құрылғыға сақталады. Оны басқа құрылғыларыңызда пайдалану үшін Google аккаунтына (<ph name="USER_EMAIL" />) сақтаңыз.</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">Қосылса, деректер Google аккаунтыңызға сақталады. Өшірілсе, деректер тек осы құрылғыға сақталады және аккаунттан шықсаңыз, жойылады.</translation> <translation id="2827760117436553203">Деректерді бөлек сақтау қажет пе?</translation> <translation id="2829172210806130158">Экрандағы ақпаратты іздеу</translation> +<translation id="2831109159746537587">Суретті іздеу үшін қоршаңыз немесе түртіңіз</translation> <translation id="2834399722155632105">3. "Құпия сөз опциялары" түймесін түртіңіз.</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">Уақыт</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index 18b2ba8..a4e5ee5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -212,6 +212,7 @@ <translation id="1838089197478136166">បើកនៅក្នុង Wallet ឬ?</translation> <translation id="183878838231635348">កាតនេះបង្ហាញបញ្ហាឯកជនភាព ឬសុវត្ថិភាពទាំងឡាយដែលការពិនិត្យសុវត្ថិភាពរកឃើញដោយស្វ័យប្រវត្តិសម្រាប់អ្នក។</translation> <translation id="1845230888742614096">រក្សាក្រុម</translation> +<translation id="1853692000353488670">ផ្ទាំងឯកជនថ្មី</translation> <translation id="1854463785401910334">ស្វែងរកផ្ទាំងដែលបើក</translation> <translation id="1861067954551502701">{count,plural, =1{ពាក្យសម្ងាត់ទី {position} នៃ {count}}other{ពាក្យសម្ងាត់ទី {position} នៃ {count}}}</translation> <translation id="1861262398884155592">ថតនេះទទេ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index 03c9e62..10cb2655 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Wallet ನಲ್ಲಿ ತೆರೆಯಬೇಕೇ?</translation> <translation id="183878838231635348">ಸುರಕ್ಷತೆಯ ಪರಿಶೀಲನೆ ನಿಮಗಾಗಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪತ್ತೆಯಾದ ಯಾವುದೇ ಗೌಪ್ಯತೆ ಅಥವಾ ಭದ್ರತಾ ಸಮಸ್ಯೆಗಳನ್ನು ಈ ಕಾರ್ಡ್ ತೋರಿಸುತ್ತದೆ.</translation> <translation id="1845230888742614096">ಗುಂಪನ್ನು ಇರಿಸಿಕೊಳ್ಳಿ</translation> +<translation id="1853692000353488670">ಹೊಸ ಅದೃಶ್ಯ ವಿಂಡೋ</translation> <translation id="1854463785401910334">ತೆರೆದ ಟ್ಯಾಬ್ಗಳನ್ನು ಹುಡುಕಿ</translation> <translation id="1861067954551502701">{count,plural, =1{{count} ರಲ್ಲಿ {position} ಪಾಸ್ವರ್ಡ್}one{{count} ರಲ್ಲಿ {position} ಪಾಸ್ವರ್ಡ್ಗಳು}other{{count} ರಲ್ಲಿ {position} ಪಾಸ್ವರ್ಡ್ಗಳು}}</translation> <translation id="1861262398884155592">ಈ ಫೋಲ್ಡರ್ ಖಾಲಿಯಾಗಿದೆ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 909f988..5dd68f6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">월렛에서 여시겠습니까?</translation> <translation id="183878838231635348">이 카드에는 안전 확인 기능이 자동으로 감지한 개인 정보 보호 또는 보안 문제가 표시됩니다.</translation> <translation id="1845230888742614096">그룹 유지</translation> +<translation id="1853692000353488670">새 시크릿 탭</translation> <translation id="1854463785401910334">열린 탭 검색</translation> <translation id="1861067954551502701">{count,plural, =1{{count}개의 비밀번호 중 {position}번째}other{{count}개의 비밀번호 중 {position}번째}}</translation> <translation id="1861262398884155592">폴더가 비어 있습니다.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index d63307ae..cf87598 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Капчыкта ачылсынбы?</translation> <translation id="183878838231635348">Бул карта Коопсуздукту текшерүү функциясы сиз үчүн автоматтык түрдө аныктаган бардык купуялык же коопсуздук маселелерин көрсөтөт.</translation> <translation id="1845230888742614096">Топту калтыруу</translation> +<translation id="1853692000353488670">Жаңы жашыруун өтмөк</translation> <translation id="1854463785401910334">Ачык өтмөктөрдө издөө</translation> <translation id="1861067954551502701">{count,plural, =1{{count} ичинен {position}-сырсөз}other{{count} ичинен {position}-сырсөз}}</translation> <translation id="1861262398884155592">Бул папка бош</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index 0abcbe9..c43a0023 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -212,6 +212,7 @@ <translation id="1838089197478136166">ເປີດໃນ Wallet ບໍ?</translation> <translation id="183878838231635348">ບັດນີ້ສະແດງບັນຫາດ້ານຄວາມເປັນສ່ວນຕົວ ຫຼື ຄວາມປອດໄພທີ່ການກວດສອບຄວາມປອດໄພກວດຫາໃຫ້ທ່ານໂດຍອັດຕະໂນມັດ.</translation> <translation id="1845230888742614096">ເກັບກຸ່ມໄວ້</translation> +<translation id="1853692000353488670">ແຖບບໍ່ເຜີຍຕົວຕົນໃໝ່</translation> <translation id="1854463785401910334">ຊອກຫາແຖບທີ່ເປີດຢູ່</translation> <translation id="1861067954551502701">{count,plural, =1{ລະຫັດຜ່ານ {position} ຈາກທັງໝົດ {count} ລາຍການ}other{ລະຫັດຜ່ານ {position} ຈາກທັງໝົດ {count} ລາຍການ}}</translation> <translation id="1861262398884155592">ໂຟນເດີນີ້ຫວ່າງເປົ່າ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index 0a90e2a..d3917a4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">Bendrinant įvyko klaida, nes nesate prisijungę prie tinklo.</translation> <translation id="1668001730617725852">Atidaryti naujoje skirtukų grupėje</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> į <ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">Dabar galite atidaryti „Google Lens“ adreso juostoje ir ieškoti bet ko, ką matote</translation> <translation id="1689333818294560261">Slapyvardis</translation> <translation id="169048873465870056">Pašalinti skirtuką ir ištrinti grupę?</translation> <translation id="1698090540708020240">Importuoti slaptažodžius…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Atidaryti sistemoje „Wallet“?</translation> <translation id="183878838231635348">Šioje kortelėje rodomos visos privatumo ar saugos problemos, kurias saugos patikra automatiškai aptinka.</translation> <translation id="1845230888742614096">Palikti grupę</translation> +<translation id="1853692000353488670">Naujas inkognito skirtukas</translation> <translation id="1854463785401910334">Paieška atidarytuose skirtukuose</translation> <translation id="1861067954551502701">{count,plural, =1{{position} slaptažodis iš {count}}one{{position} slaptažodis iš {count}}few{{position} slaptažodis iš {count}}many{{position} slaptažodis iš {count}}other{{position} slaptažodis iš {count}}}</translation> <translation id="1861262398884155592">Šis aplankas tuščias</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">Paskyrą <ph name="USER_EMAIL" /> tvarko svetainė <ph name="HOSTED_DOMAIN" />, kuri gali peržiūrėti tam tikrą informaciją. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation> <translation id="20485545164632846">naujas elementas</translation> <translation id="2049727122989709386"><ph name="COUNT" /> pask. naudojamas toks pat slaptažodis</translation> +<translation id="205013082884273671">Ieškokite bet ko, kas rodoma ekrane</translation> <translation id="2054044186557130763">Prisijunkite kaip <ph name="NAME" /> <ph name="EMAIL" />, kurį valdo jūsų organizacija.</translation> <translation id="2059166748188874810">Savivaldybė</translation> <translation id="2060638295449304809">Šis adresas išsaugotas tik šiame įrenginyje. Jei norite jį naudoti kituose įrenginiuose, išsaugokite „Google“ paskyroje <ph name="USER_EMAIL" /></translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">Įjungus duomenys išsaugomi „Google“ paskyroje. Išjungus šią parinktį, duomenys išsaugomi tik šiame įrenginyje ir ištrinami atsijungus.</translation> <translation id="2827760117436553203">Laikyti duomenis atskirai?</translation> <translation id="2829172210806130158">Paieška ekrane</translation> +<translation id="2831109159746537587">Jei norite ieškoti, pabandykite apibrėžti apskritimu arba paliesti nuotrauką</translation> <translation id="2834399722155632105">3. Palieskite „Slaptažodžio parinktys“</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">Laikas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index 7f4adeb..5d4fd46 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Vai atvērt lietotnē Wallet?</translation> <translation id="183878838231635348">Šajā kartītē tiek rādītas visas ar konfidencialitāti vai drošību saistītās problēmas, kas tiek automātiski noteiktas drošības pārbaudes laikā.</translation> <translation id="1845230888742614096">Paturēt grupu</translation> +<translation id="1853692000353488670">Jauna inkognito cilne</translation> <translation id="1854463785401910334">Meklēšana atvērtajās cilnēs</translation> <translation id="1861067954551502701">{count,plural, =1{Parole numur {position}, kopējais skaits ir {count}}zero{Parole numur {position}, kopējais skaits ir {count}}one{Parole numur {position}, kopējais skaits ir {count}}other{Parole numur {position}, kopējais skaits ir {count}}}</translation> <translation id="1861262398884155592">Šī mape ir tukša</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index b44f6aa..60179b12 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Да се отвори во Wallet?</translation> <translation id="183878838231635348">Во картичкава се прикажуваат сите проблеми со приватност или безбедност што ги открила „Безбедносната проверка“ автоматски за вас.</translation> <translation id="1845230888742614096">Задржи ја групата</translation> +<translation id="1853692000353488670">Нова картичка „Инкогнито“</translation> <translation id="1854463785401910334">Пребарувајте низ отворените картички</translation> <translation id="1861067954551502701">{count,plural, =1{{position} од {count} лозинка}one{{position} од {count} лозинка}other{{position} од {count} лозинки}}</translation> <translation id="1861262398884155592">Папкава е празна</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 1805824..9886caf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Wallet-ൽ തുറക്കണോ?</translation> <translation id="183878838231635348">'സുരക്ഷാ പരിശോധന' സ്വയമേവ നിങ്ങൾക്കായി കണ്ടെത്തുന്ന ഏതെങ്കിലും സ്വകാര്യതാ അല്ലെങ്കിൽ സുരക്ഷാ പ്രശ്നങ്ങൾ ഈ കാർഡ് കാണിക്കുന്നു.</translation> <translation id="1845230888742614096">ഗ്രൂപ്പ് നിലനിർത്തുക</translation> +<translation id="1853692000353488670">പുതിയ അദൃശ്യ ടാബ്</translation> <translation id="1854463785401910334">തുറന്നിരിക്കുന്ന ടാബുകളിൽ തിരയുക</translation> <translation id="1861067954551502701">{count,plural, =1{{count} പാസ്വേഡിൽ {position}-ാമത്തേത്}other{{count} പാസ്വേഡുകളിൽ {position}-ാമത്തേത്}}</translation> <translation id="1861262398884155592">ഈ ഫോൾഡറിൽ ഒന്നുമില്ല</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb index ce63bd5..bc34dae 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Wallet-д нээх үү?</translation> <translation id="183878838231635348">Энэ карт танд зориулж Аюулгүй байдлын шалгалтын автоматаар илрүүлсэн нууцлал эсвэл аюулгүй байдлын аливаа асуудлыг харуулна.</translation> <translation id="1845230888742614096">Бүлгийг үлдээх</translation> +<translation id="1853692000353488670">Нууцлал бүхий шинэ таб</translation> <translation id="1854463785401910334">Нээлттэй табуудаас хайх</translation> <translation id="1861067954551502701">{count,plural, =1{{count}-н {position}-р нууц үг}other{{count}-н {position}-р нууц үг}}</translation> <translation id="1861262398884155592">Энэ фолдер хоосон байна</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index ce15d25..138ca6b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Wallet मध्ये उघडायची आहे का?</translation> <translation id="183878838231635348">हे कार्ड तुमच्यासाठी सुरक्षितता तपासणी ने आपोआप डिटेक्ट केलेली कोणतीही गोपनीयता किंवा सुरक्षितता यासंबंधित समस्या दाखवते.</translation> <translation id="1845230888742614096">गट कायम ठेवा</translation> +<translation id="1853692000353488670">नवीन गुप्त टॅब</translation> <translation id="1854463785401910334">उघडलेल्या टॅबमध्ये शोधा</translation> <translation id="1861067954551502701">{count,plural, =1{{count} पैकी {position} क्रमांकाचा पासवर्ड}other{{count} पैकी {position} क्रमांकाचा पासवर्ड}}</translation> <translation id="1861262398884155592">हे फोल्डर रिक्त आहे</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index a6b3247..cd8c1dfa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -212,6 +212,7 @@ <translation id="1838089197478136166">Buka dalam Wallet?</translation> <translation id="183878838231635348">Kad ini menunjukkan sebarang masalah privasi atau keselamatan yang Pemeriksaan Keselamatan kesan secara automatik untuk anda.</translation> <translation id="1845230888742614096">Simpan Kumpulan</translation> +<translation id="1853692000353488670">Tab inkognito baharu</translation> <translation id="1854463785401910334">Cari dalam tab terbuka</translation> <translation id="1861067954551502701">{count,plural, =1{{position} daripada {count} kata laluan}other{{position} daripada {count} kata laluan}}</translation> <translation id="1861262398884155592">Folder ini kosong</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index 03b4bd44..eaca3ae 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Wallet တွင် ဖွင့်မလား။</translation> <translation id="183878838231635348">‘လုံခြုံရေး စစ်ဆေးမှု’ က သင့်အတွက် အလိုအလျောက် ရှာတွေ့ထားသော ကိုယ်ရေးအချက်အလက် လုံခြုံမှု (သို့) လုံခြုံရေးဆိုင်ရာ ပြဿနာများကို ဤကတ်တွင် ပြသည်။</translation> <translation id="1845230888742614096">အုပ်စုကို ဆက်ထားရန်</translation> +<translation id="1853692000353488670">ကိုယ်ပျောက် တဘ်အသစ်</translation> <translation id="1854463785401910334">ဖွင့်ထားသည့်တဘ်များတွင် ရှာဖွေခြင်း</translation> <translation id="1861067954551502701">{count,plural, =1{စကားဝှက် {count} ခုအနက် {position}}other{စကားဝှက် {count} ခုအနက် {position}}}</translation> <translation id="1861262398884155592">ဤဖိုင်တွဲတွင် မည်သည့်အရာမျှ မရှိပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index aa65d47e..abe00e9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">साझेदारी असफल भयो किनभने तपाईं सञ्जालमा जडित हुनुहुँदैन।</translation> <translation id="1668001730617725852">नयाँ ट्याब समूहमा खोल्नुहोस्</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> बाट <ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">तपाईं अब आफ्नो एड्रेस बारबाट Google लेन्स खोल्न र आफूले देख्ने जुनसुकै कुरा खोज्न सक्नुहुन्छ</translation> <translation id="1689333818294560261">उपनाम</translation> <translation id="169048873465870056">ट्याब हटाउने र समूह मेटाउने हो?</translation> <translation id="1698090540708020240">पासवर्डहरू इम्पोर्ट गर्नुहोस्…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Wallet मा खोल्ने हो?</translation> <translation id="183878838231635348">यो कार्डले सुरक्षा जाँचले स्वतः पत्ता लगाउने गोपनीयता वा सुरक्षासम्बन्धी सबै समस्याहरू देखाउँछ।</translation> <translation id="1845230888742614096">समूह राखिराख्नुहोस्</translation> +<translation id="1853692000353488670">नयाँ इनकगनिटो ट्याब</translation> <translation id="1854463785401910334">खुला ट्याबहरूमा खोज्नुहोस्</translation> <translation id="1861067954551502701">{count,plural, =1{{count} मध्ये {position} पासवर्ड}other{{count} मध्ये {position} पासवर्ड}}</translation> <translation id="1861262398884155592">यो फोल्डर खाली छ</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332"><ph name="HOSTED_DOMAIN" /> ले <ph name="USER_EMAIL" /> खाता व्यवस्थापन गर्छ र यसले केही जानकारी हेर्न सक्ने सम्भावना हुन्छ। <ph name="BEGIN_LINK" />थप जान्नुहोस्<ph name="END_LINK" /></translation> <translation id="20485545164632846">नयाँ सामग्री</translation> <translation id="2049727122989709386"><ph name="COUNT" /> वटा खाताको पासवर्ड एउटै छ</translation> +<translation id="205013082884273671">आफ्नो स्क्रिनमा भएका जुनसुकै कुरा खोज्नुहोस्</translation> <translation id="2054044186557130763">तपाईंको सङ्गठनले व्यवस्थापन गर्ने <ph name="NAME" /> <ph name="EMAIL" /> प्रयोग गरी साइन इन गर्नुहोस्।</translation> <translation id="2059166748188874810">नगरपालिका</translation> <translation id="2060638295449304809">यो ठेगाना यो डिभाइसमा मात्र सेभ गरिन्छ। यो ठेगाना आफ्ना अन्य डिभाइसमा प्रयोग गर्न यसलाई आफ्नो Google खाता <ph name="USER_EMAIL" /> मा सेभ गर्नुहोस्</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">यो सुविधा अन हुँदा यो डेटा तपाईंको Google खातामा सेभ गरिन्छ। यो सुविधा अफ भएका बेला उक्त डेटा यो डिभाइसमा मात्र सेभ गरिन्छ र तपाईंले साइन आउट गरेका खण्डमा मेटाइन्छ।</translation> <translation id="2827760117436553203">डेटा छुट्टै राख्ने हो?</translation> <translation id="2829172210806130158">स्क्रिनमा भएका वस्तु खोज्नुहोस्</translation> +<translation id="2831109159746537587">फोटोमा सर्कल बनाएर वा ट्याप गरेर खोजी हेर्नुहोस्</translation> <translation id="2834399722155632105">३. पासवर्डसम्बन्धी विकल्पहरूमा ट्याप गर्नुहोस्</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">समय</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index abe4655..caea2bb4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">Delen is mislukt omdat je niet verbonden bent met het netwerk.</translation> <translation id="1668001730617725852">Openen in nieuwe tabbladgroep</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> naar <ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">Je kunt Google Lens nu openen vanuit je adresbalk en zoeken naar alles wat je ziet</translation> <translation id="1689333818294560261">Bijnaam</translation> <translation id="169048873465870056">Tabblad verwijderen en groep verwijderen?</translation> <translation id="1698090540708020240">Wachtwoorden importeren…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Openen in Wallet?</translation> <translation id="183878838231635348">Deze kaart toont eventuele privacy- of beveiligingsproblemen die de Veiligheidscheck automatisch voor je opspoort.</translation> <translation id="1845230888742614096">Groep behouden</translation> +<translation id="1853692000353488670">Nieuw incognitotabblad</translation> <translation id="1854463785401910334">Geopende tabbladen doorzoeken</translation> <translation id="1861067954551502701">{count,plural, =1{{position} van {count} wachtwoord}other{{position} van {count} wachtwoorden}}</translation> <translation id="1861262398884155592">Deze map is leeg</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">Het account <ph name="USER_EMAIL" /> wordt beheerd door <ph name="HOSTED_DOMAIN" />. Dit domein kan bepaalde informatie bekijken. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation> <translation id="20485545164632846">nieuw item</translation> <translation id="2049727122989709386"><ph name="COUNT" /> accounts gebruiken hetzelfde wachtwoord</translation> +<translation id="205013082884273671">Zoeken naar alles op je scherm</translation> <translation id="2054044186557130763">Log in als <ph name="NAME" />, <ph name="EMAIL" />, beheerd door je organisatie.</translation> <translation id="2059166748188874810">Gemeente</translation> <translation id="2060638295449304809">Dit adres wordt alleen opgeslagen op dit apparaat. Als je het wilt gebruiken op je andere apparaten, sla je het op in je Google-account, <ph name="USER_EMAIL" />.</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">Als dit aanstaat, worden gegevens opgeslagen in je Google-account. Staat dit uit? Dan worden gegevens alleen opgeslagen op dit apparaat en worden ze verwijderd als je uitlogt.</translation> <translation id="2827760117436553203">Gegevens gescheiden houden?</translation> <translation id="2829172210806130158">Zoeken op je scherm</translation> +<translation id="2831109159746537587">Omcirkel of tik op de afbeelding om te zoeken</translation> <translation id="2834399722155632105">3. Tik op Wachtwoordopties.</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">Tijd</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index 2089ed2..9ae06470c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Vil du åpne filen i Wallet?</translation> <translation id="183878838231635348">Dette kortet viser eventuelle personvern- eller sikkerhetsproblemer som sikkerhetssjekken automatisk oppdager for deg.</translation> <translation id="1845230888742614096">Behold gruppen</translation> +<translation id="1853692000353488670">Ny inkognitofane</translation> <translation id="1854463785401910334">Søk i åpne faner</translation> <translation id="1861067954551502701">{count,plural, =1{{position} av {count} passord}other{{position} av {count} passord}}</translation> <translation id="1861262398884155592">Denne mappen er tom</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb index 9bcc27b..098e251 100644 --- a/ios/chrome/app/strings/resources/ios_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Walletରେ ଖୋଲିବେ?</translation> <translation id="183878838231635348">ଏହି କାର୍ଡ ଯେ କୌଣସି ଗୋପନୀୟତା କିମ୍ବା ସୁରକ୍ଷା ସମସ୍ୟା ଦେଖାଏ ଯାହା ସୁରକ୍ଷା ଯାଞ୍ଚ ସ୍ୱତଃ ଆପଣଙ୍କ ପାଇଁ ଚିହ୍ନଟ କରେ।</translation> <translation id="1845230888742614096">ଗ୍ରୁପକୁ ରଖନ୍ତୁ</translation> +<translation id="1853692000353488670">ନୂଆ ଇନ୍କଗ୍ନିଟୋ ଟାବ୍</translation> <translation id="1854463785401910334">ଖୋଲା ଥିବା ଟାବଗୁଡ଼ିକରେ ସର୍ଚ୍ଚ କରନ୍ତୁ</translation> <translation id="1861067954551502701">{count,plural, =1{{count} ମଧ୍ଯରୁ {position} ନମ୍ବର ପାସୱାର୍ଡ}other{{count} ମଧ୍ୟରୁ {position} ନମ୍ବର ପାସୱାର୍ଡ}}</translation> <translation id="1861262398884155592">ଏହି ଫୋଲ୍ଡର୍ ଖାଲି ଅଟେ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index 014b4734..65a6d134 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">ਕੀ Wallet ਵਿੱਚ ਖੋਲ੍ਹਣੀ ਹੈ?</translation> <translation id="183878838231635348">ਇਹ ਕਾਰਡ ਅਜਿਹੀਆਂ ਪਰਦੇਦਾਰੀ ਜਾਂ ਸੁਰੱਖਿਆ ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਦਿਖਾਉਂਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਦਾ 'ਸੁਰੱਖਿਆ ਜਾਂਚ' ਵਿਸ਼ੇਸ਼ਤਾ ਤੁਹਾਡੇ ਲਈ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਪਤਾ ਲਗਾਉਂਦੀ ਹੈ।</translation> <translation id="1845230888742614096">ਗਰੁੱਪ ਨੂੰ ਬਣਾਈ ਰੱਖੋ</translation> +<translation id="1853692000353488670">ਨਵੀਂ ਇਨਕੋਗਨਿਟੋ ਟੈਬ</translation> <translation id="1854463785401910334">ਖੁੱਲ੍ਹੀਆਂ ਟੈਬਾਂ ਵਿੱਚ ਖੋਜੋ</translation> <translation id="1861067954551502701">{count,plural, =1{{count} ਪਾਸਵਰਡ ਵਿੱਚੋਂ {position}}one{{count} ਪਾਸਵਰਡ ਵਿੱਚੋਂ {position}}other{{count} ਪਾਸਵਰਡਾਂ ਵਿੱਚੋਂ {position}}}</translation> <translation id="1861262398884155592">ਇਹ ਫੋਲਡਰ ਖਾਲੀ ਹੈ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index f08ecf56..063b1bc7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Otworzyć w Portfelu?</translation> <translation id="183878838231635348">Na tej karcie wyświetlają się wszelkie problemy związane z prywatnością i bezpieczeństwem, które zostały automatycznie wykryte przez kontrolę zabezpieczeń.</translation> <translation id="1845230888742614096">Zachowaj grupę</translation> +<translation id="1853692000353488670">Nowa karta incognito</translation> <translation id="1854463785401910334">Wyszukiwanie w otwartych kartach</translation> <translation id="1861067954551502701">{count,plural, =1{{position} z {count} hasła}few{{position} z {count} haseł}many{{position} z {count} haseł}other{{position} z {count} hasła}}</translation> <translation id="1861262398884155592">Ten folder jest pusty</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index 7390f1c1..bbab134 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Abrir na Carteira?</translation> <translation id="183878838231635348">Este card mostra os problemas de privacidade ou segurança que a Confirmação de segurança detecta automaticamente.</translation> <translation id="1845230888742614096">Manter grupo</translation> +<translation id="1853692000353488670">Nova guia anônima</translation> <translation id="1854463785401910334">Pesquisar guias abertas</translation> <translation id="1861067954551502701">{count,plural, =1{{position} de {count} senha}one{{position} de {count} senha}other{{position} de {count} senhas}}</translation> <translation id="1861262398884155592">Esta pasta está vazia</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 1b35c3ed..5cd04567 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -212,6 +212,7 @@ <translation id="1838089197478136166">Abrir na Carteira?</translation> <translation id="183878838231635348">Este cartão mostra os problemas de privacidade ou segurança detetados automaticamente pela verificação de segurança.</translation> <translation id="1845230888742614096">Manter grupo</translation> +<translation id="1853692000353488670">Novo separador anónimo</translation> <translation id="1854463785401910334">Pesquise nos separadores abertos</translation> <translation id="1861067954551502701">{count,plural, =1{{position} de {count} palavra-passe}other{{position} de {count} palavras-passe}}</translation> <translation id="1861262398884155592">Esta pasta está vazia</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index f455b72..1c3a3fe22 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Deschizi în Portofel?</translation> <translation id="183878838231635348">Acest card afișează toate problemele de confidențialitate sau de securitate pe care Verificarea de siguranță le detectează automat pentru tine.</translation> <translation id="1845230888742614096">Păstrează grupul</translation> +<translation id="1853692000353488670">Filă incognito nouă</translation> <translation id="1854463785401910334">Caută în filele deschise</translation> <translation id="1861067954551502701">{count,plural, =1{{position} din {count} parolă}few{{position} din {count} parole}other{{position} din {count} de parole}}</translation> <translation id="1861262398884155592">Acest dosar este gol</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 766c8fe..299b919 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">Не удалось опубликовать запись из-за ошибки сети.</translation> <translation id="1668001730617725852">Открыть в новой группе вкладок</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> – <ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">Теперь вы можете открывать Google Объектив из адресной строки и искать всё, что видите.</translation> <translation id="1689333818294560261">Название</translation> <translation id="169048873465870056">Удалить вкладку и группу?</translation> <translation id="1698090540708020240">Импорт паролей</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">Открыть в Кошельке?</translation> <translation id="183878838231635348">Здесь будут перечислены проблемы с конфиденциальностью и безопасностью, обнаруженные в ходе автоматической проверки.</translation> <translation id="1845230888742614096">Оставить</translation> +<translation id="1853692000353488670">Новая вкладка инкогнито</translation> <translation id="1854463785401910334">Поиск по открытым вкладкам</translation> <translation id="1861067954551502701">{count,plural, =1{Пароль {position} из {count}}one{Пароль {position} из {count}}few{Пароль {position} из {count}}many{Пароль {position} из {count}}other{Пароль {position} из {count}}}</translation> <translation id="1861262398884155592">Папка пуста</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">Аккаунтом <ph name="USER_EMAIL" /> управляет <ph name="HOSTED_DOMAIN" />. Некоторая ваша информация может быть видна этой организации. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> <translation id="20485545164632846">новый продукт</translation> <translation id="2049727122989709386">В нескольких аккаунтах (<ph name="COUNT" />) используется один и тот же пароль.</translation> +<translation id="205013082884273671">Находите информацию о любом объекте на экране</translation> <translation id="2054044186557130763">Войти как <ph name="NAME" />, <ph name="EMAIL" />. Аккаунтом управляет ваша организация.</translation> <translation id="2059166748188874810">Муниципалитет</translation> <translation id="2060638295449304809">Адрес сохранен только на этом устройстве. Чтобы он синхронизировался с другими устройствами, добавьте его в аккаунт Google (<ph name="USER_EMAIL" />).</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">Если параметр включен, данные сохраняются в аккаунте Google. Если нет, данные остаются только на этом устройстве и удаляются при выходе из аккаунта.</translation> <translation id="2827760117436553203">Хранить эти данные отдельно?</translation> <translation id="2829172210806130158">Поиск по экрану</translation> +<translation id="2831109159746537587">Обведите изображение или коснитесь его для поиска</translation> <translation id="2834399722155632105">3. Выберите "Настройки паролей".</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">Время</translation> @@ -1019,7 +1023,7 @@ <translation id="519530786644929958">Ошибка скачивания. Повтор действия невозможен.</translation> <translation id="5197255632782567636">Интернет</translation> <translation id="5200894869889836319">Параметры разрешений</translation> -<translation id="5203051773066903947">Ввод</translation> +<translation id="5203051773066903947">Ввести</translation> <translation id="5206453674369664567">Выйти и удалить данные</translation> <translation id="5210365745912300556">Закрыть вкладку</translation> <translation id="5211488077761630279">Разрешить сайту <ph name="SITE_NAME" /> использовать разрешения <ph name="PERMISSION" />?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index e74917f..f145a7cb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Wallet තුළ විවෘත කරන්න ද?</translation> <translation id="183878838231635348">මෙම කාඩ්පත ඔබ වෙනුවෙන් ආරක්ෂිත පරීක්ෂාව ස්වයංක්රීයව අනාවරණය කරන ඕනෑම පෞද්ගලිකත්ව හෝ ආරක්ෂක ගැටලුවක් පෙන්වයි.</translation> <translation id="1845230888742614096">සමූහය තබා ගන්න</translation> +<translation id="1853692000353488670">නව අප්රසිද්ධ පටිත්ත</translation> <translation id="1854463785401910334">විවෘත ටැබ සොයන්න</translation> <translation id="1861067954551502701">{count,plural, =1{මුරපද {count}න් {position}}one{මුරපද {count}න් {position}}other{මුරපද {count}න් {position}}}</translation> <translation id="1861262398884155592">මෙම ෆෝල්ඩරය හිස්ය</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 6ac891e6..56b3bfa1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Chcete ho otvoriť v Peňaženke?</translation> <translation id="183878838231635348">Na tejto karte sa zobrazujú všetky problémy s ochranou súkromia alebo zabezpečením, ktoré pre vás kontrola bezpečnosti automaticky zistí.</translation> <translation id="1845230888742614096">Ponechať skupinu</translation> +<translation id="1853692000353488670">Nová karta inkognito</translation> <translation id="1854463785401910334">Hľadať v otvorených kartách</translation> <translation id="1861067954551502701">{count,plural, =1{{position} z {count} hesla}few{{position} z {count} hesiel}many{{position} of {count} passwords}other{{position} z {count} hesiel}}</translation> <translation id="1861262398884155592">Tento priečinok je prázdny</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index d42344b4..bf6d999 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Želite odpreti v Google Denarnici?</translation> <translation id="183878838231635348">Na tej kartici so prikazane vse težave z zasebnostjo ali varnostjo, ki jih varnostno preverjanje samodejno zazna.</translation> <translation id="1845230888742614096">Ohrani skupino</translation> +<translation id="1853692000353488670">Nov anonimni zavihek</translation> <translation id="1854463785401910334">Iskanje po odprtih zavihkih</translation> <translation id="1861067954551502701">{count,plural, =1{{position} od {count} gesla}one{{position} od {count} gesla}two{{position} od {count} gesel}few{{position} od {count} gesel}other{{position} od {count} gesel}}</translation> <translation id="1861262398884155592">Ta mapa je prazna</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index 2da2357..578f4c2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Të hapet te "Portofoli"?</translation> <translation id="183878838231635348">Kjo kartë shfaq çdo problem me privatësinë ose sigurinë që "Kontrolli i sigurisë" zbulon automatikisht për ty.</translation> <translation id="1845230888742614096">Mbaje grupin</translation> +<translation id="1853692000353488670">Skedë e re e fshehtë</translation> <translation id="1854463785401910334">Kërko skedat e hapura</translation> <translation id="1861067954551502701">{count,plural, =1{{position} nga {count} fjalëkalim}other{{position} nga {count} fjalëkalime}}</translation> <translation id="1861262398884155592">Kjo dosje është bosh</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb index 432d082..421bec1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -212,6 +212,7 @@ <translation id="1838089197478136166">Želite da otvorite u Novčaniku?</translation> <translation id="183878838231635348">Ova kartica prikazuje sve probleme u vezi sa privatnošću ili bezbednošću koje Provera bezbednosti automatski otkrije.</translation> <translation id="1845230888742614096">Zadrži grupu</translation> +<translation id="1853692000353488670">Nova kartica bez arhiviranja</translation> <translation id="1854463785401910334">Pretražite otvorene kartice</translation> <translation id="1861067954551502701">{count,plural, =1{{position}. od {count} lozinke}one{{position}. od {count} lozinke}few{{position}. od {count} lozinke}other{{position}. od {count} lozinki}}</translation> <translation id="1861262398884155592">Ovaj folder je prazan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 68b14c8..0190371 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -212,6 +212,7 @@ <translation id="1838089197478136166">Желите да отворите у Новчанику?</translation> <translation id="183878838231635348">Ова картица приказује све проблеме у вези са приватношћу или безбедношћу које Провера безбедности аутоматски открије.</translation> <translation id="1845230888742614096">Задржи групу</translation> +<translation id="1853692000353488670">Нова картица без архивирања</translation> <translation id="1854463785401910334">Претражите отворене картице</translation> <translation id="1861067954551502701">{count,plural, =1{{position}. од {count} лозинке}one{{position}. од {count} лозинке}few{{position}. од {count} лозинке}other{{position}. од {count} лозинки}}</translation> <translation id="1861262398884155592">Овај фолдер је празан</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index e9764a9..c73dc3b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Vill du öppna den i Wallet?</translation> <translation id="183878838231635348">På det här kortet visas eventuella integritets- eller säkerhetsproblem som automatiskt har identifierats av säkerhetskontrollen.</translation> <translation id="1845230888742614096">Behåll gruppen</translation> +<translation id="1853692000353488670">Ny inkognitoflik</translation> <translation id="1854463785401910334">Sök på öppna flikar</translation> <translation id="1861067954551502701">{count,plural, =1{{position} av {count} lösenord}other{{position} av {count} lösenord}}</translation> <translation id="1861262398884155592">Mappen är tom</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 64d47f3..e0953d8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Ungependa kuifungua katika Pochi?</translation> <translation id="183878838231635348">Kadi hii inaonyesha matatizo yoyote ya faragha au ya usalama ambayo kipengele cha Ukaguzi wa Usalama hutambua kiotomatiki kwa niaba yako.</translation> <translation id="1845230888742614096">Hifadhi Kikundi</translation> +<translation id="1853692000353488670">Kichupo fiche kipya</translation> <translation id="1854463785401910334">Tafuta kwenye vichupo vilivyofunguliwa</translation> <translation id="1861067954551502701">{count,plural, =1{Nenosiri la {position} kati ya {count}}other{Nenosiri la {position} kati ya {count}}}</translation> <translation id="1861262398884155592">Folda hii haina chochote</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 98add79..a6fb8003 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Walletடில் திறக்கவா?</translation> <translation id="183878838231635348">பாதுகாப்புச் சரிபார்ப்பு உங்களுக்காகத் தானாகக் கண்டறிந்த தனியுரிமை மற்றும் பாதுகாப்புச் சிக்கல்கள் இந்தக் கார்டில் காட்டப்படும்.</translation> <translation id="1845230888742614096">குழுவை வைத்திரு</translation> +<translation id="1853692000353488670">புதிய மறைநிலை தாவல்</translation> <translation id="1854463785401910334">திறந்துள்ள பக்கங்களில் தேடுங்கள்</translation> <translation id="1861067954551502701">{count,plural, =1{{count} கடவுச்சொல்லில் {position}வது}other{{count} கடவுச்சொற்களில் {position}வது}}</translation> <translation id="1861262398884155592">இந்த ஃபோல்டரில் எதுவுமில்லை</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index abfe27124..2fe9605b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Walletలో తెరవాలా?</translation> <translation id="183878838231635348">మీ కోసం సేఫ్టీ చెక్ ఆటోమేటిక్గా గుర్తించే ఏవైనా గోప్యత లేదా సెక్యూరిటీ సమస్యలను ఈ కార్డ్ చూపుతుంది.</translation> <translation id="1845230888742614096">గ్రూప్ను అలాగే ఉంచండి</translation> +<translation id="1853692000353488670">కొత్త అజ్ఞాత ట్యాబ్</translation> <translation id="1854463785401910334">తెరిచి ఉన్న ట్యాబ్లలో సెర్చ్ చేయండి</translation> <translation id="1861067954551502701">{count,plural, =1{{count} పాస్వర్డ్లో {position}వది}other{{count} పాస్వర్డ్లలో {position}వది}}</translation> <translation id="1861262398884155592">ఈ ఫోల్డర్ ఖాళీగా ఉంది</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 253c70e..3f1fedf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">การแชร์ล้มเหลวเนื่องจากคุณไม่ได้เชื่อมต่อเครือข่าย</translation> <translation id="1668001730617725852">เปิดในกลุ่มแท็บใหม่</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" />เป็น<ph name="TARGET_LANGUAGE" /></translation> +<translation id="168389590065701766">ตอนนี้คุณเปิด Google Lens จากแถบที่อยู่และค้นหาทุกสิ่งที่คุณเห็นได้แล้ว</translation> <translation id="1689333818294560261">ชื่อเล่น</translation> <translation id="169048873465870056">นําแท็บออกและลบกลุ่มใช่ไหม</translation> <translation id="1698090540708020240">นำเข้ารหัสผ่าน…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">เปิดใน Wallet ใช่ไหม</translation> <translation id="183878838231635348">การ์ดนี้แสดงปัญหาด้านความเป็นส่วนตัวหรือความปลอดภัยที่การตรวจสอบความปลอดภัยตรวจหาให้คุณโดยอัตโนมัติ</translation> <translation id="1845230888742614096">เก็บกลุ่มไว้</translation> +<translation id="1853692000353488670">แท็บใหม่ที่ไม่ระบุตัวตน</translation> <translation id="1854463785401910334">ค้นหาในแท็บที่เปิดอยู่</translation> <translation id="1861067954551502701">{count,plural, =1{รหัสผ่าน {position} จาก {count} รายการ}other{รหัสผ่าน {position} จาก {count} รายการ}}</translation> <translation id="1861262398884155592">โฟลเดอร์นี้ว่างเปล่า</translation> @@ -237,7 +239,7 @@ <translation id="1956138802718275401">เข้าถึงรหัสผ่านจากหน้าจอหลัก</translation> <translation id="1959441496380398824">แตะวันที่ค้างไว้</translation> <translation id="1962348300797608157"><ph name="BEGIN_BOLD" /><ph name="FULL_NAME" /><ph name="END_BOLD" /> ได้แชร์รหัสผ่านกับคุณสำหรับ <ph name="WEBSITE" /></translation> -<translation id="1962969542251276847">ล็อกหน้าจอ</translation> +<translation id="1962969542251276847">หน้าจอล็อก</translation> <translation id="1963976881984600709">การปกป้องแบบมาตรฐาน</translation> <translation id="1966313166384086081">ข้อมูลเว็บไซต์</translation> <translation id="1967461193809857427">{count,plural, =1{ดูแท็บที่ค้างไว้จาก Android ต่อไหม}other{ดูแท็บที่ค้างไว้จาก Android ต่อไหม}}</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">บัญชี <ph name="USER_EMAIL" /> จัดการโดย <ph name="HOSTED_DOMAIN" /> ซึ่งอาจดูข้อมูลบางอย่างได้ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation> <translation id="20485545164632846">รายการใหม่</translation> <translation id="2049727122989709386"><ph name="COUNT" /> บัญชีใช้รหัสผ่านเดียวกัน</translation> +<translation id="205013082884273671">ค้นหาได้ทุกสิ่งบนหน้าจอ</translation> <translation id="2054044186557130763">ลงชื่อเข้าใช้ด้วย <ph name="NAME" /> <ph name="EMAIL" /> ซึ่งจัดการโดยองค์กรของคุณ</translation> <translation id="2059166748188874810">เทศบาล</translation> <translation id="2060638295449304809">ที่อยู่ข้างต้นจะบันทึกไว้ในอุปกรณ์นี้เท่านั้น หากต้องการใช้งานในอุปกรณ์อื่น ให้บันทึกไว้ในบัญชี Google <ph name="USER_EMAIL" /></translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">เมื่อเปิดไว้ ระบบจะบันทึกข้อมูลในบัญชี Google ของคุณ เมื่อปิดไว้ ระบบจะบันทึกข้อมูลในอุปกรณ์เครื่องนี้เท่านั้นและข้อมูลจะถูกลบหากคุณออกจากระบบ</translation> <translation id="2827760117436553203">เก็บข้อมูลแยกกันไหม</translation> <translation id="2829172210806130158">ค้นหาในหน้าจอ</translation> +<translation id="2831109159746537587">ลองวงหรือแตะรูปภาพเพื่อค้นหา</translation> <translation id="2834399722155632105">3. แตะตัวเลือกรหัสผ่าน</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="2841013758207633010">เวลา</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index 42f745d..784a87fa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Cüzdan'da açılsın mı?</translation> <translation id="183878838231635348">Bu kart, Güvenlik Kontrolü'nün sizin için otomatik olarak tespit ettiği gizlilik veya güvenlik sorunlarını gösterir.</translation> <translation id="1845230888742614096">Grubu silme</translation> +<translation id="1853692000353488670">Yeni gizli sekme</translation> <translation id="1854463785401910334">Açık sekmelerde ara</translation> <translation id="1861067954551502701">{count,plural, =1{{position}/{count} şifre}other{{position}/{count} şifre}}</translation> <translation id="1861262398884155592">Bu klasör boş</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index b3f7903d..ddea83b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Відкрити в Гаманці?</translation> <translation id="183878838231635348">На цій картці відображаються всі проблеми з конфіденційністю чи захистом, які функція перевірки безпеки виявила автоматично.</translation> <translation id="1845230888742614096">Зберегти групу</translation> +<translation id="1853692000353488670">Нова анонімна вкладка</translation> <translation id="1854463785401910334">Шукати у відкритих вкладках</translation> <translation id="1861067954551502701">{count,plural, =1{{position} з {count} пароля}one{{position} з {count} пароля}few{{position} з {count} паролів}many{{position} з {count} паролів}other{{position} з {count} пароля}}</translation> <translation id="1861262398884155592">Ця папка порожня</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 8d00444..a90dfd57 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -171,6 +171,7 @@ <translation id="1657011748321897393">اشتراک ناکام ہوگیا کیونکہ آپ نیٹ ورک سے منسلک نہیں ہیں۔</translation> <translation id="1668001730617725852">نئے ٹیب گروپ میں کھولیں</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> سے <ph name="TARGET_LANGUAGE" /> میں</translation> +<translation id="168389590065701766">اب آپ اپنے ایڈریس بار سے Google لینز کھول سکتے ہیں اور جو کچھ بھی دیکھتے ہیں اسے تلاش کر سکتے ہیں</translation> <translation id="1689333818294560261">عرفی نام</translation> <translation id="169048873465870056">ٹیب کو ہٹائیں اور گروپ کو حذف کریں؟</translation> <translation id="1698090540708020240">پاس ورڈز درآمد کریں…</translation> @@ -211,6 +212,7 @@ <translation id="1838089197478136166">والٹ میں کھولیں؟</translation> <translation id="183878838231635348">اس کارڈ پر رازداری یا سیکیورٹی کا ایسا کوئی بھی مسئلہ دکھائی دیتا ہے جس کا سیفٹی چیک خصوصیت خودکار طور پر آپ کیلئے پتا لگاتی ہے۔</translation> <translation id="1845230888742614096">گروپ کو برقرار رکھیں</translation> +<translation id="1853692000353488670">نیا پوشیدگی ٹیب</translation> <translation id="1854463785401910334">کھلے ٹیبز تلاش کریں</translation> <translation id="1861067954551502701">{count,plural, =1{{count} پاس ورڈ میں سے {position}}other{{count} پاس ورڈز میں سے {position}}}</translation> <translation id="1861262398884155592">یہ فولڈر خالی ہے</translation> @@ -266,6 +268,7 @@ <translation id="2044681667265133332">اکاؤنٹ <ph name="USER_EMAIL" /> کا نظم <ph name="HOSTED_DOMAIN" /> کے ذریعے کیا جاتا ہے جو کچھ معلومات دیکھنے کے قابل ہو سکتا ہے۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation> <translation id="20485545164632846">نیا آئٹم</translation> <translation id="2049727122989709386"><ph name="COUNT" /> اکاؤنٹس ایک ہی پاس ورڈ کا استعمال کر رہے ہیں</translation> +<translation id="205013082884273671">اپنی اسکرین پر کچھ بھی تلاش کریں</translation> <translation id="2054044186557130763">بطور <ph name="NAME" /> <ph name="EMAIL" /> سائن ان کریں، جو آپ کی تنظیم کے زیر انتظام ہے۔</translation> <translation id="2059166748188874810">میونسپلٹی</translation> <translation id="2060638295449304809">یہ پتہ صرف اس آلہ میں محفوظ ہے۔ اپنے دیگر آلات پر اس کا استعمال کرنے کے لیے، اسے اپنے Google اکاؤنٹ، <ph name="USER_EMAIL" /> میں محفوظ کریں</translation> @@ -458,6 +461,7 @@ <translation id="2819667972867209401">آن ہونے پر، ڈیٹا آپ کے Google اکاؤنٹ میں محفوظ ہوتا ہے۔ آف ہونے پر، ڈیٹا صرف اس آلہ میں محفوظ ہوتا ہے اور اگر آپ سائن آؤٹ کرتے ہیں تو اسے حذف کر دیا جاتا ہے۔</translation> <translation id="2827760117436553203">ڈیٹا کو الگ رکھیں؟</translation> <translation id="2829172210806130158">اپنی اسکرین پر تلاش کریں</translation> +<translation id="2831109159746537587">تلاش کرنے کے لیے تصویر پر دائرہ بنانے یا تھپتھپانے کی کوشش کریں</translation> <translation id="2834399722155632105">3. پاس ورڈ کے اختیارات پر تھپتھپائیں۔</translation> <translation id="2834956026595107950"><ph name="TITLE" />، <ph name="STATE" />، <ph name="URL" /></translation> <translation id="2841013758207633010">وقت</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index ef340b3d..8654b50 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Walletda ochilsinmi?</translation> <translation id="183878838231635348">Bu bildirgida Xavfsizlik tekshiruvi avtomatik aniqlagan maxfiylik yoki xavfsizlik muammolari chiqadi.</translation> <translation id="1845230888742614096">Guruh qolsin</translation> +<translation id="1853692000353488670">Yangi inkognito varaq</translation> <translation id="1854463785401910334">Ochiq varaqlar ichidan qidirish</translation> <translation id="1861067954551502701">{count,plural, =1{Parol: {position}/{count}}other{Parol: {position}/{count}}}</translation> <translation id="1861262398884155592">Bu jild bo‘sh</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index ae88fb2f..2197a59 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -212,6 +212,7 @@ <translation id="1838089197478136166">Mở trong Wallet?</translation> <translation id="183878838231635348">Thẻ này cho biết mọi vấn đề về quyền riêng tư hoặc bảo mật mà tính năng Kiểm tra an toàn tự động phát hiện cho bạn.</translation> <translation id="1845230888742614096">Giữ lại nhóm</translation> +<translation id="1853692000353488670">Thẻ ẩn danh mới</translation> <translation id="1854463785401910334">Tìm kiếm trên các thẻ đang mở</translation> <translation id="1861067954551502701">{count,plural, =1{Mật khẩu {position}/{count}}other{Mật khẩu {position}/{count}}}</translation> <translation id="1861262398884155592">Thư mục này trống</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index bdbddd25..8d74287a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">在“钱包”中打开?</translation> <translation id="183878838231635348">此卡片会显示安全检查功能自动为您检测到的所有隐私问题或安全问题。</translation> <translation id="1845230888742614096">保留分组</translation> +<translation id="1853692000353488670">打开新的无痕式标签页</translation> <translation id="1854463785401910334">在打开的标签页中搜索</translation> <translation id="1861067954551502701">{count,plural, =1{第 {position} 个建议密码,共 {count} 个}other{第 {position} 个建议密码,共 {count} 个}}</translation> <translation id="1861262398884155592">此文件夹中没有内容</translation> @@ -335,7 +336,7 @@ <translation id="2316129865977710310">不用了,谢谢</translation> <translation id="2320166752086256636">隐藏键盘</translation> <translation id="2321086116217818302">正在准备密码…</translation> -<translation id="2323697864063408084">在锁屏状态下以横幅形式接收通知,确保不错过任何重要信息</translation> +<translation id="2323697864063408084">在锁屏状态下以横幅形式接收通知,绝不错过任何重要信息</translation> <translation id="2326302612031521902">单位选择器</translation> <translation id="2330607597130465898">无保护</translation> <translation id="233375395665273385">删除数据并退出账号</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index 0d56334..0f13859b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">要在「錢包」中開啟嗎?</translation> <translation id="183878838231635348">此資訊卡會顯示「安全檢查」功能自動偵測到的任何私隱或安全問題。</translation> <translation id="1845230888742614096">保留群組</translation> +<translation id="1853692000353488670">新增無痕式分頁</translation> <translation id="1854463785401910334">在開啟的分頁中搜尋</translation> <translation id="1861067954551502701">{count,plural, =1{第 {position} 個密碼,總共有 {count} 個}other{第 {position} 個密碼,總共有 {count} 個}}</translation> <translation id="1861262398884155592">此資料夾中沒有內容</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index cf95491..d90c12c5b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">要在「錢包」中開啟嗎?</translation> <translation id="183878838231635348">這張資訊卡會顯示安全檢查功能自動偵測到的隱私權或安全性問題。</translation> <translation id="1845230888742614096">保留群組</translation> +<translation id="1853692000353488670">新增無痕式分頁</translation> <translation id="1854463785401910334">在開啟的分頁中搜尋</translation> <translation id="1861067954551502701">{count,plural, =1{第 {position} 組密碼,共 {count} 個}other{第 {position} 組密碼,共 {count} 個}}</translation> <translation id="1861262398884155592">這個資料夾是空的</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index f9cef08..e28897e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -211,6 +211,7 @@ <translation id="1838089197478136166">Vula kuWallet?</translation> <translation id="183878838231635348">Leli khadi libonisa noma yiziphi izinkinga eziyimfihlo noma ezokuvikela Ukuhlola Ukuphepha okukutholela zona ngokuzenzakalelayo.</translation> <translation id="1845230888742614096">Gcina Iqembu</translation> +<translation id="1853692000353488670">Ithebhu entsha ye-incognito</translation> <translation id="1854463785401910334">Sesha amathebhu avulekile</translation> <translation id="1861067954551502701">{count,plural, =1{Iphasiwedi engu-{position} kwangu-{count}}one{Amaphasiwedi angu-{position} kwangu-{count}}other{Amaphasiwedi angu-{position} kwangu-{count}}}</translation> <translation id="1861262398884155592">Le folda ayinalutho</translation>
diff --git a/ios_internal b/ios_internal index b8a1106..387b982 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit b8a110660c3ff24ecb3358f24baf562ceca2b41c +Subproject commit 387b9826cd0a115bfb093a4057895a3a84123f01
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index 2b3f3ac..c6c9d5aa 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -891,7 +891,7 @@ // Keep this flag around at least until that date. BASE_FEATURE(kGetDisplayMediaConfersActivation, "GetDisplayMediaConfersActivation", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); // Controls whether a "Share this tab instead" button should be shown for // getDisplayMedia captures. Note: This flag does not control if the "Share this
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn index 7f6e1ae0..84e5cce 100644 --- a/media/gpu/BUILD.gn +++ b/media/gpu/BUILD.gn
@@ -48,7 +48,6 @@ "//content/gpu:*", "//content/renderer:*", "//media/audio:unit_tests", - "//media/gpu/fuzzers/av1_builder/*", "//media/gpu/ipc/*", "//media/gpu/test/*", "//media/gpu/vaapi/*", @@ -777,8 +776,3 @@ ] seed_corpuses = [ "//media/test/data" ] } - -group("stream_builder_fuzzers") { - testonly = true - public_deps = [ "//media/gpu/fuzzers/av1_builder:av1_builder_fuzzer" ] -}
diff --git a/media/gpu/fuzzers/av1_builder/BUILD.gn b/media/gpu/fuzzers/av1_builder/BUILD.gn deleted file mode 100644 index d55fcd43..0000000 --- a/media/gpu/fuzzers/av1_builder/BUILD.gn +++ /dev/null
@@ -1,25 +0,0 @@ -# Copyright 2025 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//media/media_options.gni") -import("//testing/libfuzzer/fuzzer_test.gni") -import("//third_party/libgav1/options.gni") -import("//third_party/protobuf/proto_library.gni") - -proto_library("av1_builder_fuzzer_inputs") { - sources = [ "av1_builder_fuzzer_inputs.proto" ] -} - -fuzzer_test("av1_builder_fuzzer") { - sources = [ "av1_builder_fuzzer.cc" ] - deps = [ - ":av1_builder_fuzzer_inputs", - "//base", - "//media/gpu", - "//third_party/libgav1:libgav1_parser", - "//third_party/libprotobuf-mutator", - ] - - seed_corpus = "seed" -}
diff --git a/media/gpu/fuzzers/av1_builder/av1_builder_fuzzer.cc b/media/gpu/fuzzers/av1_builder/av1_builder_fuzzer.cc deleted file mode 100644 index 935ec4f..0000000 --- a/media/gpu/fuzzers/av1_builder/av1_builder_fuzzer.cc +++ /dev/null
@@ -1,205 +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 "media/gpu/av1_builder.h" - -#include <stddef.h> -#include <stdint.h> -#include <string.h> - -#include "base/numerics/safe_conversions.h" -#include "media/gpu/fuzzers/av1_builder/av1_builder_fuzzer_inputs.pb.h" -#include "testing/libfuzzer/proto/lpm_interface.h" - -namespace { - -media::AV1BitstreamBuilder::SequenceHeader ConvertToAV1BuilderSequenceHeader( - const media::fuzzing::AV1SequenceHeader& sequence_header) { - media::AV1BitstreamBuilder::SequenceHeader seq_hdr{}; - seq_hdr.profile = sequence_header.profile(); - // The `operating_points_cnt_minus_1` is always provided by VEA as 0, not - // driver, so we clamp to `kMaxTemporalLayerNum - 1` if input is larger than - // that, to avoid CHECK failure in av1_builder. - seq_hdr.operating_points_cnt_minus_1 = - std::min(sequence_header.operating_points_cnt_minus_1(), - media::AV1BitstreamBuilder::kMaxTemporalLayerNum - 1); - const size_t level_size = - std::min(static_cast<size_t>(sequence_header.level_size()), - std::size(seq_hdr.level)); - for (size_t i = 0; i < level_size; ++i) { - seq_hdr.level[i] = sequence_header.level(i); - } - const size_t tier_size = - std::min(static_cast<size_t>(sequence_header.tier_size()), - std::size(seq_hdr.tier)); - for (size_t i = 0; i < tier_size; ++i) { - seq_hdr.tier[i] = sequence_header.tier(i); - } - seq_hdr.frame_width_bits_minus_1 = sequence_header.frame_width_bits_minus_1(); - seq_hdr.frame_height_bits_minus_1 = - sequence_header.frame_height_bits_minus_1(); - seq_hdr.width = sequence_header.width(); - seq_hdr.height = sequence_header.height(); - seq_hdr.use_128x128_superblock = sequence_header.use_128x128_superblock(); - seq_hdr.enable_filter_intra = sequence_header.enable_filter_intra(); - seq_hdr.enable_intra_edge_filter = sequence_header.enable_intra_edge_filter(); - seq_hdr.enable_interintra_compound = - sequence_header.enable_interintra_compound(); - seq_hdr.enable_masked_compound = sequence_header.enable_masked_compound(); - seq_hdr.enable_warped_motion = sequence_header.enable_warped_motion(); - seq_hdr.enable_dual_filter = sequence_header.enable_dual_filter(); - seq_hdr.enable_order_hint = sequence_header.enable_order_hint(); - seq_hdr.enable_jnt_comp = sequence_header.enable_jnt_comp(); - seq_hdr.enable_ref_frame_mvs = sequence_header.enable_ref_frame_mvs(); - seq_hdr.order_hint_bits_minus_1 = sequence_header.order_hint_bits_minus_1(); - seq_hdr.enable_superres = sequence_header.enable_superres(); - seq_hdr.enable_cdef = sequence_header.enable_cdef(); - seq_hdr.enable_restoration = sequence_header.enable_restoration(); - - return seq_hdr; -} - -libgav1::FrameType ConvertToFrameType(media::fuzzing::FrameType frame_type) { - switch (frame_type) { - case media::fuzzing::FrameType::KEY: - return libgav1::FrameType::kFrameKey; - case media::fuzzing::FrameType::INTER: - return libgav1::FrameType::kFrameInter; - case media::fuzzing::FrameType::INTRAONLY: - return libgav1::FrameType::kFrameIntraOnly; - case media::fuzzing::FrameType::SWITCH: - return libgav1::FrameType::kFrameSwitch; - } -} - -libgav1::LoopRestorationType ConvertToLoopRestorationType( - media::fuzzing::LoopRestorationType restoration_type) { - switch (restoration_type) { - case media::fuzzing::LoopRestorationType::NONE: - return libgav1::LoopRestorationType::kLoopRestorationTypeNone; - case media::fuzzing::LoopRestorationType::SWITCHABLE: - return libgav1::LoopRestorationType::kLoopRestorationTypeSwitchable; - case media::fuzzing::LoopRestorationType::WIENER: - return libgav1::LoopRestorationType::kLoopRestorationTypeWiener; - case media::fuzzing::LoopRestorationType::SGRPROJ: - return libgav1::LoopRestorationType::kLoopRestorationTypeSgrProj; - } -} - -media::AV1BitstreamBuilder::FrameHeader ConvertToAV1BuilderFrameHeader( - const media::fuzzing::AV1FrameHeader& frame_header) { - media::AV1BitstreamBuilder::FrameHeader pic_hdr{}; - pic_hdr.frame_type = ConvertToFrameType(frame_header.frame_type()); - pic_hdr.error_resilient_mode = frame_header.error_resilient_mode(); - pic_hdr.disable_cdf_update = frame_header.disable_cdf_update(); - - pic_hdr.base_qindex = frame_header.base_qindex(); - pic_hdr.separate_uv_delta_q = frame_header.separate_uv_delta_q(); - pic_hdr.delta_q_y_dc = frame_header.delta_q_y_dc(); - pic_hdr.delta_q_u_dc = frame_header.delta_q_u_dc(); - pic_hdr.delta_q_u_ac = frame_header.delta_q_u_ac(); - pic_hdr.delta_q_v_dc = frame_header.delta_q_v_dc(); - pic_hdr.delta_q_v_ac = frame_header.delta_q_v_ac(); - pic_hdr.using_qmatrix = frame_header.using_qmatrix(); - pic_hdr.qm_y = frame_header.qm_y(); - pic_hdr.qm_u = frame_header.qm_u(); - pic_hdr.qm_v = frame_header.qm_v(); - - pic_hdr.order_hint = frame_header.order_hint(); - - const size_t tier_size = - std::min(static_cast<size_t>(frame_header.filter_level_size()), - std::size(pic_hdr.filter_level)); - for (size_t i = 0; i < tier_size; ++i) { - pic_hdr.filter_level[i] = frame_header.filter_level(i); - } - pic_hdr.filter_level_u = frame_header.filter_level_u(); - pic_hdr.filter_level_v = frame_header.filter_level_v(); - pic_hdr.sharpness_level = frame_header.sharpness_level(); - pic_hdr.loop_filter_delta_enabled = frame_header.loop_filter_delta_enabled(); - pic_hdr.loop_filter_delta_update = frame_header.loop_filter_delta_update(); - pic_hdr.update_ref_delta = frame_header.update_ref_delta(); - - const size_t ref_deltas_size = - std::min(static_cast<size_t>(frame_header.loop_filter_ref_deltas_size()), - std::size(pic_hdr.loop_filter_ref_deltas)); - for (size_t i = 0; i < ref_deltas_size; ++i) { - pic_hdr.loop_filter_ref_deltas[i] = frame_header.loop_filter_ref_deltas(i); - } - pic_hdr.update_mode_delta = frame_header.update_mode_delta(); - const size_t mode_deltas_size = - std::min(static_cast<size_t>(frame_header.loop_filter_mode_deltas_size()), - std::size(pic_hdr.loop_filter_mode_deltas)); - for (size_t i = 0; i < mode_deltas_size; ++i) { - pic_hdr.loop_filter_mode_deltas[i] = - frame_header.loop_filter_mode_deltas(i); - } - pic_hdr.delta_lf_present = frame_header.delta_lf_present(); - pic_hdr.delta_lf_res = frame_header.delta_lf_res(); - pic_hdr.delta_lf_multi = frame_header.delta_lf_multi(); - pic_hdr.delta_q_present = frame_header.delta_q_present(); - pic_hdr.delta_q_res = frame_header.delta_q_res(); - - pic_hdr.primary_ref_frame = frame_header.primary_ref_frame(); - pic_hdr.refresh_frame_flags = frame_header.refresh_frame_flags(); - const size_t ref_frame_idx_size = - std::min(static_cast<size_t>(frame_header.ref_frame_idx_size()), - std::size(pic_hdr.ref_frame_idx)); - for (size_t i = 0; i < ref_frame_idx_size; ++i) { - pic_hdr.ref_frame_idx[i] = frame_header.ref_frame_idx(i); - } - const size_t ref_order_hint_size = - std::min(static_cast<size_t>(frame_header.ref_order_hint_size()), - std::size(pic_hdr.ref_order_hint)); - for (size_t i = 0; i < ref_order_hint_size; ++i) { - pic_hdr.ref_order_hint[i] = frame_header.ref_order_hint(i); - } - const size_t restoration_type_size = - std::min(static_cast<size_t>(frame_header.restoration_type_size()), - std::size(pic_hdr.restoration_type)); - for (size_t i = 0; i < restoration_type_size; ++i) { - pic_hdr.restoration_type[i] = - ConvertToLoopRestorationType(frame_header.restoration_type(i)); - } - pic_hdr.segment_number = frame_header.segment_number(); - pic_hdr.feature_data.fill({}); - const size_t feature_data_flat_size = - std::min(static_cast<size_t>(frame_header.feature_data_size()), - pic_hdr.feature_data.size() * pic_hdr.feature_data[0].size()); - for (size_t flat_idx = 0; flat_idx < feature_data_flat_size; ++flat_idx) { - size_t j = flat_idx / pic_hdr.feature_data[0].size(); - size_t i = flat_idx % pic_hdr.feature_data[0].size(); - pic_hdr.feature_data[j][i] = frame_header.feature_data(flat_idx); - } - pic_hdr.segmentation_temporal_update = - frame_header.segmentation_temporal_update(); - pic_hdr.segmentation_update_data = frame_header.segmentation_update_data(); - pic_hdr.segment_number = frame_header.segment_number(); - - return pic_hdr; -} - -} // namespace - -namespace media { -namespace fuzzing { - -DEFINE_PROTO_FUZZER(const AV1FrameOBUList& obu_list) { - for (const auto& obu : obu_list.frames()) { - AV1BitstreamBuilder::SequenceHeader seq_hdr = - ConvertToAV1BuilderSequenceHeader(obu.seq_hdr()); - - AV1BitstreamBuilder::FrameHeader pic_hdr = - ConvertToAV1BuilderFrameHeader(obu.frame_hdr()); - - AV1BitstreamBuilder seq_obu = - AV1BitstreamBuilder::BuildSequenceHeaderOBU(seq_hdr); - - AV1BitstreamBuilder frame_obu = - AV1BitstreamBuilder::BuildFrameHeaderOBU(seq_hdr, pic_hdr); - } -} - -} // namespace fuzzing -} // namespace media
diff --git a/media/gpu/fuzzers/av1_builder/av1_builder_fuzzer_inputs.proto b/media/gpu/fuzzers/av1_builder/av1_builder_fuzzer_inputs.proto deleted file mode 100644 index 4ff21fb..0000000 --- a/media/gpu/fuzzers/av1_builder/av1_builder_fuzzer_inputs.proto +++ /dev/null
@@ -1,113 +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. - -syntax = "proto2"; - -package media.fuzzing; - -enum FrameType { - KEY = 0; - INTER = 1; - INTRAONLY = 2; - SWITCH = 3; -} - -enum LoopRestorationType { - NONE = 0; - SWITCHABLE = 1; - WIENER = 2; - SGRPROJ = 3; -} - -message AV1FrameHeader { - optional FrameType frame_type = 1; - optional bool error_resilient_mode = 2; - optional bool disable_cdf_update = 3; - optional bool disable_frame_end_update_cdf = 4; - optional uint32 base_qindex = 5; - optional bool separate_uv_delta_q = 6; - optional int32 delta_q_y_dc = 7; - optional int32 delta_q_u_dc = 8; - optional int32 delta_q_u_ac = 9; - optional int32 delta_q_v_dc = 10; - optional int32 delta_q_v_ac = 11; - optional bool using_qmatrix = 12; - optional uint32 qm_y = 13; - optional uint32 qm_u = 14; - optional uint32 qm_v = 15; - optional uint32 order_hint = 16; - repeated uint32 filter_level = 17; - optional uint32 filter_level_u = 18; - optional uint32 filter_level_v = 19; - optional uint32 sharpness_level = 20; - optional bool loop_filter_delta_enabled = 21; - optional bool loop_filter_delta_update = 22; - optional bool update_ref_delta = 23; - repeated int32 loop_filter_ref_deltas = 24; - optional bool update_mode_delta = 25; - repeated int32 loop_filter_mode_deltas = 26; - optional bool delta_lf_present = 27; - optional uint32 delta_lf_res = 28; - optional bool delta_lf_multi = 29; - optional bool delta_q_present = 30; - optional uint32 delta_q_res = 31; - optional uint32 primary_ref_frame = 32; - repeated uint32 ref_frame_idx = 33; - optional uint32 refresh_frame_flags = 34; - repeated uint32 ref_order_hint = 35; - optional uint32 cdef_damping_minus_3 = 36; - optional uint32 cdef_bits = 37; - repeated uint32 cdef_y_pri_strength = 38; - repeated uint32 cdef_y_sec_strength = 39; - repeated uint32 cdef_uv_pri_strength = 40; - repeated uint32 cdef_uv_sec_strength = 41; - repeated LoopRestorationType restoration_type = 42; - optional uint32 lr_unit_shift = 43; - optional uint32 lr_uv_shift = 44; - optional uint32 tx_mode = 45; - optional bool reduced_tx_set = 46; - optional bool segmentation_enabled = 47; - optional bool segmentation_update_map = 48; - optional bool segmentation_temporal_update = 49; - optional bool segmentation_update_data = 50; - optional uint32 segment_number = 51; - repeated uint32 feature_mask = 52; - repeated uint32 feature_data = 53; - optional bool allow_screen_content_tools = 54; - optional bool allow_intrabc = 55; - optional bool reference_select = 56; -} - -message AV1SequenceHeader { - optional uint32 profile = 1; - optional uint32 operating_points_cnt_minus_1 = 2; - repeated uint32 level = 3; - repeated uint32 tier = 4; - optional uint32 frame_width_bits_minus_1 = 5; - optional uint32 frame_height_bits_minus_1 = 6; - optional uint32 width = 7; - optional uint32 height = 8; - optional bool use_128x128_superblock = 9; - optional bool enable_filter_intra = 10; - optional bool enable_intra_edge_filter = 11; - optional bool enable_interintra_compound = 12; - optional bool enable_masked_compound = 13; - optional bool enable_warped_motion = 14; - optional bool enable_dual_filter = 15; - optional bool enable_order_hint = 16; - optional bool enable_jnt_comp = 17; - optional bool enable_ref_frame_mvs = 18; - optional uint32 order_hint_bits_minus_1 = 19; - optional bool enable_superres = 20; - optional bool enable_cdef = 21; - optional bool enable_restoration = 22; -} - -message AV1FrameOBUList { - message FrameHeader { - optional AV1SequenceHeader seq_hdr = 1; - optional AV1FrameHeader frame_hdr = 2; - } - repeated FrameHeader frames = 1; -}
diff --git a/media/gpu/fuzzers/av1_builder/seed/README.md b/media/gpu/fuzzers/av1_builder/seed/README.md deleted file mode 100644 index b8d8bcf4..0000000 --- a/media/gpu/fuzzers/av1_builder/seed/README.md +++ /dev/null
@@ -1,7 +0,0 @@ -# AV1 builder fuzzing seed corpus - -## List of Test Files - -### av1-I-frame-1280x720.textproto - -This file was generated by parsing //media/test/data/av1-I-frame-1280x720 using libgav1 OBU parser and converting the result to a protobuf.
diff --git a/media/gpu/fuzzers/av1_builder/seed/av1-I-frame-1280x720.textproto b/media/gpu/fuzzers/av1_builder/seed/av1-I-frame-1280x720.textproto deleted file mode 100644 index 884d282..0000000 --- a/media/gpu/fuzzers/av1_builder/seed/av1-I-frame-1280x720.textproto +++ /dev/null
@@ -1,139 +0,0 @@ -frames { - seq_hdr { - profile: 0 - operating_points_cnt_minus_1: 0 - level: 5 - level: 0 - level: 0 - tier: 0 - tier: 0 - tier: 0 - frame_width_bits_minus_1: 10 - frame_height_bits_minus_1: 9 - width: 1280 - height: 720 - use_128x128_superblock: true - enable_filter_intra: true - enable_intra_edge_filter: true - enable_interintra_compound: false - enable_masked_compound: false - enable_warped_motion: false - enable_dual_filter: false - enable_order_hint: false - enable_jnt_comp: false - enable_ref_frame_mvs: false - order_hint_bits_minus_1: 0 - enable_superres: false - enable_cdef: true - enable_restoration: true - } - frame_hdr { - frame_type: KEY - error_resilient_mode: false - disable_cdf_update: false - disable_frame_end_update_cdf: false - base_qindex: 217 - separate_uv_delta_q: true - delta_q_y_dc: 0 - delta_q_u_dc: 0 - delta_q_u_ac: 0 - delta_q_v_dc: 0 - delta_q_v_ac: 0 - using_qmatrix: false - qm_y: 0 - qm_u: 0 - qm_v: 0 - order_hint: 0 - filter_level: 46 - filter_level: 41 - filter_level_u: 20 - filter_level_v: 16 - sharpness_level: 0 - loop_filter_delta_enabled: true - loop_filter_delta_update: true - update_ref_delta: false - loop_filter_ref_deltas: 0 - loop_filter_ref_deltas: 0 - loop_filter_ref_deltas: 0 - loop_filter_ref_deltas: 0 - loop_filter_ref_deltas: 0 - loop_filter_ref_deltas: 0 - loop_filter_ref_deltas: 0 - loop_filter_ref_deltas: 0 - update_mode_delta: false - loop_filter_mode_deltas: 0 - loop_filter_mode_deltas: 0 - delta_lf_present: false - delta_lf_res: 0 - delta_lf_multi: false - delta_q_present: false - delta_q_res: 0 - primary_ref_frame: 0 - ref_frame_idx: 0 - ref_frame_idx: 0 - ref_frame_idx: 0 - ref_frame_idx: 0 - ref_frame_idx: 0 - ref_frame_idx: 0 - ref_frame_idx: 0 - refresh_frame_flags: 0 - ref_order_hint: 0 - ref_order_hint: 0 - ref_order_hint: 0 - ref_order_hint: 0 - ref_order_hint: 0 - ref_order_hint: 0 - ref_order_hint: 0 - ref_order_hint: 0 - cdef_damping_minus_3: 3 - cdef_bits: 0 - cdef_y_pri_strength: 13 - cdef_y_pri_strength: 0 - cdef_y_pri_strength: 0 - cdef_y_pri_strength: 0 - cdef_y_pri_strength: 0 - cdef_y_pri_strength: 0 - cdef_y_pri_strength: 0 - cdef_y_pri_strength: 0 - cdef_y_sec_strength: 3 - cdef_y_sec_strength: 0 - cdef_y_sec_strength: 0 - cdef_y_sec_strength: 0 - cdef_y_sec_strength: 0 - cdef_y_sec_strength: 0 - cdef_y_sec_strength: 0 - cdef_y_sec_strength: 0 - cdef_uv_pri_strength: 5 - cdef_uv_pri_strength: 0 - cdef_uv_pri_strength: 0 - cdef_uv_pri_strength: 0 - cdef_uv_pri_strength: 0 - cdef_uv_pri_strength: 0 - cdef_uv_pri_strength: 0 - cdef_uv_pri_strength: 0 - cdef_uv_sec_strength: 2 - cdef_uv_sec_strength: 0 - cdef_uv_sec_strength: 0 - cdef_uv_sec_strength: 0 - cdef_uv_sec_strength: 0 - cdef_uv_sec_strength: 0 - cdef_uv_sec_strength: 0 - cdef_uv_sec_strength: 0 - restoration_type: 1 - restoration_type: 0 - restoration_type: 0 - lr_unit_shift: 1 - lr_uv_shift: 0 - tx_mode: 1 - reduced_tx_set: false - segmentation_enabled: false - segmentation_update_map: false - segmentation_temporal_update: false - segmentation_update_data: false - segment_number: 0 - feature_data: 0 - allow_screen_content_tools: false - allow_intrabc: false - reference_select: false - } -} \ No newline at end of file
diff --git a/media/gpu/vp8_decoder.cc b/media/gpu/vp8_decoder.cc index 2316ddc2..6edb1fc 100644 --- a/media/gpu/vp8_decoder.cc +++ b/media/gpu/vp8_decoder.cc
@@ -70,7 +70,7 @@ return kRanOutOfStreamData; if (!curr_frame_hdr_) { - curr_frame_hdr_.reset(new Vp8FrameHeader()); + curr_frame_hdr_ = std::make_unique<Vp8FrameHeader>(); if (!parser_.ParseFrame(curr_frame_start_, frame_size_, curr_frame_hdr_.get())) { DVLOG(1) << "Error during decode";
diff --git a/net/data/ssl/chrome_root_store/root_store.md b/net/data/ssl/chrome_root_store/root_store.md index 83a99a2..d853150 100644 --- a/net/data/ssl/chrome_root_store/root_store.md +++ b/net/data/ssl/chrome_root_store/root_store.md
@@ -1,7 +1,7 @@ <!-- mdformat off(generated) --> <!-- mdlint off(generated) --> # Chrome Root Store -Version: 19 +Version: 21 [TOC]
diff --git a/net/data/ssl/chrome_root_store/root_store.textproto b/net/data/ssl/chrome_root_store/root_store.textproto index 3ff97fa..6630eec 100644 --- a/net/data/ssl/chrome_root_store/root_store.textproto +++ b/net/data/ssl/chrome_root_store/root_store.textproto
@@ -8,7 +8,7 @@ # Version # should always be incremented up whenever this (or any pem file that # it references) is changed. -version_major: 19 +version_major: 21 # CN=Actalis Authentication Root CA, O=Actalis S.p.A./03358520967, L=Milan, C=IT # https://ssltest-a.actalis.it:8443
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index 95c7331..5d920e6 100644 --- a/net/http/transport_security_state_static.pins +++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@ # hash function for preloaded entries again (we have already done so once). # -# Last updated: 2025-06-20 12:54 UTC +# Last updated: 2025-06-21 12:55 UTC PinsListTimestamp -1750424078 +1750510539 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/http/transport_security_state_static_pins.json b/net/http/transport_security_state_static_pins.json index 7a5ab26..a009b32 100644 --- a/net/http/transport_security_state_static_pins.json +++ b/net/http/transport_security_state_static_pins.json
@@ -31,7 +31,7 @@ // the 'static_spki_hashes' and 'bad_static_spki_hashes' fields in 'pinsets' // refer to, and the timestamp at which the pins list was last updated. // -// Last updated: 2025-06-20 12:54 UTC +// Last updated: 2025-06-21 12:55 UTC // { "pinsets": [
diff --git a/remoting/host/installer/linux/debian/postinst b/remoting/host/installer/linux/debian/postinst index d29ee11..a435813 100755 --- a/remoting/host/installer/linux/debian/postinst +++ b/remoting/host/installer/linux/debian/postinst
@@ -23,13 +23,16 @@ HOST_PATH="$INSTALL_DIR/chrome-remote-desktop-host" CRD_GROUP="chrome-remote-desktop" -restart_hosts() { - # Kill host processes. SIGKILL is used because the wrapper script will - # restart the host immediately (so any cleanup that might otherwise happen - # is not useful), and this ensures that hosts restart even if they are - # deadlocked. - echo "Restarting Chrome Remote Desktop hosts (sessions will be unaffected)..." - pkill -KILL -f "^$HOST_PATH" || true +kill_processes() { + # Kill CRD processes except for the service script process. The script process + # command line conveniently starts with /usr/bin/python3, so the pkill pattern + # won't kill it. SIGKILL is used because the wrapper script will restart the + # host immediately (so any cleanup that might otherwise happen is not useful), + # and this ensures that hosts restart even if they are deadlocked. + # TODO: yuweih - see if it's possible to restart the service script process + # without resetting the session. + echo "Killing Chrome Remote Desktop processes so that they can be reloaded (sessions will be unaffected)..." + pkill -KILL -f "^$INSTALL_DIR" || true } case "$1" in @@ -98,7 +101,7 @@ fi fi - restart_hosts + kill_processes # If any files have changed that require the user to restart their virtual # desktops (eg, the wrapper script itself) then notify them but don't do @@ -117,7 +120,7 @@ "triggered") echo "Responding to dpkg trigger." - restart_hosts + kill_processes ;; esac
diff --git a/services/viz/public/cpp/compositing/mojom_traits_perftest.cc b/services/viz/public/cpp/compositing/mojom_traits_perftest.cc index e9a6418..07cb372 100644 --- a/services/viz/public/cpp/compositing/mojom_traits_perftest.cc +++ b/services/viz/public/cpp/compositing/mojom_traits_perftest.cc
@@ -162,7 +162,6 @@ gfx::Rect arbitrary_rect1_inside_rect2(44, 23, 4, 2); gfx::Rect arbitrary_rect3(7, -53, 22, 19); gfx::Rect arbitrary_rect2_inside_rect3(12, -51, 5, 12); - gfx::Size arbitrary_size1(15, 19); gfx::RectF arbitrary_rectf1(4.2f, -922.1f, 15.6f, 29.5f); gfx::RRectF arbitrary_rrectf1(4.2f, -922.1f, 15.6f, 29.5f, 1.2f, 2.3f, 3.4f, 4.5f, 5.6f, 6.7f, 7.8f, 8.9f); @@ -271,7 +270,7 @@ tile_in->SetAll(shared_state2_in, arbitrary_rect2, arbitrary_rect1_inside_rect2, arbitrary_bool1, arbitrary_resourceid3, arbitrary_rectf1, - arbitrary_size1, arbitrary_bool2, arbitrary_bool3); + arbitrary_bool2, arbitrary_bool3); } }
diff --git a/services/viz/public/cpp/compositing/quads_mojom_traits.cc b/services/viz/public/cpp/compositing/quads_mojom_traits.cc index ad82cff..7c5f1d34 100644 --- a/services/viz/public/cpp/compositing/quads_mojom_traits.cc +++ b/services/viz/public/cpp/compositing/quads_mojom_traits.cc
@@ -192,7 +192,6 @@ viz::DrawQuad* out) { viz::TileDrawQuad* quad = static_cast<viz::TileDrawQuad*>(out); if (!data.ReadTexCoordRect(&quad->tex_coord_rect) || - !data.ReadTextureSize(&quad->texture_size) || !data.ReadResourceId(&quad->resource_id)) { return false; }
diff --git a/services/viz/public/cpp/compositing/quads_mojom_traits.h b/services/viz/public/cpp/compositing/quads_mojom_traits.h index ce0e83b..639268f 100644 --- a/services/viz/public/cpp/compositing/quads_mojom_traits.h +++ b/services/viz/public/cpp/compositing/quads_mojom_traits.h
@@ -497,11 +497,6 @@ return quad->tex_coord_rect; } - static const gfx::Size& texture_size(const viz::DrawQuad& input) { - const viz::TileDrawQuad* quad = viz::TileDrawQuad::MaterialCast(&input); - return quad->texture_size; - } - static bool nearest_neighbor(const viz::DrawQuad& input) { const viz::TileDrawQuad* quad = viz::TileDrawQuad::MaterialCast(&input); return quad->nearest_neighbor;
diff --git a/services/viz/public/mojom/compositing/quads.mojom b/services/viz/public/mojom/compositing/quads.mojom index d0bea84ae..43348f7 100644 --- a/services/viz/public/mojom/compositing/quads.mojom +++ b/services/viz/public/mojom/compositing/quads.mojom
@@ -104,7 +104,6 @@ struct TileQuadState { gfx.mojom.RectF tex_coord_rect; - gfx.mojom.Size texture_size; ResourceId resource_id; bool nearest_neighbor; bool force_anti_aliasing_off;
diff --git a/third_party/androidx/build.gradle b/third_party/androidx/build.gradle index b364da6..054986d 100644 --- a/third_party/androidx/build.gradle +++ b/third_party/androidx/build.gradle
@@ -307,7 +307,7 @@ google() maven { // This URL is generated by the fetch_all_androidx.py script. - url 'https://androidx.dev/snapshots/builds/13676404/artifacts/repository' + url 'https://androidx.dev/snapshots/builds/13677693/artifacts/repository' } mavenCentral() }
diff --git a/third_party/angle b/third_party/angle index 3b7528e..5220e634 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 3b7528e1c70f8cbe5643d91e3647a502a348e29f +Subproject commit 5220e634850ec26f4b4b0f305ba2a69cf0bc55df
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index 3bf3eb11..b51577c3 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -1108,6 +1108,10 @@ ForceDarkImageClassifier::kUseBlinkSettings, &forcedark_image_classifier_policy_options); +BASE_FEATURE(kFrameMetadataObserver, + "FrameMetadataObserver", + base::FEATURE_ENABLED_BY_DEFAULT); + // Enables the frequency capping for detecting large sticky ads. // Large-sticky-ads are those ads that stick to the bottom of the page // regardless of a user’s efforts to scroll, and take up more than 30% of the @@ -2462,7 +2466,9 @@ kSoftNavigationHeuristicsModes[] = { {SoftNavigationHeuristicsMode::kBasic, "basic"}, {SoftNavigationHeuristicsMode::kAdvancedPaintAttribution, - "advanced_paint_attribution"}}; + "advanced_paint_attribution"}, + {SoftNavigationHeuristicsMode::kPrePaintBasedAttribution, + "pre_paint_based_attribution"}}; BASE_FEATURE_ENUM_PARAM(SoftNavigationHeuristicsMode, kSoftNavigationHeuristicsModeParam, &kSoftNavigationHeuristics,
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index 3ef5da32..bfd82a5c 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -654,6 +654,8 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kForceOffTextAutosizing); +BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kFrameMetadataObserver); + BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE( kFrequencyCappingForLargeStickyAdDetection); @@ -1685,6 +1687,7 @@ enum class SoftNavigationHeuristicsMode : uint8_t { kBasic, kAdvancedPaintAttribution, + kPrePaintBasedAttribution, }; BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE_PARAM( SoftNavigationHeuristicsMode,
diff --git a/third_party/blink/public/common/performance/performance_timeline_constants.h b/third_party/blink/public/common/performance/performance_timeline_constants.h index 2ec283e..429a08e5 100644 --- a/third_party/blink/public/common/performance/performance_timeline_constants.h +++ b/third_party/blink/public/common/performance/performance_timeline_constants.h
@@ -13,6 +13,7 @@ struct SoftNavigationMetrics { uint32_t count = kSoftNavigationCountDefaultValue; base::TimeDelta start_time; + base::TimeDelta first_contentful_paint; std::string navigation_id; }; } // namespace blink
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn index f0621c92..fd8d17b4 100644 --- a/third_party/blink/public/mojom/BUILD.gn +++ b/third_party/blink/public/mojom/BUILD.gn
@@ -60,6 +60,7 @@ "compute_pressure/web_pressure_update.mojom", "confidence_level.mojom", "content_extraction/ai_page_content.mojom", + "content_extraction/frame_metadata_observer_registry.mojom", "content_extraction/inner_html.mojom", "content_extraction/inner_text.mojom", "content_index/content_index.mojom",
diff --git a/third_party/blink/public/mojom/content_extraction/frame_metadata_observer_registry.mojom b/third_party/blink/public/mojom/content_extraction/frame_metadata_observer_registry.mojom new file mode 100644 index 0000000..ccc78b0 --- /dev/null +++ b/third_party/blink/public/mojom/content_extraction/frame_metadata_observer_registry.mojom
@@ -0,0 +1,22 @@ +// 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. + +module blink.mojom; + +// An observer to be notified whenever metadata derived from the associated +// Document changes. +interface FrameMetadataObserver { + // Called when the paid content metadata changes. Clients should consider the + // value to be unspecified (eg. document not loaded yet) until this method + // is called. + OnPaidContentMetadataChanged(bool has_paid_content); +}; + +// Allows observers in the browser to register to be notified whenever metadata +// derived from the associated Document changes. +interface FrameMetadataObserverRegistry { + // Adds an observer to be notified whenever metadata derived from the + // associated Document changes. + AddObserver(pending_remote<FrameMetadataObserver> observer); +};
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.cc b/third_party/blink/renderer/core/display_lock/display_lock_context.cc index 600da63d..45af8950 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_context.cc +++ b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
@@ -724,6 +724,11 @@ // update. layout_object->MarkBlockingWheelEventHandlerChanged(); } + if (needs_soft_navigation_context_update_ || + layout_object->SoftNavigationContextChanged() || + layout_object->DescendantSoftNavigationContextChanged()) { + layout_object->MarkSoftNavigationContextChanged(); + } return true; } return compositing_dirtied; @@ -795,7 +800,8 @@ PrePaintTreeWalk::ObjectRequiresTreeBuilderContext(*layout_object) || needs_prepaint_subtree_walk_ || needs_effective_allowed_touch_action_update_ || - needs_blocking_wheel_event_handler_update_; + needs_blocking_wheel_event_handler_update_ || + needs_soft_navigation_context_update_; } return false; }
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.h b/third_party/blink/renderer/core/display_lock/display_lock_context.h index 45c3d73..f27c8ed 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_context.h +++ b/third_party/blink/renderer/core/display_lock/display_lock_context.h
@@ -208,11 +208,14 @@ void SetNeedsPrePaintSubtreeWalk( bool needs_effective_allowed_touch_action_update, - bool needs_blocking_wheel_event_handler_update) { + bool needs_blocking_wheel_event_handler_update, + bool needs_soft_navigation_context_update) { needs_effective_allowed_touch_action_update_ = needs_effective_allowed_touch_action_update; needs_blocking_wheel_event_handler_update_ = needs_blocking_wheel_event_handler_update; + needs_soft_navigation_context_update_ = + needs_soft_navigation_context_update; needs_prepaint_subtree_walk_ = true; } @@ -497,6 +500,7 @@ bool needs_effective_allowed_touch_action_update_ = false; bool needs_blocking_wheel_event_handler_update_ = false; + bool needs_soft_navigation_context_update_ = false; bool needs_prepaint_subtree_walk_ = false; bool needs_compositing_dependent_flag_update_ = false;
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc b/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc index b1aa756..660467f 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc +++ b/third_party/blink/renderer/core/display_lock/display_lock_context_test.cc
@@ -13,6 +13,8 @@ #include "cc/base/features.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" +#include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/platform/web_runtime_features.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/core/css/properties/longhands.h" #include "third_party/blink/renderer/core/css/style_change_reason.h" @@ -37,6 +39,9 @@ #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/style/computed_style.h" #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_context.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_heuristics.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h" #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h" #include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" @@ -3585,4 +3590,367 @@ EXPECT_FALSE(target->GetDisplayLockContext()->IsLocked()); } +class SoftNavigationDisplayLockContextTest + : public DisplayLockContextTest, + public ::testing::WithParamInterface<bool> { + public: + SoftNavigationDisplayLockContextTest() { + if (IsFeatureEnabled()) { + feature_list_.InitWithFeatures( + {features::kSoftNavigationDetectionPrePaintBasedAttribution}, {}); + } else { + feature_list_.InitWithFeatures( + {}, {features::kSoftNavigationDetectionPrePaintBasedAttribution}); + } + WebRuntimeFeatures::UpdateStatusFromBaseFeatures(); + } + + ~SoftNavigationDisplayLockContextTest() override = default; + + bool IsFeatureEnabled() { return GetParam(); } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +TEST_P(SoftNavigationDisplayLockContextTest, AncestorSoftNavigationContext) { + SetHtmlInnerHTML(R"HTML( + <style> + #locked { + width: 100px; + height: 100px; + contain: style layout paint; + } + </style> + <div id="ancestor"> + <div id="target"> + <div id="descendant"> + <div id="locked"> + <div id="lockedchild">Content</div> + </div> + </div> + </div> + </div> + )HTML"); + + auto* ancestor_element = + GetDocument().getElementById(AtomicString("ancestor")); + auto* target_element = GetDocument().getElementById(AtomicString("target")); + auto* descendant_element = + GetDocument().getElementById(AtomicString("descendant")); + auto* locked_element = GetDocument().getElementById(AtomicString("locked")); + auto* lockedchild_element = + GetDocument().getElementById(AtomicString("lockedchild")); + + LockElement(*locked_element, false); + EXPECT_TRUE(locked_element->GetDisplayLockContext()->IsLocked()); + + auto* ancestor_object = ancestor_element->GetLayoutObject(); + auto* target_object = target_element->GetLayoutObject(); + auto* descendant_object = descendant_element->GetLayoutObject(); + auto* locked_object = locked_element->GetLayoutObject(); + auto* lockedchild_object = lockedchild_element->GetLayoutObject(); + + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantBlockingWheelEventHandlerChanged()); + EXPECT_FALSE(target_object->DescendantBlockingWheelEventHandlerChanged()); + EXPECT_FALSE(descendant_object->DescendantBlockingWheelEventHandlerChanged()); + EXPECT_FALSE(locked_object->DescendantBlockingWheelEventHandlerChanged()); + EXPECT_FALSE( + lockedchild_object->DescendantBlockingWheelEventHandlerChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(target_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(lockedchild_object->ShouldInheritSoftNavigationContext()); + + SoftNavigationContext* context = nullptr; + SoftNavigationPaintAttributionTracker* tracker = nullptr; + + if (IsFeatureEnabled()) { + context = MakeGarbageCollected<SoftNavigationContext>( + *GetDocument().domWindow(), + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution); + SoftNavigationHeuristics* heuristics = + GetDocument().domWindow()->GetSoftNavigationHeuristics(); + ASSERT_TRUE(heuristics); + tracker = heuristics->GetPaintAttributionTracker(); + ASSERT_TRUE(tracker); + tracker->MarkNodeAsDirectlyModified(target_element, context); + } + + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_EQ(target_object->SoftNavigationContextChanged(), IsFeatureEnabled()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->SoftNavigationContextChanged()); + + EXPECT_EQ(ancestor_object->DescendantSoftNavigationContextChanged(), + IsFeatureEnabled()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->DescendantSoftNavigationContextChanged()); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_EQ(target_object->ShouldInheritSoftNavigationContext(), + !IsFeatureEnabled()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(lockedchild_object->ShouldInheritSoftNavigationContext()); + + if (IsFeatureEnabled()) { + EXPECT_FALSE(tracker->IsAttributable(lockedchild_element, context)); + } + + // Manually commit the lock so that we can verify which dirty bits get + // propagated. + CommitElement(*locked_element, false); + UnlockImmediate(locked_element->GetDisplayLockContext()); + + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_EQ(locked_object->SoftNavigationContextChanged(), IsFeatureEnabled()); + EXPECT_FALSE(lockedchild_object->SoftNavigationContextChanged()); + + EXPECT_EQ(ancestor_object->DescendantSoftNavigationContextChanged(), + IsFeatureEnabled()); + EXPECT_EQ(target_object->DescendantSoftNavigationContextChanged(), + IsFeatureEnabled()); + EXPECT_EQ(descendant_object->DescendantSoftNavigationContextChanged(), + IsFeatureEnabled()); + EXPECT_FALSE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_EQ(target_object->ShouldInheritSoftNavigationContext(), + !IsFeatureEnabled()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(lockedchild_object->ShouldInheritSoftNavigationContext()); + + if (IsFeatureEnabled()) { + EXPECT_FALSE(tracker->IsAttributable(lockedchild_element, context)); + } + + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(lockedchild_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_EQ(target_object->ShouldInheritSoftNavigationContext(), + !IsFeatureEnabled()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(lockedchild_object->ShouldInheritSoftNavigationContext()); + + if (IsFeatureEnabled()) { + EXPECT_TRUE(tracker->IsAttributable(lockedchild_element, context)); + } +} + +TEST_P(SoftNavigationDisplayLockContextTest, DescendantSoftNavigationContext) { + SetHtmlInnerHTML(R"HTML( + <style> + #locked { + width: 100px; + height: 100px; + contain: style layout paint; + } + </style> + <div id="ancestor"> + <div id="descendant"> + <div id="locked"> + <div id="target"> + <div id="content">Content</div> + </div> + </div> + </div> + </div> + )HTML"); + + auto* ancestor_element = + GetDocument().getElementById(AtomicString("ancestor")); + auto* descendant_element = + GetDocument().getElementById(AtomicString("descendant")); + auto* locked_element = GetDocument().getElementById(AtomicString("locked")); + auto* target_element = GetDocument().getElementById(AtomicString("target")); + auto* content_element = GetDocument().getElementById(AtomicString("content")); + + LockElement(*locked_element, false); + EXPECT_TRUE(locked_element->GetDisplayLockContext()->IsLocked()); + + auto* ancestor_object = ancestor_element->GetLayoutObject(); + auto* descendant_object = descendant_element->GetLayoutObject(); + auto* locked_object = locked_element->GetLayoutObject(); + auto* target_object = target_element->GetLayoutObject(); + auto* content_object = content_element->GetLayoutObject(); + + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_FALSE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(content_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(target_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(content_object->ShouldInheritSoftNavigationContext()); + + // The rest of this test relies on the feature being enabled since nothing + // updates the "changed" bit without it. + if (!IsFeatureEnabled()) { + return; + } + + auto* context = MakeGarbageCollected<SoftNavigationContext>( + *GetDocument().domWindow(), + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution); + SoftNavigationHeuristics* heuristics = + GetDocument().domWindow()->GetSoftNavigationHeuristics(); + ASSERT_TRUE(heuristics); + SoftNavigationPaintAttributionTracker* tracker = + heuristics->GetPaintAttributionTracker(); + ASSERT_TRUE(tracker); + tracker->MarkNodeAsDirectlyModified(target_element, context); + + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_TRUE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(content_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_TRUE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content_object->DescendantSoftNavigationContextChanged()); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_TRUE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(content_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_TRUE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(target_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(content_object->ShouldInheritSoftNavigationContext()); + EXPECT_FALSE(tracker->IsAttributable(content_element, context)); + + // Do the same check again. For now, nothing is expected to change. However, + // when we separate self and child layout, then some flags would be different. + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_TRUE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(content_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_TRUE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(target_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(content_object->ShouldInheritSoftNavigationContext()); + EXPECT_FALSE(tracker->IsAttributable(content_element, context)); + + // Manually commit the lock so that we can verify which dirty bits get + // propagated. + CommitElement(*locked_element, false); + UnlockImmediate(locked_element->GetDisplayLockContext()); + + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_TRUE(locked_object->SoftNavigationContextChanged()); + EXPECT_TRUE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(content_object->SoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_TRUE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_TRUE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(target_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(content_object->ShouldInheritSoftNavigationContext()); + EXPECT_FALSE(tracker->IsAttributable(content_element, context)); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(ancestor_object->SoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->SoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->SoftNavigationContextChanged()); + EXPECT_FALSE(target_object->SoftNavigationContextChanged()); + EXPECT_FALSE(content_object->SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(locked_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target_object->DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content_object->DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(locked_object->ShouldInheritSoftNavigationContext()); + EXPECT_FALSE(target_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(content_object->ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(tracker->IsAttributable(content_element, context)); +} + +INSTANTIATE_TEST_SUITE_P(All, + SoftNavigationDisplayLockContextTest, + testing::Bool()); + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index c483d635..65df9c567 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -4887,11 +4887,13 @@ bitfields_.SetNeedsPaintPropertyUpdate(false); bitfields_.SetEffectiveAllowedTouchActionChanged(false); bitfields_.SetBlockingWheelEventHandlerChanged(false); + bitfields_.SetSoftNavigationContextChanged(false); if (!ChildPrePaintBlockedByDisplayLock()) { bitfields_.SetDescendantNeedsPaintPropertyUpdate(false); bitfields_.SetDescendantEffectiveAllowedTouchActionChanged(false); bitfields_.SetDescendantBlockingWheelEventHandlerChanged(false); + bitfields_.SetDescendantSoftNavigationContextChanged(false); subtree_paint_property_update_reasons_ = static_cast<unsigned>(SubtreePaintPropertyUpdateReason::kNone); } @@ -5038,6 +5040,36 @@ } } +void LayoutObject::MarkSoftNavigationContextChanged() { + NOT_DESTROYED(); + DCHECK(!GetDocument().InvalidationDisallowed()); + bitfields_.SetSoftNavigationContextChanged(true); + // If we're locked, mark our descendants as needing this change. This is used + // as a signal to ensure we mark the element as needing soft navigation + // context recalculation when the element becomes unlocked. + if (ChildPrePaintBlockedByDisplayLock()) { + bitfields_.SetDescendantSoftNavigationContextChanged(true); + return; + } + + if (Parent()) { + Parent()->MarkDescendantSoftNavigationContextChanged(); + } +} + +void LayoutObject::MarkDescendantSoftNavigationContextChanged() { + NOT_DESTROYED(); + DCHECK(!GetDocument().InvalidationDisallowed()); + LayoutObject* obj = this; + while (obj && !obj->DescendantSoftNavigationContextChanged()) { + obj->bitfields_.SetDescendantSoftNavigationContextChanged(true); + if (obj->ChildPrePaintBlockedByDisplayLock()) { + break; + } + obj = obj->Parent(); + } +} + // Note about ::first-letter pseudo-element: // When an element has ::first-letter pseudo-element, first letter characters // are taken from |Text| node and first letter characters are considered
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 98d4e8e..7ac4e21 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -3021,6 +3021,25 @@ bitfields_.SetInsideBlockingWheelEventHandler(inside); } + void MarkSoftNavigationContextChanged(); + void MarkDescendantSoftNavigationContextChanged(); + bool SoftNavigationContextChanged() const { + NOT_DESTROYED(); + return bitfields_.SoftNavigationContextChanged(); + } + bool DescendantSoftNavigationContextChanged() const { + NOT_DESTROYED(); + return bitfields_.DescendantSoftNavigationContextChanged(); + } + bool ShouldInheritSoftNavigationContext() const { + NOT_DESTROYED(); + return bitfields_.ShouldInheritSoftNavigationContext(); + } + void SetShouldInheritSoftNavigationContext(bool should_inherit) { + NOT_DESTROYED(); + bitfields_.SetShouldInheritSoftNavigationContext(should_inherit); + } + // Painters can use const methods only, except for these explicitly declared // methods. class CORE_EXPORT MutableForPainting { @@ -3116,6 +3135,10 @@ .SetShouldAssumePaintOffsetTranslationForLayoutShiftTracking(b); } + void SetShouldInheritSoftNavigationContext(bool b) { + layout_object_.SetShouldInheritSoftNavigationContext(b); + } + void FragmentCountChanged() { // Even if the fragment count has changed, the total stitched size of the // object may be the same as before, although the size of the individual @@ -3798,6 +3821,9 @@ inside_blocking_wheel_event_handler_(false), blocking_wheel_event_handler_changed_(true), descendant_blocking_wheel_event_handler_changed_(false), + soft_navigation_context_changed_(true), + descendant_soft_navigation_context_changed_(false), + should_inherit_soft_navigation_context_(true), is_effective_root_scroller_(false), is_global_root_scroller_(false), registered_as_first_line_image_observer_(false), @@ -4049,6 +4075,26 @@ ADD_BOOLEAN_BITFIELD(descendant_blocking_wheel_event_handler_changed_, DescendantBlockingWheelEventHandlerChanged); + // Set when the associated SoftNavigationContext changes, which is used to + // ensure |should_inherit_soft_navigation_context_| is updated for this + // object and its descendants. + ADD_BOOLEAN_BITFIELD(soft_navigation_context_changed_, + SoftNavigationContextChanged); + + // Set when a descendant's associated SoftNavigationContext changes, which + // implies |ShouldInheritSoftNavigationContext| needs to be recomputed. This + // is used to ensure the PrePaint tree walk processes objects with + // |soft_navigation_context_changed_|. + ADD_BOOLEAN_BITFIELD(descendant_soft_navigation_context_changed_, + DescendantSoftNavigationContextChanged); + + // Whether the associated node inherits its SoftNavigationContext from its + // parent. Used during the PrePaint walk to help determine when the context + // being pushed down to descendants needs to change. The actual context + // mapping is stored in SoftNavigationPaintAttributionTracker. + ADD_BOOLEAN_BITFIELD(should_inherit_soft_navigation_context_, + ShouldInheritSoftNavigationContext); + // See page/scrolling/README.md for an explanation of root scroller and how // it works. ADD_BOOLEAN_BITFIELD(is_effective_root_scroller_, IsEffectiveRootScroller);
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc index 3f8e0a6..9cd09a6 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -35,6 +35,8 @@ #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/paint_property_tree_printer.h" #include "third_party/blink/renderer/core/paint/pre_paint_disable_side_effects_scope.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_heuristics.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" namespace blink { @@ -50,6 +52,15 @@ return fragment && fragment->IsFragmentainerBox(); } +SoftNavigationPaintAttributionTracker* +GetSoftNavigationPaintAttrubutionTrackerIfEnabled(LocalFrameView& frame_view) { + if (auto* heuristics = + frame_view.GetFrame().DomWindow()->GetSoftNavigationHeuristics()) { + return heuristics->GetPaintAttributionTracker(); + } + return nullptr; +} + } // anonymous namespace void PrePaintTreeWalk::WalkTree(LocalFrameView& root_frame_view) { @@ -135,6 +146,11 @@ // Block fragmentation doesn't cross frame boundaries. context.ResetFragmentation(); + // Soft navigation tracking doesn't cross frame boundaries. + context.ResetSoftNavigationContext(); + context.soft_navigation_paint_attribution_tracker = + GetSoftNavigationPaintAttrubutionTrackerIfEnabled(frame_view); + if (context.tree_builder_context) { PaintPropertyTreeBuilder::SetupContextForFrame( frame_view, *context.tree_builder_context); @@ -270,6 +286,63 @@ // invalidate the display item client. } +void PrePaintTreeWalk::UpdateSoftNavigationContext( + const LayoutObject& object, + PrePaintTreeWalk::PrePaintTreeWalkContext& context) { + if (!context.soft_navigation_paint_attribution_tracker) { + return; + } + + if (object.SoftNavigationContextChanged()) { + context.soft_navigation_context_changed = true; + } + + // For text nodes, text paint timing is aggregated up to the element that + // determines the containing block of the node + // (https://www.w3.org/TR/paint-timing/#sec-modifications-dom). We push such + // candidates down while walking the tree so that the soft navigations layer + // can associated text nodes with the containing box without walking up. + // + // TODO(crbug.com/423670827): Consider moving this check to + // TextPaintTimingDetector. + if (auto* node = object.GetNode(); node && object.IsBox()) { + context.soft_navigation_text_aggregation_node = node; + } + + // This node is either a new "container root" (a node having a different + // `SoftNavigationContext` than its parent), or will inherit the context of + // the container root being propagated. This is determined by + // `SoftNavigationPaintAttributionTracker::UpdateOnPrePaint()`, the result of + // which is cached in the `LayoutObject`'s ShouldInheritSoftNavigationContext + // bit, so that subsequent tree walks can quickly determine which node should + // be propagated to children. + if (context.soft_navigation_context_changed) { + using PrePaintUpdateResult = + SoftNavigationPaintAttributionTracker::PrePaintUpdateResult; + PrePaintUpdateResult result = + context.soft_navigation_paint_attribution_tracker->UpdateOnPrePaint( + object, context.soft_navigation_context_container_root, + context.soft_navigation_text_aggregation_node); + switch (result) { + case PrePaintUpdateResult::kPropagateCurrentNode: + object.GetMutableForPainting().SetShouldInheritSoftNavigationContext( + false); + context.soft_navigation_context_container_root = object.GetNode(); + break; + case PrePaintUpdateResult::kPropagateAncestorNode: + // No need to change the source node, just continue propagating it. + object.GetMutableForPainting().SetShouldInheritSoftNavigationContext( + true); + break; + } + } else if (!object.ShouldInheritSoftNavigationContext()) { + // Anonymous nodes should always inherit the parent context, so this should + // not be reached. + CHECK(object.GetNode()); + context.soft_navigation_context_container_root = object.GetNode(); + } +} + bool PrePaintTreeWalk::NeedsTreeBuilderContextUpdate( const LocalFrameView& frame_view, const PrePaintTreeWalkContext& context) { @@ -295,14 +368,17 @@ object.EffectiveAllowedTouchActionChanged() || object.DescendantEffectiveAllowedTouchActionChanged() || object.BlockingWheelEventHandlerChanged() || - object.DescendantBlockingWheelEventHandlerChanged(); + object.DescendantBlockingWheelEventHandlerChanged() || + object.SoftNavigationContextChanged() || + object.DescendantSoftNavigationContextChanged(); } bool PrePaintTreeWalk::ContextRequiresChildPrePaint( const PrePaintTreeWalkContext& context) { return context.paint_invalidator_context.NeedsSubtreeWalk() || context.effective_allowed_touch_action_changed || - context.blocking_wheel_event_handler_changed; + context.blocking_wheel_event_handler_changed || + context.soft_navigation_context_changed; } bool PrePaintTreeWalk::ObjectRequiresTreeBuilderContext( @@ -558,6 +634,8 @@ UpdateEffectiveAllowedTouchAction(object, context); UpdateBlockingWheelEventHandler(object, context); + UpdateSoftNavigationContext(object, context); + if (paint_invalidator_.InvalidatePaint( object, pre_paint_info, base::OptionalToPtr(context.tree_builder_context), @@ -1337,13 +1415,15 @@ // same bits on the context. if (child_walk_blocked && (ContextRequiresChildTreeBuilderContext(context) || ContextRequiresChildPrePaint(context))) { - // Note that |effective_allowed_touch_action_changed| and - // |blocking_wheel_event_handler_changed| are special in that they requires - // us to specifically recalculate this value on each subtree element. Other - // flags simply need a subtree walk. + // Note that |effective_allowed_touch_action_changed|, + // |blocking_wheel_event_handler_changed|, and + // |soft_navigation_context_changed| are special in that they requires us to + // specifically recalculate this value on each subtree element. Other flags + // simply need a subtree walk. object.GetDisplayLockContext()->SetNeedsPrePaintSubtreeWalk( context.effective_allowed_touch_action_changed, - context.blocking_wheel_event_handler_changed); + context.blocking_wheel_event_handler_changed, + context.soft_navigation_context_changed); } if (!child_walk_blocked) {
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h index 55b90b37..2da7cfaa 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h
@@ -20,9 +20,11 @@ class LayoutObject; class LocalFrameView; +class Node; class PhysicalBoxFragment; class PhysicalFragment; struct PhysicalFragmentLink; +class SoftNavigationPaintAttributionTracker; // This class walks the whole layout tree, beginning from the root // LocalFrameView, across frame boundaries. Helper classes are called for each @@ -57,6 +59,13 @@ fixed_positioned_container = {}; } + void ResetSoftNavigationContext() { + soft_navigation_context_changed = false; + soft_navigation_context_container_root = nullptr; + soft_navigation_text_aggregation_node = nullptr; + soft_navigation_paint_attribution_tracker = nullptr; + } + PaintInvalidatorContext paint_invalidator_context; // Whether there is a blocking touch event handler on any ancestor. @@ -73,6 +82,25 @@ // subtree may need to update. bool blocking_wheel_event_handler_changed = false; + // When the `SoftNavigationContext` of a node changes on an ancestor, the + // entire subtree may need to update. + bool soft_navigation_context_changed = false; + + // The nearest ancestor `Node` associated with a `SoftNavigationContext`, if + // any. `SoftNavigationContext` is set for roots appended to the DOM, and + // this context gets propagated to descendants through this node. + Node* soft_navigation_context_container_root = nullptr; + + // Paint tracking aggregates text into the nearest non-anonymous, non-inline + // ancestor node. + Node* soft_navigation_text_aggregation_node = nullptr; + + // The `SoftNavigationPaintAttributionTracker` associated with the current + // document being walked. This will be null for iframes or if the + // experimental feature is disabled. + SoftNavigationPaintAttributionTracker* + soft_navigation_paint_attribution_tracker = nullptr; + // True if we're visiting the parent for the first time, i.e. when we're in // the first fragmentainer where the parent occurs (or if we're not // fragmented at all). @@ -231,6 +259,9 @@ void InvalidatePaintForHitTesting(const LayoutObject&, PrePaintTreeWalkContext&); + void UpdateSoftNavigationContext(const LayoutObject&, + PrePaintTreeWalkContext&); + PaintInvalidator paint_invalidator_; // List of fragments that may be missed during LayoutObject walking. See
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc index 0a301b55..5c75670 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk_test.cc
@@ -7,6 +7,8 @@ #include "base/test/scoped_feature_list.h" #include "cc/base/features.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/platform/web_runtime_features.h" #include "third_party/blink/renderer/core/dom/events/native_event_listener.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/layout/layout_tree_as_text.h" @@ -16,6 +18,9 @@ #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/paint_property_tree_printer.h" #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_context.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_heuristics.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h" #include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h" #include "third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h" #include "third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h" @@ -530,4 +535,117 @@ EXPECT_TRUE(object->FirstFragment().PaintProperties()->ScrollTranslation()); } +class SoftNavigationPrePaintTreeWalkTest + : public RenderingTest, + public ::testing::WithParamInterface<bool> { + public: + SoftNavigationPrePaintTreeWalkTest() { + if (IsFeatureEnabled()) { + feature_list_.InitWithFeatures( + {features::kSoftNavigationDetectionPrePaintBasedAttribution}, {}); + } else { + feature_list_.InitWithFeatures( + {}, {features::kSoftNavigationDetectionPrePaintBasedAttribution}); + } + WebRuntimeFeatures::UpdateStatusFromBaseFeatures(); + } + + ~SoftNavigationPrePaintTreeWalkTest() override = default; + + bool IsFeatureEnabled() { return GetParam(); } + + private: + void SetUp() override { + EnableCompositing(); + RenderingTest::SetUp(); + } + + base::test::ScopedFeatureList feature_list_; +}; + +TEST_P(SoftNavigationPrePaintTreeWalkTest, + ShouldInheritSoftNavigationContextUpdate) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor' style='width: 100px; height: 100px;'> + <div id='target' style='width: 100px; height: 100px;'> + <div id='descendant' style='width: 100px; height: 100px;'> + <div id='content' style='width: 100px; height: 100px;'> + Content + </div> + </div> + </div> + </div> + )HTML"); + + UpdateAllLifecyclePhasesForTest(); + auto& ancestor = *GetLayoutObjectByElementId("ancestor"); + auto& target = *GetLayoutObjectByElementId("target"); + auto& descendant = *GetLayoutObjectByElementId("descendant"); + auto& content = *GetLayoutObjectByElementId("content"); + + EXPECT_FALSE(ancestor.SoftNavigationContextChanged()); + EXPECT_FALSE(target.SoftNavigationContextChanged()); + EXPECT_FALSE(descendant.SoftNavigationContextChanged()); + EXPECT_FALSE(content.SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content.DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor.ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(target.ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant.ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(content.ShouldInheritSoftNavigationContext()); + + // If the feature is disable, just make sure all the "changed" bits get + // cleared so we don't do unnecessary tree walks. + if (!IsFeatureEnabled()) { + return; + } + + auto* context = MakeGarbageCollected<SoftNavigationContext>( + *GetDocument().domWindow(), + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution); + SoftNavigationHeuristics* heuristics = + GetDocument().domWindow()->GetSoftNavigationHeuristics(); + ASSERT_TRUE(heuristics); + SoftNavigationPaintAttributionTracker* tracker = + heuristics->GetPaintAttributionTracker(); + ASSERT_TRUE(tracker); + tracker->MarkNodeAsDirectlyModified(target.GetNode(), context); + + EXPECT_FALSE(ancestor.SoftNavigationContextChanged()); + EXPECT_TRUE(target.SoftNavigationContextChanged()); + EXPECT_FALSE(descendant.SoftNavigationContextChanged()); + EXPECT_FALSE(content.SoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content.DescendantSoftNavigationContextChanged()); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(ancestor.SoftNavigationContextChanged()); + EXPECT_FALSE(target.SoftNavigationContextChanged()); + EXPECT_FALSE(descendant.SoftNavigationContextChanged()); + EXPECT_FALSE(content.SoftNavigationContextChanged()); + + EXPECT_FALSE(ancestor.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(target.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(descendant.DescendantSoftNavigationContextChanged()); + EXPECT_FALSE(content.DescendantSoftNavigationContextChanged()); + + EXPECT_TRUE(ancestor.ShouldInheritSoftNavigationContext()); + EXPECT_FALSE(target.ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(descendant.ShouldInheritSoftNavigationContext()); + EXPECT_TRUE(content.ShouldInheritSoftNavigationContext()); + + EXPECT_TRUE(tracker->IsAttributable(content.GetNode(), context)); +} + +INSTANTIATE_TEST_SUITE_P(All, + SoftNavigationPrePaintTreeWalkTest, + testing::Bool()); + } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/timing/paint_timing.cc b/third_party/blink/renderer/core/paint/timing/paint_timing.cc index 50cfaecc..3e5dc1f 100644 --- a/third_party/blink/renderer/core/paint/timing/paint_timing.cc +++ b/third_party/blink/renderer/core/paint/timing/paint_timing.cc
@@ -263,6 +263,11 @@ auto add_image_lcp_entries = detector->GetImagePaintTimingDetector().TakePaintTimingCallback(); + OptionalPaintTimingCallback soft_nav_entries; + if (soft_navigation_heuristics) { + soft_nav_entries = soft_navigation_heuristics->TakePaintTimingCallback(); + } + // 7. Let reportedPaints be the document’s set of previously reported paints. PendingPaintTimingRecord paint_timing_record{ .paint_events = pending_paint_events_, @@ -285,7 +290,7 @@ if (paint_timing_record.paint_events.empty() && !frame_timing_info && !add_painted_images_element_timing_entries && !add_painted_text_entries && - !add_image_lcp_entries) { + !add_image_lcp_entries && !soft_nav_entries) { return; } @@ -298,6 +303,7 @@ OptionalPaintTimingCallback image_lcp_callback, OptionalPaintTimingCallback painted_images_callback, OptionalPaintTimingCallback painted_text_callback, + OptionalPaintTimingCallback soft_navs_callback, PaintTimingDetector* paint_timing_detector, SoftNavigationHeuristics* soft_navigation_heuristics, const base::TimeTicks& raw_presentation_timestamp, @@ -341,6 +347,10 @@ std::move(painted_text_callback.value()) .Run(raw_presentation_timestamp, paint_timing_info); } + if (soft_navs_callback) { + std::move(soft_navs_callback.value()) + .Run(raw_presentation_timestamp, paint_timing_info); + } if (paint_timing_detector && may_have_lcp) { paint_timing_detector->UpdateLcpCandidate(); @@ -362,7 +372,8 @@ paint_timing_record, WrapPersistent(frame_timing_info), std::move(add_image_lcp_entries), std::move(add_painted_images_element_timing_entries), - std::move(add_painted_text_entries), WrapWeakPersistent(detector), + std::move(add_painted_text_entries), std::move(soft_nav_entries), + WrapWeakPersistent(detector), WrapWeakPersistent(soft_navigation_heuristics)); // 11. If the user-agent does not support implementation-defined presentation
diff --git a/third_party/blink/renderer/core/timing/build.gni b/third_party/blink/renderer/core/timing/build.gni index 144597e..8767630 100644 --- a/third_party/blink/renderer/core/timing/build.gni +++ b/third_party/blink/renderer/core/timing/build.gni
@@ -88,6 +88,8 @@ "soft_navigation_context.h", "soft_navigation_heuristics.cc", "soft_navigation_heuristics.h", + "soft_navigation_paint_attribution_tracker.cc", + "soft_navigation_paint_attribution_tracker.h", "soft_navigation_entry.cc", "soft_navigation_entry.h", "task_attribution_timing.cc", @@ -119,5 +121,6 @@ "time_clamper_test.cc", "window_performance_test.cc", "soft_navigation_heuristics_test.cc", + "soft_navigation_paint_attribution_tracker_test.cc", "worker_performance_test.cc", ]
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_context.cc b/third_party/blink/renderer/core/timing/soft_navigation_context.cc index c78186b..1050ef4c 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_context.cc +++ b/third_party/blink/renderer/core/timing/soft_navigation_context.cc
@@ -25,19 +25,25 @@ DOMWindowPerformance::performance(window))) {} void SoftNavigationContext::AddModifiedNode(Node* node) { - auto add_result = modified_nodes_.insert(node); - if (add_result.is_new_entry) { - ++num_modified_dom_nodes_; - TRACE_EVENT_INSTANT( - "loading", "SoftNavigationContext::AddedModifiedNodeInAnimationFrame", - perfetto::Track::FromPointer(this), "context", this, "nodeId", - node->GetDomNodeId(), "nodeDebugName", node->DebugName(), - "domModificationsThisAnimationFrame", - num_modified_dom_nodes_ - num_modified_dom_nodes_last_animation_frame_); + if (paint_attribution_mode_ != + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution) { + auto add_result = modified_nodes_.insert(node); + if (!add_result.is_new_entry) { + return; + } } + ++num_modified_dom_nodes_; + TRACE_EVENT_INSTANT( + "loading", "SoftNavigationContext::AddedModifiedNodeInAnimationFrame", + perfetto::Track::FromPointer(this), "context", this, "nodeId", + node->GetDomNodeId(), "nodeDebugName", node->DebugName(), + "domModificationsThisAnimationFrame", + num_modified_dom_nodes_ - num_modified_dom_nodes_last_animation_frame_); } bool SoftNavigationContext::IsNeededForTiming(Node* node) { + CHECK_NE(paint_attribution_mode_, + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution); if (!node) { return false; } @@ -98,18 +104,21 @@ return false; } - DCHECK(IsNeededForTiming(node)); - uint64_t painted_area = rect.size().GetArea(); - if (already_painted_modified_nodes_.Contains(node)) { - // We are sometimes observing paints for the same node. - // Until we fix first-contentful-paint-only observation, let's ignore these. - repainted_area_ += painted_area; - return false; + if (paint_attribution_mode_ != + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution) { + DCHECK(IsNeededForTiming(node)); + if (already_painted_modified_nodes_.Contains(node)) { + // We are sometimes observing paints for the same node. + // Until we fix first-contentful-paint-only observation, let's ignore + // these. + repainted_area_ += painted_area; + return false; + } + already_painted_modified_nodes_.insert(node); } - already_painted_modified_nodes_.insert(node); painted_area_ += painted_area; TRACE_EVENT_INSTANT( "loading", "SoftNavigationContext::AttributablePaintInAnimationFrame", @@ -207,11 +216,12 @@ } bool SoftNavigationContext::TryUpdateLcpCandidate() { - // After we are ready to start measuring LCP (was emitted soft-nav entry) and + // After we are ready to start measuring LCP (`HasNavigationId()`) and // before we want to stop (input or scroll), we update LCP candidate. - if (!WasEmitted() || !first_input_or_scroll_time_.is_null()) { + if (!HasNavigationId() || !first_input_or_scroll_time_.is_null()) { return false; } + // TODO(crbug.com/425398556): Consider updating `lcp_calculator_` to accept // ImageRecord and TextRecord and to extract its own timings/sizes rather than // passing them manually here-- similar to how @@ -247,10 +257,12 @@ perfetto::TracedDictionary dict = std::move(context).WriteDictionary(); dict.Add("softNavContextId", context_id_); - dict.Add("interactionTimestamp", user_interaction_timestamp_); + dict.Add("navigationId", navigation_id_); dict.Add("initialURL", initial_url_); dict.Add("mostRecentURL", most_recent_url_); - dict.Add("wasEmitted", was_emitted_); + + dict.Add("interactionTimestamp", user_interaction_timestamp_); + dict.Add("firstContentfulPaint", first_contentful_paint_); dict.Add("domModifications", num_modified_dom_nodes_); dict.Add("paintedArea", painted_area_);
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_context.h b/third_party/blink/renderer/core/timing/soft_navigation_context.h index 55b9d28..b52bbb8 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_context.h +++ b/third_party/blink/renderer/core/timing/soft_navigation_context.h
@@ -11,6 +11,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" +#include "third_party/blink/renderer/core/timing/performance_entry.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -36,12 +37,29 @@ return context_id_ == last_context_id_; } + bool HasNavigationId() const { return !navigation_id_.empty(); } + String GetNavigationId() const { return navigation_id_; } + void SetNavigationId(String navigation_id) { navigation_id_ = navigation_id; } + base::TimeTicks UserInteractionTimestamp() const { return user_interaction_timestamp_; } void SetUserInteractionTimestamp(base::TimeTicks value) { user_interaction_timestamp_ = value; } + bool HasFirstContentfulPaint() const { + return !first_contentful_paint_.is_null(); + } + base::TimeTicks FirstContentfulPaint() const { + return first_contentful_paint_; + } + void SetFirstContentfulPaint( + const base::TimeTicks& raw_presentation_timestamp, + const DOMPaintTimingInfo& paint_timing_info) { + CHECK(first_contentful_paint_.is_null()); + first_contentful_paint_ = raw_presentation_timestamp; + first_contentful_paint_timing_info_ = paint_timing_info; + } // First Url and Last Url help for cases with multiple client-side redirects. const String& InitialUrl() const { return initial_url_; } @@ -53,15 +71,13 @@ } bool HasUrl() const { return !initial_url_.empty(); } - bool WasEmitted() const { return was_emitted_; } - void SetWasEmitted() { was_emitted_ = true; } - void AddModifiedNode(Node* node); // Returns true if this paint updated the attributed area, and so we should // check for sufficient paints to emit a soft-nav entry. bool HasDomModification() const { return num_modified_dom_nodes_ > 0; } uint64_t PaintedArea() const { return painted_area_; } + uint64_t ContextId() const { return context_id_; } // Returns true if this Context is involved in modifying the container root // for this Node*. @@ -95,11 +111,13 @@ // largest value and can be used to identify the most recent context. const uint64_t context_id_ = ++last_context_id_; - bool was_emitted_ = false; + String navigation_id_; const features::SoftNavigationHeuristicsMode paint_attribution_mode_; base::TimeTicks user_interaction_timestamp_; base::TimeTicks first_input_or_scroll_time_; + base::TimeTicks first_contentful_paint_; + DOMPaintTimingInfo first_contentful_paint_timing_info_; String initial_url_; String most_recent_url_;
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_entry.cc b/third_party/blink/renderer/core/timing/soft_navigation_entry.cc index fbe30f50..96bbbab 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_entry.cc +++ b/third_party/blink/renderer/core/timing/soft_navigation_entry.cc
@@ -9,10 +9,14 @@ namespace blink { -SoftNavigationEntry::SoftNavigationEntry(AtomicString name, - double start_time, - DOMWindow* source) - : PerformanceEntry(name, start_time, start_time, source) {} +SoftNavigationEntry::SoftNavigationEntry( + AtomicString name, + double start_time, + const DOMPaintTimingInfo& paint_timing_info, + DOMWindow* source) + : PerformanceEntry(name, start_time, start_time, source) { + SetPaintTimingInfo(paint_timing_info); +} SoftNavigationEntry::~SoftNavigationEntry() = default;
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_entry.h b/third_party/blink/renderer/core/timing/soft_navigation_entry.h index f783856..d2ad213 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_entry.h +++ b/third_party/blink/renderer/core/timing/soft_navigation_entry.h
@@ -14,7 +14,10 @@ DEFINE_WRAPPERTYPEINFO(); public: - SoftNavigationEntry(AtomicString name, double start_time, DOMWindow* source); + SoftNavigationEntry(AtomicString name, + double start_time, + const DOMPaintTimingInfo& paint_timing_info, + DOMWindow* source); ~SoftNavigationEntry() override; const AtomicString& entryType() const override;
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_entry.idl b/third_party/blink/renderer/core/timing/soft_navigation_entry.idl index 8f0ba42..b3a47acf 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_entry.idl +++ b/third_party/blink/renderer/core/timing/soft_navigation_entry.idl
@@ -6,3 +6,4 @@ interface SoftNavigationEntry : PerformanceEntry { }; +SoftNavigationEntry includes PaintTimingMixin;
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc index 1fe3df5..d687e2fb 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc +++ b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.cc
@@ -21,10 +21,11 @@ #include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/layout/layout_view.h" -#include "third_party/blink/renderer/core/paint/timing/paint_timing.h" #include "third_party/blink/renderer/core/paint/timing/paint_timing_detector.h" #include "third_party/blink/renderer/core/timing/dom_window_performance.h" #include "third_party/blink/renderer/core/timing/soft_navigation_context.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/scheduler/public/task_attribution_info.h" #include "third_party/blink/renderer/platform/scheduler/public/task_attribution_tracker.h" @@ -105,7 +106,7 @@ // TODO(crbug.com/351826232): Consider differentiating contexts that were // cleaned up before page was unloaded vs cleaned up because of page unload. - if (context.WasEmitted()) { + if (context.HasNavigationId()) { // We already report this outcome eagerly, as part of // `ReportSoftNavigationToMetrics`, so don't report again here. // However, we can report the final paint area metrics here. @@ -187,8 +188,17 @@ return features::kSoftNavigationHeuristicsModeParam.Get(); } // Without the feature flag enabled, query the runtime enabled feature - // directly. This allows the finch experiment to control the feature; it - // also enables the feature for tests (since it's 'experimental'). + // directly. This allows the finch experiments to control the features; it + // also enables the feature for tests. + // + // But since the paint attribution modes are mutually exclusive and have + // different flags, we need to pick an order. Since the pre-paint-based + // attribution mode needs to be enabled intentionally from the command line or + // about:flags (it has no REF status), pick that first. + if (RuntimeEnabledFeatures:: + SoftNavigationDetectionPrePaintBasedAttributionEnabled(context)) { + return features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution; + } if (RuntimeEnabledFeatures:: SoftNavigationDetectionAdvancedPaintAttributionEnabled(context)) { return features::SoftNavigationHeuristicsMode::kAdvancedPaintAttribution; @@ -220,6 +230,10 @@ scheduler::TaskAttributionTracker::From(window->GetIsolate())) { LocalFrame* frame = window->GetFrame(); CHECK(frame && frame->View()); + if (IsPrePaintBasedAttributionEnabled()) { + paint_attribution_tracker_ = + MakeGarbageCollected<SoftNavigationPaintAttributionTracker>(); + } } SoftNavigationHeuristics* SoftNavigationHeuristics::CreateIfNeeded( @@ -369,61 +383,53 @@ if (!context) { return false; } - context->AddModifiedNode(node); + + if (IsPrePaintBasedAttributionEnabled()) { + CHECK(paint_attribution_tracker_); + paint_attribution_tracker_->MarkNodeAsDirectlyModified(node, context); + } else { + context->AddModifiedNode(node); + } EmitSoftNavigationEntryIfAllConditionsMet(context); return true; } -bool SoftNavigationHeuristics::EmitSoftNavigationEntryIfAllConditionsMet( +// TODO(crbug.com/424448145): re-architect how we pick our FCP point, when we +// "slice" navigationID, and when we actually Emit soft-navigation entry. Then, +// rename and re-organize these functions. +void SoftNavigationHeuristics::EmitSoftNavigationEntryIfAllConditionsMet( SoftNavigationContext* context) { + // We don't want to Emit for any context except the current URL. + // If we collect painted area for contexts other than this one, we still don't + // want to reach "Emit" criteria. + if (context != context_for_current_url_) { + return; + } + // If we've already emitted this entry, we might still be tracking paints. // Skip the rest since we only want to emit new soft-navs. - if (context->WasEmitted()) { - return false; + if (context->HasNavigationId()) { + return; } // Are the basic criteria met (interaction, url, dom modification)? if (!context->SatisfiesSoftNavNonPaintCriteria()) { - return false; + return; } // Are we done? uint64_t required_paint_area = CalculateRequiredPaintArea(); if (!context->SatisfiesSoftNavPaintCriteria(required_paint_area)) { - return false; + return; } - // We have met all criteria! SetWasEmitted here, even though we might still - // constrain reporting (below). That is because we do not want to test - // for meeting criteria ever again, once we meet it for the first time. - context->SetWasEmitted(); - - // TODO(crbug.com/40871933): We are already only marking dom nodes when we - // have a frame, and we are already limiting paints attribution to contexts - // that come from the same SNH/window instance. So, this might be safe to - // CHECK(). However, potentially it is possible to meet paint criteria, then - // meet some other final criteria in a different frame? Until we test that, - // let's just guard carefully. - LocalFrame* frame = GetLocalFrameIfOutermostAndNotDetached(); - if (!frame) { - return false; - } - + // We have met all criteria! ++soft_navigation_count_; window_->GenerateNewNavigationId(); - auto* performance = DOMWindowPerformance::performance(*window_.Get()); - performance->AddSoftNavigationEntry(AtomicString(context->InitialUrl()), - context->UserInteractionTimestamp()); - ReportSoftNavigationToMetrics(frame, context); + context->SetNavigationId(window_->GetNavigationId()); - TRACE_EVENT_INSTANT("scheduler,devtools.timeline,loading", - "SoftNavigationHeuristics::EmitSoftNavigationEntry", - perfetto::Track::FromPointer(context), "context", - *context, "frame", GetFrameIdForTracing(frame), - "navigationId", window_->GetNavigationId()); - - return true; + needs_paint_timing_callback_ = true; } SoftNavigationContext* @@ -432,10 +438,11 @@ !context_for_current_url_->IsRecordingLargestContentfulPaint()) { return nullptr; } - if (context_for_current_url_->IsNeededForTiming(node)) { - return context_for_current_url_; - } - return nullptr; + bool attributable = IsPrePaintBasedAttributionEnabled() + ? paint_attribution_tracker_->IsAttributable( + node, context_for_current_url_) + : context_for_current_url_->IsNeededForTiming(node); + return attributable ? context_for_current_url_ : nullptr; } void SoftNavigationHeuristics::OnPaintFinished() { @@ -455,6 +462,61 @@ } } +OptionalPaintTimingCallback +SoftNavigationHeuristics::TakePaintTimingCallback() { + // If we need paint timing, we must have a context that needs FCP. + CHECK(!needs_paint_timing_callback_ || + (context_for_current_url_ && + !context_for_current_url_->HasFirstContentfulPaint())); + if (!needs_paint_timing_callback_) { + return {}; + } + needs_paint_timing_callback_ = false; + + // TODO(crbug.com/40871933): We are already only marking dom nodes when we + // have a frame, and we are already limiting paints attribution to contexts + // that come from the same SNH/window instance. So, this might be safe to + // CHECK(). However, potentially it is possible to meet paint criteria, + // then meet some other final criteria in a different frame? Until we test + // that, let's just guard carefully. + LocalFrame* frame = GetLocalFrameIfOutermostAndNotDetached(); + if (!frame) { + return {}; + } + String frameIdForTracing = GetFrameIdForTracing(frame); + + auto callback = WTF::BindOnce( + [](SoftNavigationHeuristics* self, Member<SoftNavigationContext> context, + String frameIdForTracing, + const base::TimeTicks& presentation_timestamp, + const DOMPaintTimingInfo& paint_timing_info) { + if (!self) { + return; + } + CHECK(context); + context->SetFirstContentfulPaint(presentation_timestamp, + paint_timing_info); + + auto* performance = + DOMWindowPerformance::performance(*self->window_.Get()); + + performance->AddSoftNavigationEntry(AtomicString(context->InitialUrl()), + context->UserInteractionTimestamp(), + paint_timing_info); + self->ReportSoftNavigationToMetrics(context); + + TRACE_EVENT_INSTANT("scheduler,devtools.timeline,loading", + "SoftNavigationHeuristics::EmitSoftNavigationEntry", + perfetto::Track::FromPointer(context), + context->FirstContentfulPaint(), "context", + *context, "frame", frameIdForTracing); + }, + WrapWeakPersistent(this), WrapPersistent(context_for_current_url_.Get()), + frameIdForTracing); + + return std::move(callback); +} + void SoftNavigationHeuristics::UpdateSoftLcpCandidate() { // This is called from PaintTimingMixin on every paint timing update, without // feature flag check. We shouldn't have a url context without the feature. @@ -490,25 +552,28 @@ } void SoftNavigationHeuristics::ReportSoftNavigationToMetrics( - LocalFrame* frame, SoftNavigationContext* context) const { CHECK(EnsureContextForCurrentWindow(context)); - auto* loader = frame->Loader().GetDocumentLoader(); + LocalFrame* frame = GetLocalFrameIfOutermostAndNotDetached(); + if (!frame) { + return; + } + + auto* loader = frame->Loader().GetDocumentLoader(); if (!loader) { return; } - CHECK(!context->UserInteractionTimestamp().is_null()); - auto soft_navigation_start_time = - loader->GetTiming().MonotonicTimeToPseudoWallTime( - context->UserInteractionTimestamp()); - - blink::SoftNavigationMetrics metrics = {soft_navigation_count_, - soft_navigation_start_time, - window_->GetNavigationId().Utf8()}; - if (LocalFrameClient* frame_client = frame->Client()) { + blink::SoftNavigationMetrics metrics = { + .count = soft_navigation_count_, + .start_time = loader->GetTiming().MonotonicTimeToPseudoWallTime( + context->UserInteractionTimestamp()), + .first_contentful_paint = + loader->GetTiming().MonotonicTimeToPseudoWallTime( + context->FirstContentfulPaint()), + .navigation_id = context->GetNavigationId().Utf8()}; // This notifies UKM about this soft navigation. frame_client->DidObserveSoftNavigation(metrics); } @@ -521,13 +586,14 @@ void SoftNavigationHeuristics::Trace(Visitor* visitor) const { visitor->Trace(active_interaction_context_); visitor->Trace(context_for_current_url_); + visitor->Trace(window_); + visitor->Trace(paint_attribution_tracker_); // Register a custom weak callback, which runs after processing weakness for // the container. This allows us to observe the collection becoming empty // without needing to observe individual element disposal. visitor->RegisterWeakCallbackMethod< SoftNavigationHeuristics, &SoftNavigationHeuristics::ProcessCustomWeakness>(this); - visitor->Trace(window_); } // This is invoked when executing a callback with an active `EventScope`,
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.h b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.h index 1266bf64..71c5b35 100644 --- a/third_party/blink/renderer/core/timing/soft_navigation_heuristics.h +++ b/third_party/blink/renderer/core/timing/soft_navigation_heuristics.h
@@ -13,6 +13,7 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/paint/timing/lcp_objects.h" +#include "third_party/blink/renderer/core/paint/timing/paint_timing.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/scheduler/public/task_attribution_tracker.h" @@ -25,6 +26,7 @@ class ScriptState; class SoftNavigationContext; +class SoftNavigationPaintAttributionTracker; // This class contains the logic for calculating Single-Page-App soft navigation // heuristics. See https://github.com/WICG/soft-navigations @@ -114,6 +116,7 @@ SoftNavigationContext* MaybeGetSoftNavigationContextForTiming(Node* node); void OnPaintFinished(); void OnInputOrScroll(); + OptionalPaintTimingCallback TakePaintTimingCallback(); void UpdateSoftLcpCandidate(); const LargestContentfulPaintDetails& @@ -131,12 +134,17 @@ // soft navigation tracking, otherwise it returns nullopt. std::optional<EventScope> MaybeCreateEventScopeForEvent(const Event&); + SoftNavigationPaintAttributionTracker* GetPaintAttributionTracker() { + CHECK_EQ(IsPrePaintBasedAttributionEnabled(), !!paint_attribution_tracker_); + return paint_attribution_tracker_.Get(); + } + // This method is called during the weakness processing stage of garbage // collection to remove items from `potential_soft_navigations_`. void ProcessCustomWeakness(const LivenessBroker& info); private: - void ReportSoftNavigationToMetrics(LocalFrame*, SoftNavigationContext*) const; + void ReportSoftNavigationToMetrics(SoftNavigationContext*) const; void SetIsTrackingSoftNavigationHeuristicsOnDocument(bool value) const; // We can grab a context from the "running task", or sometimes from other @@ -147,13 +155,18 @@ SoftNavigationContext*) const; SoftNavigationContext* GetSoftNavigationContextForCurrentTask() const; - bool EmitSoftNavigationEntryIfAllConditionsMet(SoftNavigationContext*); + void EmitSoftNavigationEntryIfAllConditionsMet(SoftNavigationContext*); LocalFrame* GetLocalFrameIfOutermostAndNotDetached() const; void OnSoftNavigationEventScopeDestroyed(const EventScope&); EventScope CreateEventScope(EventScope::Type type, ScriptState*); uint64_t CalculateRequiredPaintArea() const; uint64_t CalculateViewportArea() const; + bool IsPrePaintBasedAttributionEnabled() const { + return paint_attribution_mode_ == + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution; + } + Member<LocalDOMWindow> window_; // The set of ongoing potential soft navigations. `SoftNavigationContext` @@ -189,8 +202,14 @@ // continue measuring paints for a while. Member<SoftNavigationContext> context_for_current_url_; + // Used to map DOM modifications to `SoftNavigationContext`s for paint + // attribution. Only set when `IsPrePaintBasedAttributionEnabled()` is true. + Member<SoftNavigationPaintAttributionTracker> paint_attribution_tracker_; + uint32_t soft_navigation_count_ = 0; bool has_active_event_scope_ = false; + bool needs_paint_timing_callback_ = false; + const features::SoftNavigationHeuristicsMode paint_attribution_mode_; // `task_attribution_tracker_` is cleared during `Shutdown()` (frame detach), // which should happen before the tracker is destroyed, since its lifetime is
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.cc b/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.cc new file mode 100644 index 0000000..3cf4a64 --- /dev/null +++ b/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.cc
@@ -0,0 +1,148 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h" + +#include "base/trace_event/trace_event.h" +#include "third_party/blink/renderer/core/dom/node.h" +#include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/style/computed_style.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_context.h" + +namespace blink { + +namespace { +// TODO(crbug.com/423670827): Consider moving this to ImagePaintTimingDetector. +bool IsImageType(const LayoutObject& object) { + return object.IsImage() || object.IsSVGImage() || object.IsVideo() || + object.StyleRef().HasBackgroundImage(); +} +} // namespace + +SoftNavigationPaintAttributionTracker::SoftNavigationPaintAttributionTracker() = + default; + +void SoftNavigationPaintAttributionTracker::Trace(Visitor* visitor) const { + visitor->Trace(marked_nodes_); +} + +void SoftNavigationPaintAttributionTracker::MarkNodeAsDirectlyModified( + Node* node, + SoftNavigationContext* context) { + CHECK(node); + CHECK(context); + + if (context->ContextId() != last_modification_context_id_) { + last_modification_context_id_ = context->ContextId(); + ++current_modification_generation_id_; + } + + // If this node is being modified again by the same context in the same + // generation, there's no need to update anything, unless upgrading to a + // direct modification. + if (auto* state = GetNodeState(node)) { + if (state->IsDirectlyModified() && + state->ModificationId() == current_modification_generation_id_) { + return; + } + } + + marked_nodes_.Set(node, MakeGarbageCollected<NodeState>( + context, current_modification_generation_id_, + /*is_directly_modified=*/true)); + context->AddModifiedNode(node); + if (auto* object = node->GetLayoutObject()) { + object->MarkSoftNavigationContextChanged(); + } +} + +void SoftNavigationPaintAttributionTracker::MarkNodeForPaintTrackingIfNeeded( + Node* node, + NodeState* inherited_state) { + CHECK(node); + CHECK(inherited_state); + + NodeState* current_paint_state = GetNodeState(node); + if (current_paint_state && current_paint_state->ModificationId() >= + inherited_state->ModificationId()) { + return; + } + TRACE_EVENT_INSTANT( + TRACE_DISABLED_BY_DEFAULT("loading"), + "SoftNavigationPaintAttributionTracker::InitPaintTrackingForNode", "node", + node->DebugName(), "context", + inherited_state->GetSoftNavigationContext()); + marked_nodes_.Set(node, MakeGarbageCollected<NodeState>( + inherited_state->GetSoftNavigationContext(), + inherited_state->ModificationId(), + /*is_directly_modified=*/false)); +} + +SoftNavigationPaintAttributionTracker::PrePaintUpdateResult +SoftNavigationPaintAttributionTracker::UpdateOnPrePaint( + const LayoutObject& object, + Node* context_container_root, + Node* text_aggregator) { + Node* node = object.GetNode(); + TRACE_EVENT(TRACE_DISABLED_BY_DEFAULT("loading"), + "SoftNavigationPaintAttributionTracker::UpdateOnPrePaint", "node", + node ? node->DebugName() : "(anonymous)"); + // Continue propagating the `context_container_root` for anonymous objects. + if (!node) { + return PrePaintUpdateResult::kPropagateAncestorNode; + } + + // If nothing is being propagated, there's nothing to update or track for this + // node. Otherwise, we might need to start tracking node or update the cached + // state if the propagated context is from a more recent modification. + if (context_container_root) { + auto* inherited_state = GetNodeState(context_container_root); + CHECK(inherited_state); + // If the `node` is something `SoftNavigationContext::AddPaintedArea()` + // needs to know about, which is either an image or (aggregated) text. Note + // that this also includes nodes with background images, which may not be + // leaf nodes -- but it's fine to store intermediate nodes in the tree whose + // parent and descendants have the same context. + if (node->IsTextNode() || IsImageType(*node->GetLayoutObject())) { + MarkNodeForPaintTrackingIfNeeded( + node->IsTextNode() ? text_aggregator : node, inherited_state); + } else if (auto iter = marked_nodes_.find(node); + iter != marked_nodes_.end()) { + // Otherwise, update the cached state if the inherited context is from a + // more recent modification. + // + // Note: we could overwrite the existing state, but removing it has the + // advantage of pruning the set of redundant nodes, e.g. if a node and its + // parent container were both modified, it's safe to remove the child + // because we're tracking paints for the parent's whole subtree. If this + // is removing a text aggregation node, it'll get re-added if needed when + // the state gets propagated to its children. + NodeState* node_state = iter->value; + if (node_state->ModificationId() <= inherited_state->ModificationId()) { + marked_nodes_.erase(iter); + } + } + } + // If `node` is container root that we're tracking, start propagating that to + // descendants; otherwise keep propagating the `context_container_root`. + if (auto* state = GetNodeState(node); state && state->IsDirectlyModified()) { + return PrePaintUpdateResult::kPropagateCurrentNode; + } + return PrePaintUpdateResult::kPropagateAncestorNode; +} + +SoftNavigationPaintAttributionTracker::NodeState::NodeState( + SoftNavigationContext* context, + uint64_t modification_id, + bool is_directly_modified) + : context_(context), + modification_id_(modification_id), + is_directly_modified_(is_directly_modified) {} + +void SoftNavigationPaintAttributionTracker::NodeState::Trace( + Visitor* visitor) const { + visitor->Trace(context_); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h b/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h new file mode 100644 index 0000000..46284bb --- /dev/null +++ b/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h
@@ -0,0 +1,173 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TIMING_SOFT_NAVIGATION_PAINT_ATTRIBUTION_TRACKER_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_TIMING_SOFT_NAVIGATION_PAINT_ATTRIBUTION_TRACKER_H_ + +#include <cstdint> + +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h" +#include "third_party/blink/renderer/platform/heap/garbage_collected.h" + +namespace blink { +class LayoutObject; +class Node; +class SoftNavigationContext; + +// `SoftNavigationPaintAttributionTracker` helps attribute contentful paints to +// DOM nodes that were modified as part of an interaction, working together with +// `PrePaintTreeWalk` to maintain a mapping of `Node` to `SoftNavigationContext` +// for relevant nodes. It works as follows: +// +// All `LayoutObject`s have bits indicating: +// 1. whether the node's relevant `SoftNavigationContext` has changed +// (initially true) +// 2. whether any of the node's descendants' `SoftNavigationContext` has +// changed (initially false) +// 3. whether the node should inherit its parent's `SoftNavigationContext` +// (initially true) +// +// After a pre-paint walk, without any interactions, bits (1) and (2) are false, +// and bit (3) is true for all to-be-painted `LayoutObject`s. +// +// When an attributable DOM modification occurs, `MarkNodeAsDirectlyModified()` +// is called for the (`Node`, `SoftNavigationContext`), and this mapping is +// recorded in `marked_nodes_`. If the `Node` has a `LayoutObject` -- which +// depends if the layout has run for the node -- bits (1) and (2) are updated +// accordingly. Note: the full tree is re-walked as needed when the DOM +// structure changes, i.e. in the case that layout hasn't run. +// +// During pre-paint, `UpdateOnPrePaint()` is called for each modified node and +// its descendants to push down the context and update internal state. The +// `SoftNavigationPaintAttributionTracker::PrePaintUpdateResult` returned by +// this method is used by the pre-paint layer to set bit (3). That bit is used +// on subsequent pre-paint walks (for non-modified nodes) to determine if the +// parent context should be used, or if this is a new root, in which case the +// this root's context will be used. +// +// Subsequent interactions: if a node is modified by more than one interaction, +// paints are attributed to the most recent modification. This is accomplished +// by updating the mapping during `UpdateOnPrePaint()`. +// +// Contentful nodes: paints are only tracked for text and image nodes, which +// allows us to avoid storing the entire descendant subtree for modified nodes. +// But since text is aggregated by `TextPaintTimingDetector` up to the nearest +// non-anonymous, non-inline layout object's node, this is what we store for +// attributable text nodes. +// +// But, we need to be careful not to over-attribute DOM modifications and +// paints. For example, <body> can be a text attribution node if a +// display:inline element is added directly to <body>, for example: +// +// <body><b>Some text</b></body> +// +// And if such an element is appended to <body>, we want to track the paints +// for the element, but not propagate the change to all descendants of <body>. +// This is handled by only propagating directly modified nodes during the +// pre-paint walk. +class CORE_EXPORT SoftNavigationPaintAttributionTracker + : public GarbageCollected<SoftNavigationPaintAttributionTracker> { + public: + SoftNavigationPaintAttributionTracker(); + + // Initializes paint tracking for the given node, such that contentful paints + // to it or its descendants will be associated with the given context. + // + // TODO(crbug.com/328783345): This method is currently only called for a small + // set of DOM modifications (anything that appends), and in particular style + // changes are not attributed. This means that nodes that might become visible + // through class changes or inline style changes are not handled, and images + // that are painted due to a style change that updates the background image + // are not considered. + void MarkNodeAsDirectlyModified(Node*, SoftNavigationContext*); + + // Returns true if the node is attributable to the given context, and false + // otherwise. The node must be an image, text aggregation node, or something + // explicitly modified, otherwise this returns false. + bool IsAttributable(Node* node, SoftNavigationContext* context) const { + if (context == nullptr) { + return false; + } + auto* state = GetNodeState(node); + return state && state->GetSoftNavigationContext() == context; + } + + // Called during the pre-paint phase to propagate the `SoftNavigationContext` + // associated with task attributable modified DOM nodes to descendant nodes. + // Returns a `PrePaintUpdateResult` indicating whether the current + // `context_container_root` should continue to be propagated to this node and + // descendants, or if `object`'s `Node` represents a new root which should be + // be propagated to the subtree. `text_aggregator` is the ancestor to which + // text paints will be attributed to (see `TextPaintTimingDetector`). + enum class PrePaintUpdateResult { + kPropagateAncestorNode, + kPropagateCurrentNode + }; + PrePaintUpdateResult UpdateOnPrePaint(const LayoutObject& object, + Node* context_container_root, + Node* text_aggregator); + + void Trace(Visitor* visitor) const; + + private: + // State associated with nodes stored in `marked_nodes_`. Aside from storing + // the `SoftNavigationContext`, this class allows us to distinguish between + // the types of entries (directly modified or not), as well as to determine + // the modification order between entries. + class NodeState : public GarbageCollected<NodeState> { + public: + NodeState(SoftNavigationContext* context, + uint64_t modification_id, + bool is_directly_modified); + + bool IsDirectlyModified() const { return is_directly_modified_; } + uint64_t ModificationId() const { return modification_id_; } + + SoftNavigationContext* GetSoftNavigationContext() { return context_.Get(); } + + void Trace(Visitor* visitor) const; + + private: + const Member<SoftNavigationContext> context_; + const uint64_t modification_id_; + const bool is_directly_modified_; + }; + + NodeState* GetNodeState(Node* node) const { + auto iter = marked_nodes_.find(node); + return iter == marked_nodes_.end() ? nullptr : iter->value; + } + + // Tracks `node` in `marked_nodes_` if the `inherited_state` is from a more + // recent modification, or if `node` isn't being tracked. Called for + // "contenful nodes" (images and text aggregation nodes). + void MarkNodeForPaintTrackingIfNeeded(Node* node, NodeState* inherited_state); + + // IDs used for determining the modification order of `NodeState` objects. We + // use a "modification generation" scheme, incrementing the + // `current_modification_generation_id_` when `MarkNodeAsDirectlyModified()` + // is called with a different context from the last time. This enables + // grouping related DOM modifications, which enables pruning redundant + // `marked_nodes_`. + uint64_t current_modification_generation_id_ = 0; + uint64_t last_modification_context_id_ = 0; + + // Stores nodes directly modified by an interaction, descendant nodes that are + // text aggregators, and descendant image nodes. Redundant nodes (e.g. a + // non-image, non-text node whose parent is also marked) and obsolete nodes + // (descendants of nodes with newer modifications) are removed during + // pre-paint. + // + // TODO(crbug.com/423670827): `NodeState` currently keeps the associated + // `SoftNavigationContext` alive, so the context's lifetime depends on the + // lifetime of the nodes it modified. We may want to consider making this + // eligible for GC earlier, but need to figure out how attribution should be + // handled if there are ancestors with an older context. + HeapHashMap<WeakMember<Node>, Member<NodeState>> marked_nodes_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_TIMING_SOFT_NAVIGATION_PAINT_ATTRIBUTION_TRACKER_H_
diff --git a/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker_test.cc b/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker_test.cc new file mode 100644 index 0000000..dd0be42 --- /dev/null +++ b/third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker_test.cc
@@ -0,0 +1,495 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/timing/soft_navigation_paint_attribution_tracker.h" + +#include "base/test/scoped_feature_list.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/platform/web_runtime_features.h" +#include "third_party/blink/renderer/core/dom/element.h" +#include "third_party/blink/renderer/core/html/html_element.h" +#include "third_party/blink/renderer/core/html_names.h" +#include "third_party/blink/renderer/core/testing/core_unit_test_helper.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_context.h" +#include "third_party/blink/renderer/core/timing/soft_navigation_heuristics.h" +#include "third_party/blink/renderer/platform/heap/garbage_collected.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" + +namespace blink { + +class SoftNavigationPaintAttributionTrackerTest : public RenderingTest { + public: + SoftNavigationPaintAttributionTrackerTest() { + feature_list_.InitWithFeatures( + {features::kSoftNavigationDetectionPrePaintBasedAttribution}, {}); + WebRuntimeFeatures::UpdateStatusFromBaseFeatures(); + } + + ~SoftNavigationPaintAttributionTrackerTest() override = default; + + SoftNavigationContext* CreateSoftNavigationContext() { + return MakeGarbageCollected<SoftNavigationContext>( + *GetDocument().domWindow(), + features::SoftNavigationHeuristicsMode::kPrePaintBasedAttribution); + } + + SoftNavigationPaintAttributionTracker* Tracker() { return tracker_.Get(); } + + Element* GetElement(const char* name) { + return GetDocument().getElementById(AtomicString(name)); + } + + private: + void SetUp() override { + EnableCompositing(); + RenderingTest::SetUp(); + tracker_ = GetDocument() + .domWindow() + ->GetSoftNavigationHeuristics() + ->GetPaintAttributionTracker(); + } + + base::test::ScopedFeatureList feature_list_; + Persistent<SoftNavigationPaintAttributionTracker> tracker_; +}; + +TEST_F(SoftNavigationPaintAttributionTrackerTest, ImageDirect) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <img id='target' height=50 width=50></img> + </div> + )HTML"); + + Node* target_node = GetElement("target"); + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(target_node, context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, ImageIndirect) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <div id='target'> + <img id='content' height=50 width=50></img> + </div> + </div> + )HTML"); + + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(GetElement("target"), context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(GetElement("content"), context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, BackgroundImage) { + SetBodyInnerHTML(R"HTML( + <!doctype html> + <style> + div#content { + height: 500px; + width: 100px; + background-image: url("data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="); + background-size: contain; + background-repeat: no-repeat; + } + </style> + <div id='ancestor'> + <div id='target'> + <div id='content'></div> + </div> + </div> + )HTML"); + + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(GetElement("target"), context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(GetElement("content"), context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, TextDirect) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <div id='target'> + Content. + </div> + </div> + )HTML"); + + Node* target_node = GetElement("target"); + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(target_node, context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, TextIndirect) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <div id='target'> + <div id='content'> + Content + </div> + </div> + </div> + )HTML"); + + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(GetElement("target"), context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(GetElement("content"), context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, TextAggregation) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <div id='target'> + <div id='content'> + This is some <span id='inline'>inline</span> content. + </div> + </div> + </div> + )HTML"); + + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(GetElement("target"), context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(GetElement("content"), context)); + // This is a bit of an implementation detail, but we try to keep the minimum + // set of nodes needed for attribution to avoid memory bloat, so we we want to + // make sure we're we're limiting the set of elements we record to text + // aggregating nodes and images. + EXPECT_FALSE(Tracker()->IsAttributable(GetElement("inline"), context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, + AppendInlineTextNoPreviousContext) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <div id='content'> + This is some content. + </div> + </div> + )HTML"); + + auto* context = CreateSoftNavigationContext(); + UpdateAllLifecyclePhasesForTest(); + + // Simulate appending in JS with an active context. + Element* content_node = GetElement("content"); + auto* element = + MakeGarbageCollected<HTMLElement>(html_names::kBTag, GetDocument()); + element->setInnerText(" And this is bold text."); + content_node->appendChild(element); + Tracker()->MarkNodeAsDirectlyModified(element, context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, context)); + EXPECT_TRUE(Tracker()->IsAttributable(element, context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, + AppendInlineTextOverwritePreviousAggregationNodeContext) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <div id='content'> + This is some content. + </div> + </div> + )HTML"); + + auto* old_context = CreateSoftNavigationContext(); + UpdateAllLifecyclePhasesForTest(); + + Element* content_node = GetElement("content"); + Tracker()->MarkNodeAsDirectlyModified(content_node, old_context); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, old_context)); + + auto* new_context = CreateSoftNavigationContext(); + auto* element = + MakeGarbageCollected<HTMLElement>(html_names::kBTag, GetDocument()); + element->setInnerText(" And this is bold text."); + content_node->appendChild(element); + Tracker()->MarkNodeAsDirectlyModified(element, new_context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, new_context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, + AppendInlineTextInheritPreviousContext) { + SetBodyInnerHTML(R"HTML( + <div id='ancestor'> + <div id='target'> + <div id='content'></div> + </div> + </div> + )HTML"); + + auto* context = CreateSoftNavigationContext(); + UpdateAllLifecyclePhasesForTest(); + + Element* content_node = GetElement("content"); + Element* target_node = GetElement("target"); + Tracker()->MarkNodeAsDirectlyModified(target_node, context); + // This shouldn't be attributable yet since it has no text children. + EXPECT_FALSE(Tracker()->IsAttributable(content_node, context)); + + // TODO(crbug.com/423670827): For now, appending to an attributed node without + // a `SoftNavigationContext` inherits the node's context. Evaluate if we need + // to make changes here. + auto* element = + MakeGarbageCollected<HTMLElement>(html_names::kBTag, GetDocument()); + element->setInnerText(" And this is bold text."); + content_node->appendChild(element); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, BodyAsTextAggregationNode) { + SetBodyInnerHTML(R"HTML( + <b id="target">Bold content</b> + )HTML"); + + Node* target_node = GetElement("target"); + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(target_node, context); + + UpdateAllLifecyclePhasesForTest(); + // This is tracked even though it's inline since it was directly modified. + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); + // This text aggregates up to <body>, so that should be tracked. + EXPECT_TRUE(Tracker()->IsAttributable(GetDocument().body(), context)); + // But, <body> should not be considered a new root for propagation. + EXPECT_TRUE(GetDocument() + .body() + ->GetLayoutObject() + ->ShouldInheritSoftNavigationContext()); + + // Ensure a subsequent direct modification to <body> cause it to be + // propagated. + Tracker()->MarkNodeAsDirectlyModified(GetDocument().body(), context); + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(GetDocument() + .body() + ->GetLayoutObject() + ->ShouldInheritSoftNavigationContext()); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, + IntermediateNodesAreNotTracked) { + SetBodyInnerHTML(R"HTML( + <div id='outer'> + <div id='target'> + <div id='inner-1'> + <div id='inner-2'> + <div id='content'> + Content + </div> + </div> + </div> + </div> + </div> + )HTML"); + + Node* target_node = GetElement("target"); + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(target_node, context); + + UpdateAllLifecyclePhasesForTest(); + // This is tracked even though it's inline since it was directly modified. + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); + EXPECT_FALSE(Tracker()->IsAttributable(GetElement("inner-1"), context)); + EXPECT_FALSE(Tracker()->IsAttributable(GetElement("inner-2"), context)); + EXPECT_TRUE(Tracker()->IsAttributable(GetElement("content"), context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, MultipleContexts) { + SetBodyInnerHTML(R"HTML( + <div id='outer-1'> + <div id='target-1'> + <div id='inner-1'> + <div id='content-1'> + Content + </div> + </div> + </div> + </div> + <div id='outer-2'> + <div id='target-2'> + <div id='inner-2'> + <div id='content-2'> + Content + </div> + </div> + </div> + </div> + )HTML"); + + Node* target1_node = GetElement("target-1"); + Node* target2_node = GetElement("target-2"); + Node* content1_node = GetElement("content-1"); + Node* content2_node = GetElement("content-2"); + + auto* context1 = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(target1_node, context1); + auto* context2 = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(target2_node, context2); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target1_node, context1)); + EXPECT_TRUE(Tracker()->IsAttributable(content1_node, context1)); + EXPECT_TRUE(Tracker()->IsAttributable(target2_node, context2)); + EXPECT_TRUE(Tracker()->IsAttributable(content2_node, context2)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, + MostRecentModificationWinsNewerContext) { + SetBodyInnerHTML(R"HTML( + <div id='outer'> + <div id='target'> + <div id='inner'> + <div id='content'> + Content + </div> + </div> + <div id='inner-sibling'> + <div id='sibling-content'> + Sibling content + </div> + </div> + </div> + </div> + )HTML"); + + Node* target_node = GetElement("target"); + Node* inner_node = GetElement("inner"); + Node* content_node = GetElement("content"); + Node* sibling_content_node = GetElement("sibling-content"); + auto* context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(target_node, context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); + EXPECT_FALSE(Tracker()->IsAttributable(inner_node, context)); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, context)); + EXPECT_TRUE(Tracker()->IsAttributable(sibling_content_node, context)); + + auto* new_context = CreateSoftNavigationContext(); + Tracker()->MarkNodeAsDirectlyModified(inner_node, new_context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); + EXPECT_FALSE(Tracker()->IsAttributable(inner_node, context)); + EXPECT_TRUE(Tracker()->IsAttributable(inner_node, new_context)); + EXPECT_FALSE(Tracker()->IsAttributable(content_node, context)); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, new_context)); + EXPECT_TRUE(Tracker()->IsAttributable(sibling_content_node, context)); + EXPECT_FALSE(Tracker()->IsAttributable(sibling_content_node, new_context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, + MostRecentModificationWinsOlderContext) { + SetBodyInnerHTML(R"HTML( + <div id='outer'> + <div id='target'> + <div id='inner'> + <div id='content'> + Content + </div> + </div> + <div id='inner-sibling'> + <div id='sibling-content'> + Sibling content + </div> + </div> + </div> + </div> + )HTML"); + + auto* old_context = CreateSoftNavigationContext(); + auto* new_context = CreateSoftNavigationContext(); + + Node* target_node = GetElement("target"); + Node* inner_node = GetElement("inner"); + Node* content_node = GetElement("content"); + Node* sibling_content_node = GetElement("sibling-content"); + Tracker()->MarkNodeAsDirectlyModified(target_node, new_context); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, new_context)); + EXPECT_FALSE(Tracker()->IsAttributable(inner_node, new_context)); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, new_context)); + EXPECT_TRUE(Tracker()->IsAttributable(sibling_content_node, new_context)); + + // Modify `target_node` again with a context from an older interaction. This + // should propagated all the way down. + Tracker()->MarkNodeAsDirectlyModified(target_node, old_context); + EXPECT_FALSE(Tracker()->IsAttributable(target_node, new_context)); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, old_context)); + + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, old_context)); + EXPECT_FALSE(Tracker()->IsAttributable(inner_node, new_context)); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, old_context)); + EXPECT_TRUE(Tracker()->IsAttributable(sibling_content_node, old_context)); + + // `inner_node` isn't being tracked, so modifying it directly will cause it to + // be attributed to the `new_context`. + Tracker()->MarkNodeAsDirectlyModified(inner_node, new_context); + EXPECT_TRUE(Tracker()->IsAttributable(inner_node, new_context)); + // And pre-paint should update the relevant aggregation node. + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(inner_node, new_context)); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, new_context)); +} + +TEST_F(SoftNavigationPaintAttributionTrackerTest, + PrePaintPrunesRedundantNodes) { + SetBodyInnerHTML(R"HTML( + <div id='target'> + <div id='inner1'> + <div id='inner2'> + <div id='content'> + Text + </div> + </div> + </dif> + </div>> + )HTML"); + auto* context = CreateSoftNavigationContext(); + + Node* target_node = GetElement("target"); + Node* inner_node_1 = GetElement("inner1"); + Node* inner_node_2 = GetElement("inner2"); + Node* content_node = GetElement("content"); + Tracker()->MarkNodeAsDirectlyModified(content_node, context); + Tracker()->MarkNodeAsDirectlyModified(inner_node_2, context); + Tracker()->MarkNodeAsDirectlyModified(inner_node_1, context); + Tracker()->MarkNodeAsDirectlyModified(target_node, context); + + // Initially, everything is tracked. + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); + EXPECT_TRUE(Tracker()->IsAttributable(inner_node_1, context)); + EXPECT_TRUE(Tracker()->IsAttributable(inner_node_2, context)); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, context)); + + // After pre-paint, only the common container node (target) and text + // aggregation node will be tracked. + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(Tracker()->IsAttributable(target_node, context)); + EXPECT_FALSE(Tracker()->IsAttributable(inner_node_1, context)); + EXPECT_FALSE(Tracker()->IsAttributable(inner_node_2, context)); + EXPECT_TRUE(Tracker()->IsAttributable(content_node, context)); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc index 3e46f9ff..a82518e 100644 --- a/third_party/blink/renderer/core/timing/window_performance.cc +++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -1424,14 +1424,17 @@ } } -void WindowPerformance::AddSoftNavigationEntry(const AtomicString& name, - base::TimeTicks timestamp) { +void WindowPerformance::AddSoftNavigationEntry( + const AtomicString& name, + base::TimeTicks timestamp, + const DOMPaintTimingInfo& paint_timing_info) { if (!RuntimeEnabledFeatures::SoftNavigationHeuristicsEnabled( GetExecutionContext())) { return; } SoftNavigationEntry* entry = MakeGarbageCollected<SoftNavigationEntry>( - name, MonotonicTimeToDOMHighResTimeStamp(timestamp), DomWindow()); + name, MonotonicTimeToDOMHighResTimeStamp(timestamp), paint_timing_info, + DomWindow()); if (HasObserverFor(PerformanceEntry::kSoftNavigation)) { UseCounter::Count(GetExecutionContext(),
diff --git a/third_party/blink/renderer/core/timing/window_performance.h b/third_party/blink/renderer/core/timing/window_performance.h index 803c010..1fa1a5a 100644 --- a/third_party/blink/renderer/core/timing/window_performance.h +++ b/third_party/blink/renderer/core/timing/window_performance.h
@@ -155,7 +155,8 @@ void AddLayoutShiftEntry(LayoutShift*); void AddVisibilityStateEntry(bool is_visible, base::TimeTicks start_time); void AddSoftNavigationEntry(const AtomicString& name, - base::TimeTicks start_time); + base::TimeTicks start_time, + const DOMPaintTimingInfo& paint_timing_info); // PageVisibilityObserver void PageVisibilityChanged() override;
diff --git a/third_party/blink/renderer/modules/content_extraction/BUILD.gn b/third_party/blink/renderer/modules/content_extraction/BUILD.gn index 763c9f8d..eb09a7a 100644 --- a/third_party/blink/renderer/modules/content_extraction/BUILD.gn +++ b/third_party/blink/renderer/modules/content_extraction/BUILD.gn
@@ -10,6 +10,8 @@ "ai_page_content_agent.h", "document_chunker.cc", "document_chunker.h", + "frame_metadata_observer_registry.cc", + "frame_metadata_observer_registry.h", "inner_html_agent.cc", "inner_html_agent.h", "inner_html_builder.cc",
diff --git a/third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.cc b/third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.cc new file mode 100644 index 0000000..6b8a40f9 --- /dev/null +++ b/third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.cc
@@ -0,0 +1,138 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.h" + +#include "third_party/blink/renderer/bindings/core/v8/v8_mutation_observer_init.h" +#include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/dom/events/event.h" +#include "third_party/blink/renderer/core/dom/mutation_observer.h" +#include "third_party/blink/renderer/core/dom/mutation_record.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" +#include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/core/html/html_head_element.h" +#include "third_party/blink/renderer/modules/content_extraction/paid_content.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" + +namespace blink { + +// static +const char FrameMetadataObserverRegistry::kSupplementName[] = + "FrameMetadataObserverRegistry"; + +// static +FrameMetadataObserverRegistry* FrameMetadataObserverRegistry::From( + Document& document) { + return Supplement<Document>::From<FrameMetadataObserverRegistry>(document); +} + +// static +void FrameMetadataObserverRegistry::BindReceiver( + LocalFrame* frame, + mojo::PendingReceiver<mojom::blink::FrameMetadataObserverRegistry> + receiver) { + CHECK(frame && frame->GetDocument()); + + auto& document = *frame->GetDocument(); + auto* registry = FrameMetadataObserverRegistry::From(document); + if (!registry) { + registry = MakeGarbageCollected<FrameMetadataObserverRegistry>( + base::PassKey<FrameMetadataObserverRegistry>(), *frame); + Supplement<Document>::ProvideTo(document, registry); + } + registry->Bind(std::move(receiver)); +} + + +FrameMetadataObserverRegistry::FrameMetadataObserverRegistry( + base::PassKey<FrameMetadataObserverRegistry>, + LocalFrame& frame) + : Supplement<Document>(*frame.GetDocument()), + receiver_set_(this, frame.DomWindow()), + observers_(frame.DomWindow()) {} + +FrameMetadataObserverRegistry::~FrameMetadataObserverRegistry() = default; + +void FrameMetadataObserverRegistry::Bind( + mojo::PendingReceiver<mojom::blink::FrameMetadataObserverRegistry> + receiver) { + receiver_set_.Add( + std::move(receiver), + GetSupplementable()->GetTaskRunner(TaskType::kInternalUserInteraction)); +} + +void FrameMetadataObserverRegistry::Trace(Visitor* visitor) const { + Supplement<Document>::Trace(visitor); + visitor->Trace(receiver_set_); + visitor->Trace(dom_content_loaded_observer_); + visitor->Trace(observers_); +} + +class FrameMetadataObserverRegistry::DomContentLoadedListener final + : public NativeEventListener { + public: + void Invoke(ExecutionContext* execution_context, + blink::Event* event) override { + DCHECK_EQ(event->type(), "DOMContentLoaded"); + + // We can only get DOMContentLoaded event from a Window, not a Worker. + DCHECK(execution_context->IsWindow()); + LocalDOMWindow& window = *To<LocalDOMWindow>(execution_context); + + Document& document = *window.document(); + + auto* registry = + Supplement<Document>::From<FrameMetadataObserverRegistry>(document); + if (!registry) { + // There is no registry. Just abort. + return; + } + registry->OnDomContentLoaded(); + } +}; + +void FrameMetadataObserverRegistry::AddObserver( + mojo::PendingRemote<mojom::blink::FrameMetadataObserver> observer) { + observers_.Add(std::move(observer), GetSupplementable()->GetTaskRunner( + TaskType::kInternalUserInteraction)); + if (GetSupplementable()->HasFinishedParsing()) { + OnDomContentLoaded(); + } else { + if (!dom_content_loaded_observer_) { + dom_content_loaded_observer_ = + MakeGarbageCollected<DomContentLoadedListener>(); + GetSupplementable()->addEventListener(event_type_names::kDOMContentLoaded, + dom_content_loaded_observer_.Get(), + false); + } + } +} + +void FrameMetadataObserverRegistry::OnDomContentLoaded() { + OnPaidContentMetadataChanged(); + + if(dom_content_loaded_observer_) { + GetSupplementable()->removeEventListener(event_type_names::kDOMContentLoaded, + dom_content_loaded_observer_.Get(), + false); + dom_content_loaded_observer_ = nullptr; + } +} + +void FrameMetadataObserverRegistry::OnPaidContentMetadataChanged() { + PaidContent paid_content; + // TODO(gklassen): Add a variant of QueryPaidElements that just checks for + // presence and doesn't look for elements. + bool has_paid_content = paid_content.QueryPaidElements(*GetSupplementable()); + + // TODO(gklassen): Add a MuationObserver to monitor for changes during the + // lifetime of the page. + + for (auto& observer : observers_) { + observer->OnPaidContentMetadataChanged(has_paid_content); + } +} + + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.h b/third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.h new file mode 100644 index 0000000..a603bda46 --- /dev/null +++ b/third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.h
@@ -0,0 +1,67 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CONTENT_EXTRACTION_FRAME_METADATA_OBSERVER_REGISTRY_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_CONTENT_EXTRACTION_FRAME_METADATA_OBSERVER_REGISTRY_H_ + +#include "base/memory/raw_ptr.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "third_party/blink/public/mojom/content_extraction/frame_metadata_observer_registry.mojom-blink.h" +#include "third_party/blink/renderer/modules/modules_export.h" +#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote_set.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" +#include "third_party/blink/renderer/platform/supplementable.h" +#include "third_party/blink/renderer/core/dom/document.h" + +namespace blink { +class LocalFrame; + +// Registry used to Add Observers for when frame metadata changes. +class MODULES_EXPORT FrameMetadataObserverRegistry final + : public GarbageCollected<FrameMetadataObserverRegistry>, + public mojom::blink::FrameMetadataObserverRegistry, + public Supplement<Document> { + public: + static const char kSupplementName[]; + static FrameMetadataObserverRegistry* From(Document&); + static void BindReceiver( + LocalFrame* frame, + mojo::PendingReceiver<mojom::blink::FrameMetadataObserverRegistry> + receiver); + + FrameMetadataObserverRegistry(base::PassKey<FrameMetadataObserverRegistry>, + LocalFrame&); + FrameMetadataObserverRegistry(const FrameMetadataObserverRegistry&) = delete; + FrameMetadataObserverRegistry& operator=( + const FrameMetadataObserverRegistry&) = delete; + ~FrameMetadataObserverRegistry() override; + + void Trace(Visitor* visitor) const override; + + private: + class DomContentLoadedListener; + + void Bind(mojo::PendingReceiver<mojom::blink::FrameMetadataObserverRegistry> + receiver); + + void AddObserver(mojo::PendingRemote<mojom::blink::FrameMetadataObserver> + observer) override; + + void OnDomContentLoaded(); + void OnPaidContentMetadataChanged(); + + HeapMojoReceiverSet<mojom::blink::FrameMetadataObserverRegistry, + FrameMetadataObserverRegistry> + receiver_set_; + + HeapMojoRemoteSet<mojom::blink::FrameMetadataObserver> observers_; + + Member<DomContentLoadedListener> dom_content_loaded_observer_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_CONTENT_EXTRACTION_FRAME_METADATA_OBSERVER_REGISTRY_H_
diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc index aedf60b..5a4ee52 100644 --- a/third_party/blink/renderer/modules/modules_initializer.cc +++ b/third_party/blink/renderer/modules/modules_initializer.cc
@@ -48,6 +48,7 @@ #include "third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_rendering_context.h" #include "third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h" #include "third_party/blink/renderer/modules/content_extraction/ai_page_content_agent.h" +#include "third_party/blink/renderer/modules/content_extraction/frame_metadata_observer_registry.h" #include "third_party/blink/renderer/modules/content_extraction/inner_html_agent.h" #include "third_party/blink/renderer/modules/content_extraction/inner_text_agent.h" #include "third_party/blink/renderer/modules/context_menu/context_menu.h" @@ -273,6 +274,12 @@ frame.GetInterfaceRegistry()->AddInterface(WTF::BindRepeating( &InnerHtmlAgent::BindReceiver, WrapWeakPersistent(&frame))); } + + if (base::FeatureList::IsEnabled(features::kFrameMetadataObserver)) { + frame.GetInterfaceRegistry()->AddInterface( + WTF::BindRepeating(&FrameMetadataObserverRegistry::BindReceiver, + WrapWeakPersistent(&frame))); + } } void ModulesInitializer::InstallSupplements(LocalFrame& frame) const {
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 5691e27..b405781 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -4671,6 +4671,10 @@ depends_on: ["SoftNavigationDetection"], }, { + name: "SoftNavigationDetectionPrePaintBasedAttribution", + depends_on: ["SoftNavigationDetection"], + }, + { name: "SoftNavigationHeuristics", status: "experimental", origin_trial_allows_third_party: true,
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 2d38d7b..749868cf 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2288,7 +2288,7 @@ crbug.com/1074547 external/wpt/css/css-transitions/transitioncancel-002.html [ Timeout ] # Was failing only on Mac15, but then found the confidence to fail more broadly. -crbug.com/419116790 external/wpt/webrtc/RTCDataChannel-close.html [ Failure Pass Crash Timeout ] +crbug.com/419116790 external/wpt/webrtc/RTCDataChannel-close.html [ Crash Failure Pass Timeout ] crbug.com/1113004 external/wpt/css/css-pseudo/active-selection-043.html [ Failure ] crbug.com/1100119 [ Mac ] external/wpt/css/css-pseudo/active-selection-051.html [ Failure ] @@ -2765,6 +2765,49 @@ crbug.com/424798906 external/wpt/pointerevents/pointerevent_element_haspointercapture.html?touch [ Failure ] # ====== New tests from wpt-importer added here ====== +crbug.com/426429664 [ Win11-arm64 ] external/wpt/FileAPI/BlobURL/cross-partition-navigation.https.html [ Crash ] +crbug.com/426429664 [ Win11-arm64 ] external/wpt/FileAPI/BlobURL/cross-partition.https.html [ Skip Timeout ] +crbug.com/425827681 [ Win11-arm64 ] external/wpt/cookies/attributes/max-age.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/fedcm/fedcm-storage-access-api-autogrant.tentative.https.sub.html [ Crash ] +crbug.com/426509690 [ Win11-arm64 ] external/wpt/html/document-isolation-policy/credentialless-cache-storage-from-none.https.tentative.window.html?document [ Crash ] +crbug.com/426509690 [ Win11-arm64 ] external/wpt/html/document-isolation-policy/credentialless-fetch.https.tentative.window.html [ Crash ] +crbug.com/426509690 [ Win11-arm64 ] external/wpt/html/document-isolation-policy/credentialless-link.https.tentative.window.html [ Timeout ] +crbug.com/426648863 [ Win11-arm64 ] external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.https.html [ Crash ] +crbug.com/426648863 [ Win11-arm64 ] external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.tentative.https.html [ Timeout ] +crbug.com/426648863 [ Win11-arm64 ] external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/secure_context.html [ Crash ] +crbug.com/426164367 [ Win11-arm64 ] external/wpt/nav-tracking-mitigations/stateful-client-bounce.sub.https.html [ Skip Timeout ] +crbug.com/426164367 [ Win11-arm64 ] external/wpt/nav-tracking-mitigations/stateless-client-bounce.sub.https.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/secure-payment-confirmation/authentication-accepted.https.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/secure-payment-confirmation/authentication-cross-origin.sub.https.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/secure-payment-confirmation/authentication-icon-data-url.https.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/secure-payment-confirmation/authentication-in-iframe.sub.https.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error-downgraded.tentative.html [ Timeout ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-invalid_integrity_header.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-mi_error.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] external/wpt/speech-api/SpeechRecognition-availableOnDevice.https.html [ Crash ] +crbug.com/426509691 [ Win11-arm64 ] external/wpt/storage-access-api/hasStorageAccess-ABA.sub.https.window.html [ Crash ] +crbug.com/426509691 [ Win11-arm64 ] external/wpt/storage-access-api/requestStorageAccess-cross-origin-fetch.sub.https.window.html [ Crash ] +crbug.com/426509691 [ Win11-arm64 ] external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation-relax.sub.https.window.html [ Crash ] +crbug.com/426509691 [ Win11-arm64 ] external/wpt/storage-access-api/requestStorageAccess-same-site-iframe.sub.https.window.html [ Crash ] +crbug.com/426509691 [ Win11-arm64 ] external/wpt/storage-access-api/requestStorageAccess-sandboxed-iframe-allow-storage-access.sub.https.window.html [ Crash ] +crbug.com/426509691 [ Win11-arm64 ] external/wpt/storage-access-api/storage-access-beyond-cookies.cookies.sub.https.window.html [ Crash ] +crbug.com/425730182 [ Win11-arm64 ] virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/multiple-registrations.https.html [ Crash ] +crbug.com/425730182 [ Win11-arm64 ] virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/refresh-replaces-config.https.html [ Crash ] +crbug.com/425730182 [ Win11-arm64 ] virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/refresh-with-continue-false.https.html [ Timeout ] +crbug.com/425730182 [ Win11-arm64 ] virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/registration-sends-challenge.https.html [ Crash ] +crbug.com/425730182 [ Win11-arm64 ] virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/resolving-urls.https.html [ Crash ] +crbug.com/425730182 [ Win11-arm64 ] virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/set-scope-specification.https.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-onstart-onend.https.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] virtual/split-http-cache/external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error.tentative.html [ Timeout ] +crbug.com/426164366 [ Win11-arm64 ] virtual/split-http-cache/external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error-downgraded.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] virtual/split-http-cache/external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] virtual/split-http-cache/external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] virtual/split-http-cache/external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error-downgraded.tentative.html [ Crash ] +crbug.com/426164366 [ Win11-arm64 ] virtual/split-http-cache/external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-failed-zero-success-feaction.tentative.html [ Timeout ] +crbug.com/426648864 [ Win11-arm64 ] virtual/web-bluetooth-new-permissions-backend/external/wpt/bluetooth/bidi/adapter/cross-origin-iframe-getAvailability.sub.https.window.html [ Crash ] +crbug.com/426429658 [ Win10.20h2 ] external/wpt/bluetooth/bidi/adapter/adapter-absent-getAvailability.https.window.html [ Pass Timeout ] crbug.com/425716853 virtual/threaded/external/wpt/css/css-view-transitions/new-content-transform-change-001.html [ Failure ] crbug.com/425716853 virtual/view-transition-mpa-serialization/external/wpt/css/css-view-transitions/new-content-transform-change-001.html [ Failure ] crbug.com/425716853 virtual/view-transition-wide-gamut/external/wpt/css/css-view-transitions/new-content-transform-change-001.html [ Failure ] @@ -2789,7 +2832,6 @@ crbug.com/424597869 [ Mac14 ] virtual/unload-allowed/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/unload-main-frame-cross-origin.window.html [ Timeout ] crbug.com/425118323 [ Mac14 ] virtual/unload-allowed/external/wpt/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.html [ Timeout ] crbug.com/424245323 [ Mac14 ] virtual/close-watcher/external/wpt/close-watcher/iframes/dialog-same-origin-ynn.html [ Skip Timeout ] -crbug.com/424242611 [ Win11-arm64 ] external/wpt/orientation-sensor/RelativeOrientationSensor.https.html [ Failure Pass Timeout ] crbug.com/424229863 [ Android ] external/wpt/webdriver/tests/bidi/external/bluetooth/disable_simulation/context.py [ Failure ] crbug.com/424229863 [ Android ] external/wpt/webdriver/tests/bidi/external/bluetooth/disable_simulation/disable_simulation.py [ Failure ] crbug.com/424229863 [ Android ] external/wpt/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/simulate_gatt_connection_response.py [ Failure ] @@ -2812,6 +2854,7 @@ crbug.com/421653974 [ Win10.20h2 ] external/wpt/nav-tracking-mitigations/stateful-client-bounce.sub.https.html [ Crash Timeout ] crbug.com/421653974 [ Win10.20h2 ] external/wpt/nav-tracking-mitigations/stateless-client-bounce.sub.https.html [ Crash Timeout ] crbug.com/421653408 [ Win10.20h2 ] external/wpt/speech-api/SpeechRecognition-installOnDevice.https.html [ Timeout ] +crbug.com/421653408 [ Win11 ] external/wpt/speech-api/SpeechRecognition-installOnDevice.https.html [ Timeout ] crbug.com/421653408 [ Win10.20h2 ] virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-installOnDevice.https.html [ Timeout ] crbug.com/421402731 [ Win11 ] virtual/close-watcher/external/wpt/close-watcher/iframes/dialog-same-origin-nn.html [ Skip Timeout ] crbug.com/421228416 [ Win10.20h2 ] virtual/close-watcher/external/wpt/close-watcher/iframes/dialog-same-origin-nn.html [ Skip Timeout ] @@ -6514,7 +6557,7 @@ crbug.com/40253999 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbcursor-direction-objectstore-keyrange.any.html [ Pass ] crbug.com/40253999 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbcursor-direction-objectstore.any.html [ Pass ] crbug.com/40253999 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbcursor_advance_objectstore.any.html [ Pass ] -crbug.com/419208485 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbcursor_continue_objectstore.any.html [ Crash Pass Failure ] +crbug.com/419208485 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbcursor_continue_objectstore.any.html [ Crash Failure Pass ] crbug.com/40253999 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbcursor_update_objectstore.any.html [ Pass ] crbug.com/40253999 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbobjectstore_openCursor.any.html [ Pass ] crbug.com/40253999 virtual/indexeddb_sqlite/external/wpt/IndexedDB/idbobjectstore_openKeyCursor.any.html [ Pass ] @@ -9166,3 +9209,6 @@ # Gardener 2025-06-19 crbug.com/426081198 [ Mac ] external/wpt/html/document-isolation-policy/service-worker-coep-credentialless-proxy.https.tentative.window.html [ Pass Timeout ] + +# Issues found with test suite 2025-06-21 +crbug.com/426602897 external/wpt/screen-capture/delegate-request.https.sub.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 74dd197..bae94b62c 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -4247,6 +4247,18 @@ "expires": "Jul 1, 2025" }, { + "prefix": "soft-navigation-heuristics-pre-paint-attribution", + "owners": ["shaseley@google.com", "mmocny@google.com"], + "platforms": ["Linux"], + "bases": [ + "external/wpt/soft-navigation-heuristics/" + ], + "args": [ + "--enable-features=SoftNavigationDetectionPrePaintBasedAttribution" + ], + "expires": "Dec 1, 2025" + }, + { "prefix": "speculation-rules-prerender-target-hint", "platforms": [ "Linux",
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index fa6bb14..f962854f 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -178349,6 +178349,19 @@ {} ] ], + "scroll-target-group-012.html": [ + "f8f8a07a50d9c0a643fe11934c92dda3985c6392", + [ + null, + [ + [ + "/css/css-overflow/scroll-target-group-012-ref.html", + "==" + ] + ], + {} + ] + ], "scrollable-overflow-empty-newline-span.html": [ "39f72d9fbff4204a09ab9bbfe88fa2ec60da408c", [ @@ -322709,7 +322722,7 @@ [] ], "util.js": [ - "eda6a17a24ff7377aa4252e0cc23382972257cc4", + "8f9efad5a22c6251bfe0d00ed6730354751f6954", [] ] }, @@ -360886,6 +360899,10 @@ "82fbb988dfa9726a81be6a20bfa5ea28adc0f861", [] ], + "scroll-target-group-012-ref.html": [ + "3f63ce1d2e43ff0317e78091bba126700a837a43", + [] + ], "scrollable-overflow-input-001-ref.html": [ "151843a72c00616dfb7ad723be6b1d3435cde65b", [] @@ -362850,6 +362867,10 @@ "e030fdf37c68bd6cfd3b8efa1c361db880044646", [] ], + "registered-property-computation-expected.txt": [ + "8f41eb229cd7eaf7501d6fb3fa9b4953034abf00", + [] + ], "resources": { "utils.js": [ "b850e61fc7287d82daa4749c073c78e190ec9258", @@ -362882,6 +362903,10 @@ ] } }, + "typedom-expected.txt": [ + "19d7cb210171037d1f52b5f8363985cef4493dc5", + [] + ], "unit-cycles-expected.txt": [ "5074dab0444c2094c4a4e910ee1f17e44c4489f9", [] @@ -375762,26 +375787,10 @@ "f28ffcb85852f3888516de47a5885ac5c1c48928", [] ], - "container-progress-computed.tentative-expected.txt": [ - "cc139b94b1be6fe64bf2dfcb41c8e7be6c156943", - [] - ], - "container-progress-serialize.tentative-expected.txt": [ - "ca2834815d3bd60d5c9a7938458c880b8796a623", - [] - ], "ex-calc-expression-001-ref.html": [ "888a51ea9b6ac04fb065ee5d84a18be8fe765aca", [] ], - "media-progress-computed.tentative-expected.txt": [ - "1bb9184699c32979579dc49892d0f7c5ca20a5dd", - [] - ], - "media-progress-serialize.tentative-expected.txt": [ - "5bd23a622e55045a4152c262d37afbef8125f00e", - [] - ], "minmax-percentage-serialize-expected.txt": [ "ae7598061a545cb00b15fa5d7ce7cae14af6e41c", [] @@ -413305,7 +413314,7 @@ [] ], "non-local-ports.sub.window.js.ini": [ - "36a803d3ed7678cac74bd89b64ec041b425bb887", + "6bdc2a5b5910d2967a99f684eab72da01d98d48e", [] ] }, @@ -428762,6 +428771,16 @@ "6647dd740a275cb8a62be5cc0356e90dc0991d2e", [] ], + "images": { + "lcp-256x256-alt-1.png": [ + "44526f5aa3d999cde79de5fb4e0899cdb2b0e5af", + [] + ], + "lcp-256x256-alt-2.png": [ + "bb59d9dc1baa0abe5a57c860cd64c9000ec2b18e", + [] + ] + }, "soft-navigation-helper.js": [ "9ee79d36f76fdd6e8f6324fe0425f80825d2670d", [] @@ -431765,10 +431784,6 @@ "b1924d52b5c979deb7dd26dffdbdedff3297c804", [] ], - "TrustedTypePolicy-createXXX-expected.txt": [ - "45d110dd9d36dcfc54dc4c5c813e5eb827ec1c26", - [] - ], "TrustedTypePolicyFactory-getAttributeType-expected.txt": [ "7be05f45b7e494451a344da30c6b2bf6518f068a", [] @@ -470962,7 +470977,7 @@ ] ], "detector.https.window.js": [ - "ae21b4635383772032a0b979932679895b06e2bd", + "f52064696f33bdf1fdcc4d4cec56a24eaa35be6b", [ "ai/language_detection/detector.https.window.html", { @@ -471256,7 +471271,7 @@ ] ], "rewriter-rewrite-streaming.tentative.https.window.js": [ - "d275ba514db2d2e1f25a84c4e7bc1c7dce048b3f", + "59c7da3ceb344b133119bd361546548b81547a7e", [ "ai/rewriter/rewriter-rewrite-streaming.tentative.https.window.html", { @@ -471283,7 +471298,7 @@ ] ], "rewriter-rewrite.tentative.https.window.js": [ - "07e8b419a4af8c1c3933271e11083509a1e97fa4", + "55ec52bc932c98eac760f9c8eede1a445b3423df", [ "ai/rewriter/rewriter-rewrite.tentative.https.window.html", { @@ -471538,7 +471553,7 @@ ] ], "summarizer-summarize-streaming.tentative.https.window.js": [ - "09a8fb0d97eb4629d6cdc81d1fe34d02e9ebbbb7", + "2a41369c92d0a98257497dda421001e6a493200d", [ "ai/summarizer/summarizer-summarize-streaming.tentative.https.window.html", { @@ -471565,7 +471580,7 @@ ] ], "summarizer-summarize.tentative.https.window.js": [ - "a9be36dace027fdbf229f0f48a13ba4ab9b13941", + "8753a48353d246e59eeb7c7f8654e64db6e998ea", [ "ai/summarizer/summarizer-summarize.tentative.https.window.html", { @@ -471691,7 +471706,7 @@ ] ], "translator.optional.https.window.js": [ - "94be911afb5e823fbcde961753eb86bbc0e5d75f", + "1b2519cf2f0ed9c8b030fa1b2c6c79b000621478", [ "ai/translator/translator.optional.https.window.html", { @@ -471946,7 +471961,7 @@ ] ], "writer-write-streaming.tentative.https.window.js": [ - "67286a7ede95578dc6ef12eae43d3a08a58ff9d6", + "122acb03fd5293cdfd9a704d7587f2360d8a8dec", [ "ai/writer/writer-write-streaming.tentative.https.window.html", { @@ -471973,7 +471988,7 @@ ] ], "writer-write.tentative.https.window.js": [ - "3383ceb923963a5e726d158ff1882f083c781939", + "a49f04e44a634a9bb77b0f75c6fa3604d1024d60", [ "ai/writer/writer-write.tentative.https.window.html", { @@ -517560,6 +517575,15 @@ } ] ], + "overscroll-behavior-without-overflow.html": [ + "1491ff6d586d38f23457d225c60e681f9f1122fa", + [ + null, + { + "testdriver": true + } + ] + ], "overscroll-behavior.html": [ "dcd981e92e2b64afd93a6a390450ed270bcc23c8", [ @@ -519109,7 +519133,7 @@ ] ], "registered-property-computation.html": [ - "ebfc7c6a0b3414d14305c4a7e8cb8f7794eb9a22", + "a59fb1e6901f32fe89e03d4142a05141c29e87b0", [ null, {} @@ -519165,7 +519189,7 @@ ] ], "typedom.html": [ - "51940e298d07707288d9ad6c023f274952966f21", + "45e463608f035e4fa3b7dd17264c929c20f26d37", [ null, {} @@ -533215,7 +533239,7 @@ ] ], "attr-security.html": [ - "25f0a78a32803a79792a1f6ea46871f7f4d96e1c", + "8d7a2af6f9df1a0faec075187b3e23a96244ef17", [ null, {} @@ -533677,27 +533701,6 @@ {} ] ], - "container-progress-computed.tentative.html": [ - "fa0fcd7056084b35c3df2f48968f74c29235ebe9", - [ - null, - {} - ] - ], - "container-progress-invalid.tentative.html": [ - "491abf505ac5fa80afafc5aa4437db396932539a", - [ - null, - {} - ] - ], - "container-progress-serialize.tentative.html": [ - "18c76a35d969cd7695ed937de43edbdf465c0e7f", - [ - null, - {} - ] - ], "dynamic-viewport-units-rule-cache.html": [ "8afb3c51ed32ffd11656c17d6a7334475f6405f7", [ @@ -533908,27 +533911,6 @@ {} ] ], - "media-progress-computed.tentative.html": [ - "4bea3f617e37aa3eb5f0be900ad14afc216e0295", - [ - null, - {} - ] - ], - "media-progress-invalid.tentative.html": [ - "0aed208d8bd8998d719748ef71d647c954144acb", - [ - null, - {} - ] - ], - "media-progress-serialize.tentative.html": [ - "2144ddc69dbdd9581aef034ddb855c243225233a", - [ - null, - {} - ] - ], "minmax-angle-computed.html": [ "4d44f38748cb999f8afba27bfd4bb4b8183b0a6b", [ @@ -534077,7 +534059,7 @@ ] ], "progress-serialize.html": [ - "49c3a3c3d56596d529ee40df71373dca1290b16b", + "bb16280e17d1421deb486c682d1945c52d94f744", [ null, {} @@ -534388,6 +534370,13 @@ ] ] }, + "typed_arithmetic.html": [ + "f4258c3328775203b77273f4e088f8825cb8460c", + [ + null, + {} + ] + ], "update-subpixel-rem-unit.html": [ "98d4f00f92ae90165dd9b0c82cf0496523bc9c2a", [ @@ -542973,7 +542962,7 @@ ] ], "debug-header.https.html": [ - "631151bcbcfb7c6004e022b5b2a28f0c902998fc", + "4f384bf11952babc676d3ae23c6ec291aa736862", [ null, {} @@ -543001,7 +542990,7 @@ ] ], "multiple-registrations.https.html": [ - "d5563eb4e014f74649ce6850871d428327eb0348", + "ef024bd0c77a3ae432d382d8bacb694e054f250f", [ null, {} @@ -543043,7 +543032,7 @@ ] ], "resolving-urls.https.html": [ - "e502eb4b777a746fe653cfdc1582b4c6504bb4be", + "79f1594ba71914fd672a4065374c554820d749c1", [ null, {} @@ -606806,14 +606795,14 @@ ] ], "before-load-hash-twice.html": [ - "7c8df118437d0c075b8468e9a4abef787c09a673", + "7c3bc4870000b61007566c8fa679b42200ba6fbb", [ null, {} ] ], "before-load-hash.html": [ - "97c4636fad7c51cb07eb71cab70048df0b4df6ee", + "ccbb37e58c95dc06147ddec7b58b32a7ac5c6dd1", [ null, {} @@ -717788,6 +717777,15 @@ } ] ], + "image-src-change.html": [ + "a9bb1dc2ceb581975bf65df2414270c3a9c2037d", + [ + null, + { + "testdriver": true + } + ] + ], "lcp-unbuffered.html": [ "cf6dd768313d8209fe15fc1fd8be6855e29c0559", [ @@ -739247,7 +739245,7 @@ ] ], "TrustedTypePolicy-createXXX.html": [ - "f51f51d98455ebccdee31a5b0d844a926b27fc0e", + "957a691bcd909d71b2b34a4256fe7168cd14930b", [ null, {} @@ -759700,7 +759698,7 @@ ] ], "ctor-convolver.html": [ - "28a0fc1c3c75e5b5804d892798ad8f38aa3216e3", + "0bbb771c85d73b6c92b57b71aefb9e29f3866b69", [ null, {}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-computation-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-computation-expected.txt new file mode 100644 index 0000000..8f41eb2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-computation-expected.txt
@@ -0,0 +1,16 @@ +This is a testharness.js-based test. +Found 6 FAIL, 0 TIMEOUT, 0 NOTRUN. +[FAIL] <color> values are computed correctly [currentcolor] + assert_equals: expected "rgb(0, 0, 255)" but got "currentcolor" +[FAIL] <color> values are computed correctly [color-mix(in srgb, currentcolor, red)] + assert_equals: expected "color(srgb 0.5 0 0.5)" but got "color-mix(in srgb, currentcolor, rgb(255, 0, 0))" +[FAIL] <color> values are computed correctly [color-mix(in srgb, currentcolor, #ffffff 70%)] + assert_equals: expected "color(srgb 0.7 0.7 1)" but got "color-mix(in srgb, currentcolor 30%, rgb(255, 255, 255))" +[FAIL] <color> values are computed correctly [color-mix(in srgb, currentcolor 20%, #ffffff 20%)] + assert_equals: expected "color(srgb 0.5 0.5 1 / 0.4)" but got "color-mix(in srgb, currentcolor 20%, rgb(255, 255, 255) 20%)" +[FAIL] <color> values are computed correctly [light-dark(currentcolor, red)] + assert_equals: expected "rgb(0, 0, 255)" but got "currentcolor" +[FAIL] <color> values are computed correctly [color(from currentcolor srgb b g r)] + assert_equals: expected "color(srgb 1 0 0)" but got "color(from currentcolor srgb b g r)" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-computation.html b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-computation.html index ebfc7c6a..a59fb1e6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-computation.html +++ b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/registered-property-computation.html
@@ -8,6 +8,7 @@ #divWithFontSizeSet, #parentDiv { font-size: 10px; line-height: 20px; + color: blue; } </style> @@ -154,15 +155,15 @@ test_computed_value('<color>', '#badbee33', 'rgba(186, 219, 238, 0.2)'); test_computed_value('<color>', 'tomato', 'rgb(255, 99, 71)'); test_computed_value('<color>', 'plum', 'rgb(221, 160, 221)'); -test_computed_value('<color>', 'currentcolor', 'currentcolor'); +test_computed_value('<color>', 'currentcolor', 'rgb(0, 0, 255)'); test_computed_value('<color>', 'color-mix(in srgb, black, white)', 'color(srgb 0.5 0.5 0.5)'); -test_computed_value('<color>', 'color-mix(in srgb, currentcolor, red)', 'color-mix(in srgb, currentcolor, rgb(255, 0, 0))'); -test_computed_value('<color>', 'color-mix(in srgb, currentcolor, #ffffff 70%)', 'color-mix(in srgb, currentcolor 30%, rgb(255, 255, 255))'); -test_computed_value('<color>', 'color-mix(in srgb, currentcolor 20%, #ffffff 20%)', 'color-mix(in srgb, currentcolor 20%, rgb(255, 255, 255) 20%)'); -test_computed_value('<color>', 'light-dark(currentcolor, red)', 'currentcolor'); +test_computed_value('<color>', 'color-mix(in srgb, currentcolor, red)', 'color(srgb 0.5 0 0.5)'); +test_computed_value('<color>', 'color-mix(in srgb, currentcolor, #ffffff 70%)', 'color(srgb 0.7 0.7 1)'); +test_computed_value('<color>', 'color-mix(in srgb, currentcolor 20%, #ffffff 20%)', 'color(srgb 0.5 0.5 1 / 0.4)'); +test_computed_value('<color>', 'light-dark(currentcolor, red)', 'rgb(0, 0, 255)'); test_computed_value('<color>', 'light-dark(lime, red)', 'rgb(0, 255, 0)'); test_computed_value('<color>', 'color(from lime srgb g g g)', 'color(srgb 1 1 1)'); -test_computed_value('<color>', 'color(from currentcolor srgb b g r)', 'color(from currentcolor srgb b g r)'); +test_computed_value('<color>', 'color(from currentcolor srgb b g r)', 'color(srgb 1 0 0)'); test_computed_value('<color>', 'color(srgb 1 1 1 / calc(NaN))', 'color(srgb 1 1 1 / 0)'); // Custom ident values that look like color keywords should not be converted.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/typedom-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/typedom-expected.txt new file mode 100644 index 0000000..19d7cb2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/typedom-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +Found 1 FAIL, 0 TIMEOUT, 0 NOTRUN. +[FAIL] Computed <image> is reified as CSSImageValue by iterator + assert_equals: expected "url(\\"http://web-platform.test:8001/css/css-properties-values-api/a\\")" but got "url(\\"a\\")" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/typedom.html b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/typedom.html index 51940e2..45e4636 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/typedom.html +++ b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/typedom.html
@@ -106,15 +106,19 @@ } // Verifies that the property 'name' shows up on iteration, that it's reified -// to the specified type, and that the string representation is equal to 'value'. -function verify_computed_iteration_type(name, value, type) { +// to the specified type, and that the string representation is equal to 'computed'. +function verify_computed_iteration_type(name, value, type, computed) { + if (!computed) { + computed = value; + } + target.attributeStyleMap.set(name, value); let result = Array.from(target.computedStyleMap()).filter(e => e[0] == name)[0]; assert_equals(result.length, 2); let iter_value = result[1]; assert_equals(iter_value.length, 1); assert_true(iter_value[0] instanceof type); - assert_equals(iter_value[0].toString(), value); + assert_equals(iter_value[0].toString(), computed); } // Run the same test twice: once for each StylePropertyMap. @@ -955,7 +959,7 @@ }, 'Computed <custom-ident> is reified as CSSKeywordValue by iterator'); test(function(){ - verify_computed_iteration_type(generate_property('<image>'), 'url(\"a\")', CSSImageValue); + verify_computed_iteration_type(generate_property('<image>'), 'url(\"a\")', CSSImageValue, `url(\"${new URL("a", document.baseURI)}\")`); }, 'Computed <image> is reified as CSSImageValue by iterator'); test(function(){
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-computed.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-computed.tentative-expected.txt deleted file mode 100644 index cc139b94..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-computed.tentative-expected.txt +++ /dev/null
@@ -1,33 +0,0 @@ -This is a testharness.js-based test. -[FAIL] container-progress(height, 0px, 1px) should be used-value-equivalent to 322 - assert_equals: container-progress(height, 0px, 1px) and 322 serialize to the same thing in used values. expected "322" but got "1" -[FAIL] container-progress(width of my-container, 0px, 1px) should be used-value-equivalent to 322 - assert_equals: container-progress(width of my-container, 0px, 1px) and 322 serialize to the same thing in used values. expected "322" but got "1" -[FAIL] container-progress(height, container-progress(height, 0px, 1px) * 1px, container-progress(height, 0px, 1px) * 1px) should be used-value-equivalent to 0 - assert_equals: container-progress(height, container-progress(height, 0px, 1px) * 1px, container-progress(height, 0px, 1px) * 1px) and 0 serialize to the same thing in used values. expected "0" but got "1" -[FAIL] container-progress(height, container-progress(width of my-container, 0px, 1px) * 1px, container-progress(height of my-container-2, 0px, 1px) * 1px) should be used-value-equivalent to 0 - assert_equals: container-progress(height, container-progress(width of my-container, 0px, 1px) * 1px, container-progress(height of my-container-2, 0px, 1px) * 1px) and 0 serialize to the same thing in used values. expected "0" but got "1" -[FAIL] calc(container-progress(width, 0px, 50px) * 10px + 100px) should be used-value-equivalent to 145.6px - assert_equals: calc(container-progress(width, 0px, 50px) * 10px + 100px) and 145.6px serialize to the same thing in used values. expected "145.6px" but got "110px" -[FAIL] calc(container-progress(height, 10px, sign(50px - 500em) * 10px)) should be used-value-equivalent to -15.6 - assert_equals: calc(container-progress(height, 10px, sign(50px - 500em) * 10px)) and -15.6 serialize to the same thing in used values. expected "-15.6" but got "0" -[FAIL] calc(container-progress(width of my-container, 0px, 50px) * 10px + 100px) should be used-value-equivalent to 164.4px - assert_equals: calc(container-progress(width of my-container, 0px, 50px) * 10px + 100px) and 164.4px serialize to the same thing in used values. expected "164.4px" but got "110px" -[FAIL] calc(container-progress(height of my-container, 10px, sign(50px - 500em) * 10px)) should be used-value-equivalent to -10.9 - assert_equals: calc(container-progress(height of my-container, 10px, sign(50px - 500em) * 10px)) and -10.9 serialize to the same thing in used values. expected "-10.9" but got "0" -[FAIL] container-progress() width fallback for non-existing container name - assert_equals: container-progress(width of non-existing-container, 0px, 1px) and 800 serialize to the same thing in used values. expected "800" but got "1" -[FAIL] container-progress() height fallback for non-existing container names - assert_equals: container-progress(height of non-existing-container, 0px, 1px) and 600 serialize to the same thing in used values. expected "600" but got "1" -[FAIL] container-progress() width fallback for out of scope container - assert_equals: container-progress(width of out-of-scope-container, 0px, 1px) and 800 serialize to the same thing in used values. expected "800" but got "1" -[FAIL] container-progress() height fallback for out of scope container - assert_equals: container-progress(height of out-of-scope-container, 0px, 1px) and 600 serialize to the same thing in used values. expected "600" but got "1" -[FAIL] calc(container-progress(width, 0px, 1px) * 1px) should be used-value-equivalent to 228px - assert_equals: calc(container-progress(width, 0px, 1px) * 1px) and 228px serialize to the same thing in used values. expected "228px" but got "1px" -[FAIL] calc(container-progress(height of my-container, 0px, 1px) * 1s) should be used-value-equivalent to 228s - assert_equals: calc(container-progress(height of my-container, 0px, 1px) * 1s) and 228s serialize to the same thing in used values. expected "228s" but got "1s" -[FAIL] calc(container-progress(width of my-container-2, 0px, 1px) * 1deg) should be used-value-equivalent to 5051deg - assert_approx_equals: calc(container-progress(width of my-container-2, 0px, 1px) * 1deg) and 5051deg 0.001 serialize to the same thing in used values. expected 5051 +/- 0.001 but got 1 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-computed.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-computed.tentative.html deleted file mode 100644 index fa0fcd70..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-computed.tentative.html +++ /dev/null
@@ -1,84 +0,0 @@ -<!DOCTYPE html> -<meta name="viewport" content="width=device-width, initial-scale=1"> -<link rel="help" href="https://drafts.csswg.org/css-values-5/#container-progress-func"> -<link rel="author" title="sakhapov@chromium.org"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../support/numeric-testcommon.js"></script> -<div id="out-of-scope-container"></div> -<div id="extra-container"> - <div id="outer-container"> - <div id="inner-container"> - <div id=target></div> - </div> - </div> -</div> -<style> -:root { - font-size: 10px; - width: 100vw; - height: 100vh; -} -#out-of-scope-container { - container: my-container-3 / size; - width: 1px; - height: 1px; -} -#extra-container { - container: my-container-2 / size; - width: 5051px; - height: 1337px; -} -#outer-container { - container: my-container / size; - width: 322px; - height: 228px; -} -#inner-container { - container-type: size; - width: 228px; - height: 322px; -} -#target { - font-size: 10px; -} -</style> -<script> - -// innerWidth and innerHeight have lossy precision, see -// https://github.com/w3c/csswg-drafts/issues/5260. -let { width, height } = document.documentElement.getBoundingClientRect(); - -let extraWidth = 5051; -let extraHeight = 1337; -let innerWidth = 228; -let innerHeight = 322; -let outerWidth = 322; -let outerHeight = 228; - -// Identity tests -test_math_used('container-progress(height, 0px, 1px)', innerHeight, {type:'number'}); -test_math_used('container-progress(width of my-container, 0px, 1px)', outerWidth, {type:'number'}); - -// Nestings -test_math_used('container-progress(height, container-progress(height, 0px, 1px) * 1px, container-progress(height, 0px, 1px) * 1px)', '0', {type:'number'}); -test_math_used('container-progress(height, container-progress(height, 0px, 1px) * 0.5px, container-progress(height, 0px, 1px) * 1px)', '1', {type:'number'}); -test_math_used('container-progress(height, container-progress(width of my-container, 0px, 1px) * 1px, container-progress(height of my-container-2, 0px, 1px) * 1px)', (innerHeight - outerWidth) / (extraHeight - outerWidth), {type:'number'}); - -// General calculations -test_math_used('calc(container-progress(width, 0px, 50px) * 10px + 100px)', (innerWidth / 50 * 10 + 100) + 'px'); -test_math_used('calc(container-progress(height, 10px, sign(50px - 500em) * 10px))', (innerHeight - 10) / (-10 - 10), {type:'number'}); -test_math_used('calc(container-progress(width of my-container, 0px, 50px) * 10px + 100px)', (outerWidth / 50 * 10 + 100) + 'px'); -test_math_used('calc(container-progress(height of my-container, 10px, sign(50px - 500em) * 10px))', (outerHeight - 10) / (-10 - 10), {type:'number'}); - -// Fallback -test_math_used('container-progress(width of non-existing-container, 0px, 1px)', width, {type:'number', msg: 'container-progress() width fallback for non-existing container name'}); -test_math_used('container-progress(height of non-existing-container, 0px, 1px)', height, {type:'number', msg: 'container-progress() height fallback for non-existing container names'}); -test_math_used('container-progress(width of out-of-scope-container, 0px, 1px)', width, {type:'number', msg: 'container-progress() width fallback for out of scope container'}); -test_math_used('container-progress(height of out-of-scope-container, 0px, 1px)', height, {type:'number', msg: 'container-progress() height fallback for out of scope container'}); - -// Type checking -test_math_used('calc(container-progress(width, 0px, 1px) * 1px)', innerWidth + 'px'); -test_math_used('calc(container-progress(height of my-container, 0px, 1px) * 1s)', outerHeight + 's', {type:'time'}); -test_math_used('calc(container-progress(width of my-container-2, 0px, 1px) * 1deg)', extraWidth + 'deg', {type:'angle', approx:0.001}); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-invalid.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-invalid.tentative.html deleted file mode 100644 index 491abf50..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-invalid.tentative.html +++ /dev/null
@@ -1,56 +0,0 @@ -<!DOCTYPE html> -<link rel="help" href="https://drafts.csswg.org/css-values-5/#container-progress-func"> -<link rel="author" title="sakhapov@chromuim.org"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../support/parsing-testcommon.js"></script> -<script> -function test_invalid_number(value) { - test_invalid_value('opacity', value); -} -function test_invalid_length(value) { - // 'letter-spacing' accepts <length> only, not <percentage> or any mixes. - test_invalid_value('letter-spacing', value); -} - -// Syntax checking -test_invalid_number('container-progress()'); -test_invalid_number('container-progress( )'); -test_invalid_number('container-progress(,)'); -test_invalid_number('container-progress(1, )'); -test_invalid_number('container-progress(1)'); -test_invalid_number('container-progress(50%, 0)'); -test_invalid_number('container-progress(0, 1,)'); -test_invalid_number('container-progress(from,)'); -test_invalid_number('container-progress(from 1, 0)'); -test_invalid_number('container-progress(3 of 2, 1, 0)'); -test_invalid_number('container-progress(width of 2, 1, 0)'); -test_invalid_number('container-progress(from 1, 0 1)'); -test_invalid_number('container-progress(from 1 0)'); -test_invalid_number('container-progress(0,, 0)'); -test_invalid_number('container-progress(to,,,,)'); -test_invalid_number('container-progress(0,,, 10,, 200)'); -test_invalid_number('container-progress(0,,, 10,,, 200)'); -test_invalid_number('container-progress(0,, 10,, 200)'); -test_invalid_number('container-progress(0, 10, 200)'); -test_invalid_number('container-progress(0 from 10 to 200)'); - -// General tests -test_invalid_number('container-progress(height, 0, 8'); -test_invalid_number('container-progress(height container, 0, 8'); -test_invalid_number('container-progress(height of, 0, 8'); -test_invalid_number('container-progress(depth, 0px, 8px'); -test_invalid_number('container-progress(width of 10, 0px, 8px'); -test_invalid_number('container-progress(height of 10, 0px, 8px'); -test_invalid_number('container-progress(height of name, 0deg, 8deg'); -test_invalid_number('container-progress(height of name, 0, 8px'); -test_invalid_number('container-progress(10px, 0px, 8px'); -test_invalid_number('container-progress(depth of name, 0px, 8px'); -test_invalid_number('container-progress(width, 0deg, 8deg'); -test_invalid_number('container-progress(5, 0deg, 8deg'); -test_invalid_number('container-progress(5, 0%, 8deg'); -test_invalid_number('container-progress(height, 0%, sign(10px)'); -test_invalid_number('container-progress(5%, 0px, 10px'); -test_invalid_length('calc(1px * container-progress(10deg, 0, 10))'); -test_invalid_length('calc(1px * container-progress(10, 0px, 10))'); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-serialize.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-serialize.tentative-expected.txt deleted file mode 100644 index ca283481..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-serialize.tentative-expected.txt +++ /dev/null
@@ -1,11 +0,0 @@ -This is a testharness.js-based test. -[FAIL] 'calc(container-progress(width, 0px, 1px) / 1000)' as a computed value should serialize as '0.228'. - assert_equals: 'calc(container-progress(width, 0px, 1px) / 1000)' and '0.228' should serialize the same in computed values. expected "0.228" but got "0.001" -[FAIL] 'scale(calc(container-progress(width, 0px, 1px) / 1000))' as a computed value should serialize as 'matrix(0.228, 0, 0, 0.228, 0, 0)'. - assert_equals: 'scale(calc(container-progress(width, 0px, 1px) / 1000))' and 'matrix(0.228, 0, 0, 0.228, 0, 0)' should serialize the same in computed values. expected "matrix(0.228, 0, 0, 0.228, 0, 0)" but got "matrix(0.001, 0, 0, 0.001, 0, 0)" -[FAIL] 'calc(0.1 * container-progress(height of my-container, 0px, 10em))' as a computed value should serialize as '0.228'. - assert_equals: 'calc(0.1 * container-progress(height of my-container, 0px, 10em))' and '0.228' should serialize the same in computed values. expected "0.228" but got "0.1" -[FAIL] 'scale(calc(0.1 * container-progress(height of my-container, 0px, 10em)))' as a computed value should serialize as 'matrix(0.228, 0, 0, 0.228, 0, 0)'. - assert_equals: 'scale(calc(0.1 * container-progress(height of my-container, 0px, 10em)))' and 'matrix(0.228, 0, 0, 0.228, 0, 0)' should serialize the same in computed values. expected "matrix(0.228, 0, 0, 0.228, 0, 0)" but got "matrix(0.1, 0, 0, 0.1, 0, 0)" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-serialize.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-serialize.tentative.html deleted file mode 100644 index 18c76a35..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/container-progress-serialize.tentative.html +++ /dev/null
@@ -1,48 +0,0 @@ -<!DOCTYPE html> -<link rel="help" href="https://drafts.csswg.org/css-values-5/#container-progress-func"> -<link rel="author" title="sakhapov@chromuim.org"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../support/serialize-testcommon.js"></script> -<div id="outer-container"> - <div id="inner-container"> - <div id=target></div> - </div> -</div> -<style> -:root { - font-size: 10px; -} -#outer-container { - container: my-container / size; - width: 322px; - height: 228px; -} -#inner-container { - container-type: size; - width: 228px; - height: 322px; -} -#target { - font-size: 10px; -} -</style> -<script> -function test_serialization(t,s,c) { - test_specified_serialization('opacity', t, s); - test_specified_serialization('transform', `scale(${t})`, `scale(${s})`); - test_computed_serialization('opacity', t, c); - test_computed_serialization('transform', `scale(${t})`, `matrix(${c}, 0, 0, ${c}, 0, 0)`); -} - -test_serialization( - 'calc(container-progress(width, 0px, 1px) / 1000)', - 'calc(0.001 * container-progress(width, 0px, 1px))', - '0.228', -); -test_serialization( - 'calc(0.1 * container-progress(height of my-container, 0px, 10em))', - 'calc(0.1 * container-progress(height of my-container, 0px, 10em))', - '0.228', -); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-computed.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-computed.tentative-expected.txt deleted file mode 100644 index 1bb9184..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-computed.tentative-expected.txt +++ /dev/null
@@ -1,17 +0,0 @@ -This is a testharness.js-based test. -[FAIL] media-progress() identity check - assert_equals: media-progress(height, 0px, 1px) and 600 serialize to the same thing in used values. expected "600" but got "1" -[FAIL] media-progress(height, media-progress(height, 0px, 1px) * 1px, media-progress(height, 0px, 1px) * 1px) should be used-value-equivalent to 0 - assert_equals: media-progress(height, media-progress(height, 0px, 1px) * 1px, media-progress(height, 0px, 1px) * 1px) and 0 serialize to the same thing in used values. expected "0" but got "1" -[FAIL] media-progress() with length product - assert_equals: calc(media-progress(width, 0px, 50px) * 10px + 100px) and 260px serialize to the same thing in used values. expected "260px" but got "110px" -[FAIL] media-progress with complex, calculation - assert_equals: calc(media-progress(height, 10px, sign(50px - 500em) * 10px)) and -29.5 serialize to the same thing in used values. expected "-29.5" but got "0" -[FAIL] media-progress() as length - assert_equals: calc(media-progress(width, 0px, 1px) * 1px) and 800px serialize to the same thing in used values. expected "800px" but got "1px" -[FAIL] media-progress() as time - assert_equals: calc(media-progress(height, 0px, 1px) * 1s) and 600s serialize to the same thing in used values. expected "600s" but got "1s" -[FAIL] media-progress() as angle - assert_approx_equals: calc(media-progress(width, 0px, 1px) * 1deg) and 800deg 0.001 serialize to the same thing in used values. expected 800 +/- 0.001 but got 1 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-computed.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-computed.tentative.html deleted file mode 100644 index 4bea3f6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-computed.tentative.html +++ /dev/null
@@ -1,42 +0,0 @@ -<!DOCTYPE html> -<meta name="viewport" content="width=device-width, initial-scale=1"> -<link rel="help" href="https://drafts.csswg.org/css-values-5/#media-progress-func"> -<link rel="author" title="sakhapov@chromium.org"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../support/numeric-testcommon.js"></script> -<div id="target"></div> -<style> -#target { - font-size: 10px; -} -:root { - width: 100vw; - height: 100vh; -} -</style> -<script> -// innerWidth and innerHeight have lossy precision, see -// https://github.com/w3c/csswg-drafts/issues/5260. -let { width, height } = document.documentElement.getBoundingClientRect(); - -// Identity tests -// NOTE(emilio): We provide custom messages so that the test name doesn't -// depend on the viewport size (since in testharness.js files the viewport size is -// not guaranteed to be fixed, unlike in reftests). -test_math_used('media-progress(height, 0px, 1px)', height, { type:'number', 'msg': 'media-progress() identity check' }); - -// Nestings -test_math_used('media-progress(height, media-progress(height, 0px, 1px) * 1px, media-progress(height, 0px, 1px) * 1px)', '0', {type:'number'}); - -test_math_used('media-progress(height, media-progress(height, 0px, 1px) * 0.5px, media-progress(height, 0px, 1px) * 1px)', '1', {type:'number'}); - -// General calculations. -test_math_used('calc(media-progress(width, 0px, 50px) * 10px + 100px)', (width / 50 * 10 + 100) + 'px', { msg: 'media-progress() with length product' }); -test_math_used('calc(media-progress(height, 10px, sign(50px - 500em) * 10px))', (height - 10) / (-10 - 10), { type:'number', msg: 'media-progress with complex, calculation' }); - -// Type checking -test_math_used('calc(media-progress(width, 0px, 1px) * 1px)', width + 'px', { msg: 'media-progress() as length' }); -test_math_used('calc(media-progress(height, 0px, 1px) * 1s)', height + 's', { type:'time', msg: 'media-progress() as time' }); -test_math_used('calc(media-progress(width, 0px, 1px) * 1deg)', width + 'deg', { type:'angle', approx:0.001, msg: 'media-progress() as angle' }); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-invalid.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-invalid.tentative.html deleted file mode 100644 index 0aed208d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-invalid.tentative.html +++ /dev/null
@@ -1,44 +0,0 @@ -<!DOCTYPE html> -<link rel="help" href="https://drafts.csswg.org/css-values-5/#media-progress"> -<link rel="author" title="sakhapov@chromuim.org"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../support/parsing-testcommon.js"></script> -<script> -function test_invalid_number(value) { - test_invalid_value('opacity', value); -} -function test_invalid_length(value) { - // 'letter-spacing' accepts <length> only, not <percentage> or any mixes. - test_invalid_value('letter-spacing', value); -} - -// Syntax checking -test_invalid_number('media-progress()'); -test_invalid_number('media-progress( )'); -test_invalid_number('media-progress(,)'); -test_invalid_number('media-progress(1, )'); -test_invalid_number('media-progress(1)'); -test_invalid_number('media-progress(50%, 0)'); -test_invalid_number('media-progress(0, 1,)'); -test_invalid_number('media-progress(,,)'); -test_invalid_number('media-progress(, 1, 0)'); -test_invalid_number('media-progress(, 1, 0 1)'); -test_invalid_number('media-progress(, 1 0)'); -test_invalid_number('media-progress(0,, 0)'); -test_invalid_number('media-progress(,,,,)'); -test_invalid_number('media-progress(0, from, 10, to 200)'); -test_invalid_number('media-progress(0, from, 10, to, 200)'); -test_invalid_number('media-progress(0, 10, 200)'); - -// General tests -test_invalid_number('media-progress(height, 0, 8'); -test_invalid_number('media-progress(depth, 0px, 8px'); -test_invalid_number('media-progress(width, 0deg, 8deg'); -test_invalid_number('media-progress(5, 0deg, 8deg'); -test_invalid_number('media-progress(5, 0%, 8deg'); -test_invalid_number('media-progress(height, 0%, sign(10px)'); -test_invalid_number('media-progress(5%, 0px, 10px'); -test_invalid_length('calc(1px * media-progress(10deg, 0, 10))'); -test_invalid_length('calc(1px * media-progress(10, 0px, 10))'); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-serialize.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-serialize.tentative-expected.txt deleted file mode 100644 index 5bd23a6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-serialize.tentative-expected.txt +++ /dev/null
@@ -1,13 +0,0 @@ -This is a testharness.js-based test. -[FAIL] 'calc(0.1 * media-progress(height, 0px, 10em))' as a computed value should serialize as '0.6'. - assert_equals: 'calc(0.1 * media-progress(height, 0px, 10em))' and '0.6' should serialize the same in computed values. expected "0.6" but got "0.1" -[FAIL] 'scale(calc(0.1 * media-progress(height, 0px, 10em)))' as a computed value should serialize as 'matrix(0.6, 0, 0, 0.6, 0, 0)'. - assert_equals: 'scale(calc(0.1 * media-progress(height, 0px, 10em)))' and 'matrix(0.6, 0, 0, 0.6, 0, 0)' should serialize the same in computed values. expected "matrix(0.6, 0, 0, 0.6, 0, 0)" but got "matrix(0.1, 0, 0, 0.1, 0, 0)" -[FAIL] 'calc(media-progress(width, 0px, 100px) / 20)' as a computed value should serialize as '0.4'. - assert_equals: 'calc(media-progress(width, 0px, 100px) / 20)' and '0.4' should serialize the same in computed values. expected "0.4" but got "0.05" -[FAIL] 'scale(calc(media-progress(width, 0px, 100px) / 20))' as a computed value should serialize as 'matrix(0.4, 0, 0, 0.4, 0, 0)'. - assert_equals: 'scale(calc(media-progress(width, 0px, 100px) / 20))' and 'matrix(0.4, 0, 0, 0.4, 0, 0)' should serialize the same in computed values. expected "matrix(0.4, 0, 0, 0.4, 0, 0)" but got "matrix(0.05, 0, 0, 0.05, 0, 0)" -[FAIL] 'calc(1px * media-progress(height, abs(11em - 10rem), 110px / 10))' as a computed value should serialize as '590px'. - assert_equals: 'calc(1px * media-progress(height, abs(11em - 10rem), 110px / 10))' and '590px' should serialize the same in computed values. expected "590px" but got "1px" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-serialize.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-serialize.tentative.html deleted file mode 100644 index 2144ddc6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-values/media-progress-serialize.tentative.html +++ /dev/null
@@ -1,44 +0,0 @@ -<!DOCTYPE html> -<link rel="help" href="https://drafts.csswg.org/css-values-5/#progress"> -<link rel="author" title="sakhapov@chromuim.org"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../support/serialize-testcommon.js"></script> -<div id=target></div> -<style> -:root { - font-size: 10px; -} -#target { - font-size: 10px; -} -</style> -<script> -function test_serialization(t,s,c) { - test_specified_serialization('opacity', t, s); - test_specified_serialization('transform', `scale(${t})`, `scale(${s})`); - test_computed_serialization('opacity', t, c); - test_computed_serialization('transform', `scale(${t})`, `matrix(${c}, 0, 0, ${c}, 0, 0)`); -} - -test_serialization( - 'media-progress(width, 0px, 1000px)', - 'media-progress(width, 0px, 1000px)', - '0.8', -); -test_serialization( - 'calc(0.1 * media-progress(height, 0px, 10em))', - 'calc(0.1 * media-progress(height, 0px, 10em))', - '0.6', -); -test_serialization( - 'calc(media-progress(width, 0px, 100px) / 20)', - 'calc(0.05 * media-progress(width, 0px, 100px))', - '0.4' -); -test_computed_serialization( - 'width', - 'calc(1px * media-progress(height, abs(11em - 10rem), 110px / 10))', - '590px', -); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/progress-serialize.html b/third_party/blink/web_tests/external/wpt/css/css-values/progress-serialize.html index 49c3a3c..bb16280e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-values/progress-serialize.html +++ b/third_party/blink/web_tests/external/wpt/css/css-values/progress-serialize.html
@@ -43,6 +43,16 @@ 'calc(0.5)', '0.5' ); +test_serialization( + 'calc(0.5 * progress(200px, 0px, 100px))', + 'calc(0.5)', + '0.5' +); +test_serialization( + 'calc(0.5 * progress(-100px, 0px, 100px))', + 'calc(0)', + '0' +); test_specified_serialization( 'width', 'calc(50px * progress(100px, 0px, 100px))',
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/assumptions/non-local-ports.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/assumptions/non-local-ports.sub.window.js.ini index 36a803d..6bdc2a5b 100644 --- a/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/assumptions/non-local-ports.sub.window.js.ini +++ b/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/assumptions/non-local-ports.sub.window.js.ini
@@ -1,3 +1,5 @@ [non-local-ports.sub.window.html] [Fetch from http-public to local http fails.] - expected: FAIL + expected: + if product == "chrome": [PASS, FAIL] + if product != "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/TrustedTypePolicy-createXXX-expected.txt b/third_party/blink/web_tests/external/wpt/trusted-types/TrustedTypePolicy-createXXX-expected.txt deleted file mode 100644 index 45d110d..0000000 --- a/third_party/blink/web_tests/external/wpt/trusted-types/TrustedTypePolicy-createXXX-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -[FAIL] TestPolicyTrustedHTML4 (TrustedHTML: callback_to_capture_this(s) {\n return String(this);\n }) - assert_equals: expected "null" but got "undefined" -[FAIL] TestPolicyTrustedScript4 (TrustedScript: callback_to_capture_this(s) {\n return String(this);\n }) - assert_equals: expected "null" but got "undefined" -[FAIL] TestPolicyTrustedScriptURL4 (TrustedScriptURL: callback_to_capture_this(s) {\n return String(this);\n }) - assert_equals: expected "null" but got "undefined" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/TrustedTypePolicy-createXXX.html b/third_party/blink/web_tests/external/wpt/trusted-types/TrustedTypePolicy-createXXX.html index f51f51d..957a691 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/TrustedTypePolicy-createXXX.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/TrustedTypePolicy-createXXX.html
@@ -61,7 +61,7 @@ [ s => null, "" ], [ s => "well, " + s, "well, whatever" ], [ s => { throw new Error() }, Error ], - [ new WrappingClass().callback_to_capture_this, "null"], + [ new WrappingClass().callback_to_capture_this, "undefined"], [ s => { aGlobalVarForSideEffectTesting = s; return s }, "whatever" ], [ s => aGlobalVarForSideEffectTesting + s, "whateverwhatever" ], [ aGlobalFunction.bind(aGlobalObject), "well, whatever" ], @@ -73,7 +73,7 @@ [ s => null, "" ], [ s => s + "#duck", INPUTS.SCRIPTURL + "#duck" ], [ s => { throw new Error() }, Error ], - [ new WrappingClass().callback_to_capture_this, "null"], + [ new WrappingClass().callback_to_capture_this, "undefined"], [ s => s + "#" + aGlobalVarForSideEffectTesting, INPUTS.SCRIPTURL + "#global" ], [ anotherGlobalFunction.bind(aGlobalObject), INPUTS.SCRIPTURL + "#well," ],
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html index 28a0fc1..0bbb771c 100644 --- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html
@@ -1,186 +1,147 @@ <!DOCTYPE html> <html> <head> - <title> - Test Constructor: Convolver - </title> + <title>ConvolverNode Constructor</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - <script src="/webaudio/resources/audit-util.js"></script> - <script src="/webaudio/resources/audit.js"></script> - <script src="/webaudio/resources/audionodeoptions.js"></script> </head> <body> - <script id="layout-test-code"> - let context; + <script> + const context = new AudioContext(); - let audit = Audit.createTaskRunner(); + test(() => { + assert_throws_js( + TypeError, + () => new ConvolverNode(), + 'new ConvolverNode() without context must throw TypeError'); - audit.define('initialize', (task, should) => { - context = initializeContext(should); - task.done(); - }); + assert_throws_js( + TypeError, + () => new DynamicsCompressorNode(1), + 'new DynamicsCompressorNode(1) must throw TypeError'); - audit.define('invalid constructor', (task, should) => { - testInvalidConstructor(should, 'ConvolverNode', context); - task.done(); - }); + assert_throws_js( + TypeError, + () => new DynamicsCompressorNode(context, 42), + 'new DynamicsCompressorNode(context, 42) must throw TypeError'); + }, 'ConvolverNode: invalid constructor throws TypeError'); - audit.define('default constructor', (task, should) => { - let prefix = 'node0'; - let node = testDefaultConstructor(should, 'ConvolverNode', context, { - prefix: prefix, - numberOfInputs: 1, - numberOfOutputs: 1, - channelCount: 2, - channelCountMode: 'clamped-max', - channelInterpretation: 'speakers' - }); + test(() => { + const prefix = 'node0'; + const node = new ConvolverNode(context); - testDefaultAttributes( - should, node, prefix, - [{name: 'normalize', value: true}, {name: 'buffer', value: null}]); + assert_equals(node.numberOfInputs, 1, `${prefix}.numberOfInputs`); + assert_equals(node.numberOfOutputs, 1, `${prefix}.numberOfOutputs`); + assert_equals(node.channelCount, 2, `${prefix}.channelCount`); + assert_equals( + node.channelCountMode, 'clamped-max', `${prefix}.channelCountMode`); + assert_equals( + node.channelInterpretation, 'speakers', + `${prefix}.channelInterpretation`); - task.done(); - }); + assert_equals(node.normalize, true, `${prefix}.normalize`); + assert_equals(node.buffer, null, `${prefix}.buffer`); + }, 'ConvolverNode: default constructor and attributes'); - audit.define('test AudioNodeOptions', (task, should) => { - // Can't use testAudioNodeOptions because the constraints for this node - // are not supported there. - let node; + test(() => { + const attributeTests = [ + { + attribute: 'channelCount', + testOptions: [ + {value: 1}, + {value: 2}, + {value: 0, error: 'NotSupportedError'}, + {value: 3, error: 'NotSupportedError'}, + {value: 99, error: 'NotSupportedError'} + ] + }, + { + attribute: 'channelCountMode', + testOptions: [ + {value: 'clamped-max'}, + {value: 'explicit'}, + {value: 'max', error: 'NotSupportedError'}, + {value: 'foobar', error: TypeError} + ] + }, + { + attribute: 'channelInterpretation', + testOptions: [ + {value: 'speakers'}, + {value: 'discrete'}, + {value: 'foobar', error: TypeError} + ] + } + ]; - // An array of tests. - [{ - // Test that we can set the channel count to 1 or 2 and that other - // channel counts throw an error. - attribute: 'channelCount', - tests: [ - {value: 1}, {value: 2}, {value: 0, error: 'NotSupportedError'}, - {value: 3, error: 'NotSupportedError'}, - {value: 99, error: 'NotSupportedError'} - ] - }, - { - // Test channelCountMode. A mode of "max" is illegal, but others are - // ok. But also throw an error of unknown values. - attribute: 'channelCountMode', - tests: [ - {value: 'clamped-max'}, {value: 'explicit'}, - {value: 'max', error: 'NotSupportedError'}, - {value: 'foobar', error: TypeError} - ] - }, - { - // Test channelInterpretation can be set for valid values and an - // error is thrown for others. - attribute: 'channelInterpretation', - tests: [ - {value: 'speakers'}, {value: 'discrete'}, - {value: 'foobar', error: TypeError} - ] - }].forEach(entry => { - entry.tests.forEach(testItem => { - let options = {}; - options[entry.attribute] = testItem.value; + for (const attributeTest of attributeTests) { + for (const testOption of attributeTest.testOptions) { + const options = {}; + options[attributeTest.attribute] = testOption.value; - const testFunction = () => { - node = new ConvolverNode(context, options); - }; - const testDescription = - `new ConvolverNode(c, ${JSON.stringify(options)})`; + const desc = + `new ConvolverNode(context, ${JSON.stringify(options)})`; + const createNode = () => new ConvolverNode(context, options); - if (testItem.error) { - testItem.error === TypeError - ? should(testFunction, testDescription).throw(TypeError) - : should(testFunction, testDescription) - .throw(DOMException, 'NotSupportedError'); + if (testOption.error) { + if (typeof testOption.error === 'string') { + assert_throws_dom(testOption.error, createNode, desc); + } else { + assert_throws_js(testOption.error, createNode, desc); + } } else { - should(testFunction, testDescription).notThrow(); - should(node[entry.attribute], `node.${entry.attribute}`) - .beEqualTo(options[entry.attribute]); + const node = createNode(); + assert_equals( + node[attributeTest.attribute], testOption.value, + `node.${attributeTest.attribute} == ${testOption.value}`); } - }); - }); + } + } + }, 'ConvolverNode constructor: AudioNodeOptions are correctly handled'); - task.done(); - }); + test(() => { + const options = {buffer: null}; + const node = new ConvolverNode(context, options); + assert_equals(node.buffer, null, 'node1.buffer'); + }, 'ConvolverNode: nullable buffer'); - audit.define('nullable buffer', (task, should) => { - let node; - let options = {buffer: null}; + test(() => { + const invalidSampleRate = context.sampleRate / 2; + const buffer = context.createBuffer(1, 1, invalidSampleRate); + const options = {buffer}; - should( - () => { - node = new ConvolverNode(context, options); + assert_throws_dom( + 'NotSupportedError', () => { + new ConvolverNode(context, options); }, - 'node1 = new ConvolverNode(c, ' + JSON.stringify(options)) - .notThrow(); + `new ConvolverNode(context, { buffer: <invalid sample rate> })`); + }, 'ConvolverNode: illegal sample rate buffer throws NotSupportedError'); - should(node.buffer, 'node1.buffer').beEqualTo(null); + test(() => { + const buf = context.createBuffer(1, 1, context.sampleRate); + const options = {buffer: buf, disableNormalization: false}; - task.done(); - }); - audit.define('illegal sample-rate', (task, should) => { - let node; - let options = {buffer: context.createBuffer(1, 1, context.sampleRate / 2)}; + const node1 = new ConvolverNode(context, options); - should( - () => { - node = new ConvolverNode(context, options); - }, - 'node1 = new ConvolverNode(c, ' + JSON.stringify(options)) - .throw(DOMException, 'NotSupportedError'); - - task.done(); - }); - - audit.define('construct with options', (task, should) => { - let buf = context.createBuffer(1, 1, context.sampleRate); - let options = {buffer: buf, disableNormalization: false}; - - let message = - 'node = new ConvolverNode(c, ' + JSON.stringify(options) + ')'; - - let node; - should(() => { - node = new ConvolverNode(context, options); - }, message).notThrow(); - - should(node instanceof ConvolverNode, 'node1 instanceOf ConvolverNode') - .beEqualTo(true); - should(node.buffer === options.buffer, 'node1.buffer === <buf>') - .beEqualTo(true); - should(node.normalize, 'node1.normalize') - .beEqualTo(!options.disableNormalization); + assert_true(node1 instanceof ConvolverNode, + 'node1 instanceOf ConvolverNode'); + assert_equals(node1.buffer, options.buffer, 'node1.buffer === <buf>'); + assert_equals( + node1.normalize, !options.disableNormalization, 'node1.normalize'); options.buffer = null; options.disableNormalization = true; - - message = - 'node2 = new ConvolverNode(, ' + JSON.stringify(options) + ')'; - - should(() => { - node = new ConvolverNode(context, options); - }, message).notThrow(); - should(node.buffer, 'node2.buffer').beEqualTo(null); - should(node.normalize, 'node2.normalize') - .beEqualTo(!options.disableNormalization); + const node2 = new ConvolverNode(context, options); + assert_equals(node2.buffer, null, 'node2.buffer'); + assert_equals( + node2.normalize, !options.disableNormalization, 'node2.normalize'); options.disableNormalization = false; - message = 'node3 = new ConvolverNode(context, ' + - JSON.stringify(options) + ')'; - - should(() => { - node = new ConvolverNode(context, options); - }, message).notThrow(); - should(node.buffer, 'node3.buffer').beEqualTo(null); - should(node.normalize, 'node3.normalize') - .beEqualTo(!options.disableNormalization); - - task.done(); - }); - - audit.run(); + const node3 = new ConvolverNode(context, options); + assert_equals(node3.buffer, null, 'node3.buffer'); + assert_equals( + node3.normalize, !options.disableNormalization, 'node3.normalize'); + }, 'ConvolverNode: construct with buffer and normalization options'); </script> </body> </html>
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations-expected.txt index b09a82c6..d0676dd4 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations-expected.txt +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations-expected.txt
@@ -17,12 +17,13 @@ -> SoftNavigation event interactionTimestamp: 2 ts: 3 + firstContentfulPaint: 3 frame: id_0 navigationId: id_2 initialURL: http://127.0.0.1:8000/greeting mostRecentURL: http://127.0.0.1:8000/greeting -> LCP candidate event - ts: 4 + ts: 3 frame: id_0 navigationId: id_2 @@ -31,16 +32,16 @@ args: { context: { domModifications: number + firstContentfulPaint: number initialURL: string interactionTimestamp: number mostRecentURL: string + navigationId: string paintedArea: number repaintedArea: number softNavContextId: number - wasEmitted: boolean } frame: string - navigationId: string } cat: string id2: {
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations.js b/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations.js index 6cf6edb..7e4efc16 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/tracing/soft-navigations.js
@@ -91,7 +91,22 @@ // Stop tracing and log the SoftNavigation event. testRunner.log('\nStopping tracing and analyzing events.'); let unfilteredEvents = await tracingHelper.stopTracing(); - unfilteredEvents.sort((a, b) => a.ts - b.ts); + + // Filter + sort to the set of events we care about. + // Primary sort: by timestamp. + // Secondary sort: by event name, to maintain a consistent order for events with the same timestamp. + // Note: SoftNavigationEntry TRACE macro is called first, but the LCP entry is serialized first. + // Both use the same presentation time value to mark the timestamp, explicitly. + const supportedTraceEventNames = ["SoftNavigationHeuristics::EmitSoftNavigationEntry", "largestContentfulPaint::Candidate"]; + + let filteredEvents = unfilteredEvents + .filter(event => supportedTraceEventNames.includes(event.name)) + .sort((a, b) => { + if (a.ts !== b.ts) { + return a.ts - b.ts; + } + return supportedTraceEventNames.indexOf(a.name) - supportedTraceEventNames.indexOf(b.name); + }); // Maps timestamps (monotonically increasing double) to a counter. @@ -134,15 +149,18 @@ const ids = new IdMapper(); const softNavs = []; const lcpCandidates = []; - for (const event of unfilteredEvents) { + for (const event of filteredEvents) { if (event.name === 'SoftNavigationHeuristics::EmitSoftNavigationEntry') { testRunner.log('-> SoftNavigation event'); testRunner.log( ' interactionTimestamp: ' + timestamps.map(event.args.context.interactionTimestamp)); testRunner.log(' ts: ' + timestamps.map(event.ts)); + testRunner.log( + ' firstContentfulPaint: ' + + timestamps.map(event.args.context.firstContentfulPaint)); testRunner.log(' frame: ' + ids.map(event.args.frame)); - testRunner.log(' navigationId: ' + ids.map(event.args.navigationId)); + testRunner.log(' navigationId: ' + ids.map(event.args.context.navigationId)); testRunner.log(' initialURL: ' + event.args.context.initialURL) testRunner.log(' mostRecentURL: ' + event.args.context.mostRecentURL) softNavs.push(event);
diff --git a/third_party/blink/web_tests/platform/win11-arm64/virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/refresh-does-not-send-challenge.https-expected.txt b/third_party/blink/web_tests/platform/win11-arm64/virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/refresh-does-not-send-challenge.https-expected.txt new file mode 100644 index 0000000..1caace11 --- /dev/null +++ b/third_party/blink/web_tests/platform/win11-arm64/virtual/dbsc-enabled/external/wpt/device-bound-session-credentials/refresh-does-not-send-challenge.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +Harness Error. harness_status.status = 1 , harness_status.message = Timeout while running cleanup for test named "Refresh does not send back Sec-Session-Challenge". +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/virtual/soft-navigation-heuristics-pre-paint-attribution/README.md b/third_party/blink/web_tests/virtual/soft-navigation-heuristics-pre-paint-attribution/README.md new file mode 100644 index 0000000..5db4414e --- /dev/null +++ b/third_party/blink/web_tests/virtual/soft-navigation-heuristics-pre-paint-attribution/README.md
@@ -0,0 +1,5 @@ +Virtual test suite for testing external/wpt/soft-navigation-heuristics with +--enable-features=SoftNavigationDetectionPrePaintBasedAttribution + +This is an experimental mode for attributing DOM modifications to paints for +the purpose of recording SPA navigation metrics.
diff --git a/third_party/blink/web_tests/webaudio/AudioParam/audioparam-sampling.html b/third_party/blink/web_tests/webaudio/AudioParam/audioparam-sampling.html index bb06289..ddbff02 100644 --- a/third_party/blink/web_tests/webaudio/AudioParam/audioparam-sampling.html +++ b/third_party/blink/web_tests/webaudio/AudioParam/audioparam-sampling.html
@@ -1,96 +1,23 @@ <!DOCTYPE html> <html> <head> - <title> - Test Sampling of LinearRampToValueAtTime - </title> + <title>Test Linear-/Exponential-RampToValueAtTime</title> <script src="../../resources/testharness.js"></script> <script src="../../resources/testharnessreport.js"></script> <script src="../resources/audit-util.js"></script> - <script src="../resources/audit.js"></script> - <script src="../resources/audioparam-testing.js"></script> </head> <body> - <script id="layout-test-code"> - let sampleRate = 12800; - let context; - - let audit = Audit.createTaskRunner(); - - function runTest(should, config) { - // Create a short context with a constant signal source connected to a - // gain node that will be automated. - context = new OfflineAudioContext(1, 256, sampleRate); - - // Create a constant unit amplitude source. - let source = context.createBufferSource(); - let b = createConstantBuffer(context, 1, 1); - source.buffer = b; - source.loop = true; - - // Gain node that is to be automated. - let gain = context.createGain(); - gain.gain.value = 0; - gain.gain.setValueAtTime(config.startValue, config.startTime); - config.automationFunction(gain); - - source.connect(gain); - gain.connect(context.destination); - - source.start(); - - return context.startRendering().then(function(resultBuffer) { - // Check that the automation has the correct sampling. - let resultData = resultBuffer.getChannelData(0); - - // The automation has starts at config.startTime, so the frame just - // after this should have the automation applied. - let startFrame = Math.ceil(config.startTime * sampleRate); - - // The automation ends at config.endTime so the frame just before this - // should have the automation applied. - let endFrame = Math.floor(config.endTime * sampleRate); - - // Use the true automation to find the expected values. - let expectedStart = config.expectedFunction(startFrame / sampleRate); - let expectedEnd = config.expectedFunction(endFrame / sampleRate); - - should(resultData[startFrame], config.desc + ': Sample ' + startFrame) - .beCloseTo( - expectedStart, {threshold: config.startValueThreshold}); - should(resultData[endFrame], config.desc + ': Sample ' + endFrame) - .beCloseTo(expectedEnd, {threshold: config.endValueThreshold}); - }); - } - - function expectedLinear(t) { - let slope = - (this.endValue - this.startValue) / (this.endTime - this.startTime); - return this.startValue + slope * (t - this.startTime); - }; - - function expectedExponential(t) { - let ratio = this.endValue / this.startValue; - let exponent = (t - this.startTime) / (this.endTime - this.startTime); - return this.startValue * Math.pow(ratio, exponent); - }; - - function linearAutomation(g) { - g.gain.linearRampToValueAtTime(this.endValue, this.endTime); - } - - function exponentialAutomation(g) { - g.gain.exponentialRampToValueAtTime(this.endValue, this.endTime); - } + <script> + const sampleRate = 12800; // Basically want to test that if neither the start time nor end time is // on a frame boundary that we sample the automation curve correctly. The // start times and end times are mostly arbitrary, except that they cannot // be on a frame boundary. - let testConfigs = [ + const testConfigs = [ { desc: 'linearRamp', - startTime: .1 / sampleRate, + startTime: 0.1 / sampleRate, endTime: 128.1 / sampleRate, startValue: 1, endValue: 0, @@ -101,7 +28,7 @@ }, { desc: 'linearRamp:short', - startTime: .1 / sampleRate, + startTime: 0.1 / sampleRate, endTime: 5.1 / sampleRate, startValue: 1, endValue: 0, @@ -112,7 +39,7 @@ }, { desc: 'linearRamp:long', - startTime: .1 / sampleRate, + startTime: 0.1 / sampleRate, endTime: 200.1 / sampleRate, startValue: 1, endValue: 0, @@ -123,7 +50,7 @@ }, { desc: 'exponentialRamp', - startTime: .1 / sampleRate, + startTime: 0.1 / sampleRate, endTime: 128.1 / sampleRate, startValue: 1, endValue: 1e-5, @@ -134,7 +61,7 @@ }, { desc: 'exponentialRamp:short', - startTime: .1 / sampleRate, + startTime: 0.1 / sampleRate, endTime: 5.1 / sampleRate, startValue: 1, endValue: 1e-5, @@ -145,7 +72,7 @@ }, { desc: 'exponentialRamp:long', - startTime: .1 / sampleRate, + startTime: 0.1 / sampleRate, endTime: 200.1 / sampleRate, startValue: 1, endValue: 1e-5, @@ -156,20 +83,79 @@ }, ]; - function createTaskFunction(config) { - return (task, should) => { - runTest(should, config).then(() => task.done()); - }; + function expectedLinear(t) { + const slope = (this.endValue - this.startValue) / + (this.endTime - this.startTime); + return this.startValue + slope * (t - this.startTime); } - // Create all of the tasks from the test configs - for (let k = 0; k < testConfigs.length; ++k) { - let config = testConfigs[k]; - let taskName = config.desc + ':task' + k; - audit.define(taskName, createTaskFunction(config)); + function expectedExponential(t) { + const ratio = this.endValue / this.startValue; + const exponent = (t - this.startTime) / + (this.endTime - this.startTime); + return this.startValue * Math.pow(ratio, exponent); } - audit.run(); + function linearAutomation(gainNode) { + gainNode.gain.linearRampToValueAtTime(this.endValue, this.endTime); + } + + function exponentialAutomation(gainNode) { + gainNode.gain.exponentialRampToValueAtTime(this.endValue, this.endTime); + } + + function runTest(config) { + // Create a short context with a constant signal source connected to a + // gain node that will be automated. + const context = new OfflineAudioContext(1, 256, sampleRate); + // Create a constant unit amplitude source. + const source = new AudioBufferSourceNode(context); + const buffer = createConstantBuffer(context, 1, 1); + source.buffer = buffer; + source.loop = true; + + // Gain node that is to be automated. + const gain = context.createGain(); + gain.gain.value = 0; + gain.gain.setValueAtTime(config.startValue, config.startTime); + config.automationFunction.call(config, gain); + + source.connect(gain); + gain.connect(context.destination); + source.start(); + + return context.startRendering().then(resultBuffer => { + // Check that the automation has the correct sampling. + const resultData = resultBuffer.getChannelData(0); + + // The automation has starts at config.startTime, so the frame just + // after this should have the automation applied. + const startFrame = Math.ceil(config.startTime * sampleRate); + + // The automation ends at config.endTime so the frame just before this + // should have the automation applied. + const endFrame = Math.floor(config.endTime * sampleRate); + + // Use the true automation to find the expected values. + const expectedStart = config.expectedFunction.call( + config, startFrame / sampleRate); + const expectedEnd = config.expectedFunction.call( + config, endFrame / sampleRate); + + assert_approx_equals( + resultData[startFrame], expectedStart, config.startValueThreshold, + `${config.desc}: startFrame value`); + assert_approx_equals( + resultData[endFrame], expectedEnd, config.endValueThreshold, + `${config.desc}: endFrame value`); + }); + } + + for (const config of testConfigs) { + promise_test( + () => runTest(config), + `${config.desc} Test`); + } </script> </body> </html>
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index f0f6806..5140cd6 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -9698,6 +9698,8 @@ method constructor interface SoftNavigationEntry : PerformanceEntry attribute @@toStringTag + getter paintTime + getter presentationTime method constructor interface SourceBuffer : EventTarget attribute @@toStringTag
diff --git a/third_party/compiler-rt/src b/third_party/compiler-rt/src index 3b1c4b0e..b60a6cc 160000 --- a/third_party/compiler-rt/src +++ b/third_party/compiler-rt/src
@@ -1 +1 @@ -Subproject commit 3b1c4b0e4fee85b10a2272117315d520c607a328 +Subproject commit b60a6cce655fa5ac36110d02f426640debad969b
diff --git a/third_party/dawn b/third_party/dawn index 56724d2..d03fe7e 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit 56724d23899220ea9a775b4ab4458e6ebc53ad52 +Subproject commit d03fe7eda12dfce1578bf69da2814f89fd78c1e9
diff --git a/third_party/depot_tools b/third_party/depot_tools index 9a17210..ae91718 160000 --- a/third_party/depot_tools +++ b/third_party/depot_tools
@@ -1 +1 @@ -Subproject commit 9a172103022289fcd1374c4d12d0192204343f59 +Subproject commit ae917185501cda874f12f3e1d870de8505b0807c
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index b019617..ea58b67 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit b0196172485ea5c6606d909d19a4e066ee32c004 +Subproject commit ea58b6707370f3b440b362fe178e7f6cd4a9170b
diff --git a/third_party/vulkan-deps b/third_party/vulkan-deps index 49cfa53..317a1e47 160000 --- a/third_party/vulkan-deps +++ b/third_party/vulkan-deps
@@ -1 +1 @@ -Subproject commit 49cfa5309d365d4ea40bd92b399595c30d8dc96e +Subproject commit 317a1e4780ef130e7b92fc287cf390ac2aff0c22
diff --git a/third_party/vulkan-validation-layers/src b/third_party/vulkan-validation-layers/src index d9c0a0b..89c6a9b 160000 --- a/third_party/vulkan-validation-layers/src +++ b/third_party/vulkan-validation-layers/src
@@ -1 +1 @@ -Subproject commit d9c0a0baa0d2c7357d464d73a6fcee76f970c39b +Subproject commit 89c6a9b6500e2e0bda127113bbfe1d70f1ab2d20
diff --git a/tools/android/checkstyle/chromium-style-5.0.xml b/tools/android/checkstyle/chromium-style-5.0.xml index 763a27a3..6feecee 100644 --- a/tools/android/checkstyle/chromium-style-5.0.xml +++ b/tools/android/checkstyle/chromium-style-5.0.xml
@@ -267,6 +267,13 @@ <property name="ignoreComments" value="true"/> <property name="message" value="Elevation based surface color is being deprecated. Use tonal color roles instead. See crbug.com/348667900."/> </module> + <module name="RegexpSinglelineJava"> + <property name="id" value="AndroidContextMenu"/> + <property name="severity" value="warning"/> + <property name="format" value="import\ android\.view\.ContextMenu"/> + <property name="ignoreComments" value="true"/> + <property name="message" value="Android context menu has been proven not compatible well with theme changes. Use Chrome's ListMenu instead. See crbug.com/339864862."/> + </module> </module> <module name="RegexpMultiline"> <property name="id" value="VisibleForTestingForTesting"/>
diff --git a/tools/metrics/histograms/metadata/compositing/histograms.xml b/tools/metrics/histograms/metadata/compositing/histograms.xml index 6e24e4e..cf24a15 100644 --- a/tools/metrics/histograms/metadata/compositing/histograms.xml +++ b/tools/metrics/histograms/metadata/compositing/histograms.xml
@@ -823,27 +823,37 @@ </summary> </histogram> -<histogram name="Compositing.TileManager.EnoughMemory.{ProcessType}" - enum="Boolean" expires_after="2024-06-30"> +<histogram name="Compositing.TileManager.EnoughMemory.Browser" enum="Boolean" + expires_after="2026-06-30"> <owner>lizeb@chromium.org</owner> <owner>chrome-gpu-memory@google.com</owner> <summary> When memory is assigned to tiles, whether there was enough memory for all - required tiles. + required tiles. This is collected when assigning memory for browser process + only. </summary> - <token key="ProcessType" variants="TileManagerProcessType"/> </histogram> -<histogram - name="Compositing.TileManager.LimitWhenNotEnoughMemory.{ProcessType}" - units="MB" expires_after="2024-06-30"> +<histogram name="Compositing.TileManager.LimitWhenNotEnoughMemory.Browser" + units="MB" expires_after="2026-06-30"> <owner>lizeb@chromium.org</owner> <owner>chrome-gpu-memory@google.com</owner> <summary> When memory is assigned to tiles and there is not enough memory, the memory - limit that the tile assignment was breaching. + limit that the tile assignment was breaching. This is collected when + assigning memory for browser process only. </summary> - <token key="ProcessType" variants="TileManagerProcessType"/> +</histogram> + +<histogram name="Compositing.TileManager.MemoryUsageWhenEnoughMemory" + units="MB" expires_after="2026-04-30"> + <owner>lizeb@chromium.org</owner> + <owner>chrome-gpu-memory@google.com</owner> + <summary> + When memory is assigned to tiles, whether it succeeded or not, the current + total memory usage in MB. This is collected when assigning memory for + browser process only. + </summary> </histogram> <histogram name="Compositing.TileManager.RasterTasksDuration"
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index faac5d59..eddfc1e6 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,24 +1,24 @@ { "trace_processor_shell": { "linux_arm64": { - "hash": "e5672f3bcbbe462881556ec1faabdfcfefaed298", - "full_remote_path": "perfetto-luci-artifacts/3940ed807f48affbec08603c79e957d10e4a6ef4/linux-arm64/trace_processor_shell" + "hash": "e021f6575ec5dc77d77b3780270f2c592bf43adb", + "full_remote_path": "perfetto-luci-artifacts/cca1748cb16b9dc0cac21515813c3855a983917d/linux-arm64/trace_processor_shell" }, "win": { "hash": "8ed2c403121faa058244678ef38e20a265851091", "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/cca1748cb16b9dc0cac21515813c3855a983917d/trace_processor_shell.exe" }, "linux_arm": { - "hash": "be8386e1db86d436e39624fdbcff5b6586bedfdd", - "full_remote_path": "perfetto-luci-artifacts/3940ed807f48affbec08603c79e957d10e4a6ef4/linux-arm/trace_processor_shell" + "hash": "da83ac6def03d2e2a0eced37271a34bb4c33d046", + "full_remote_path": "perfetto-luci-artifacts/cca1748cb16b9dc0cac21515813c3855a983917d/linux-arm/trace_processor_shell" }, "mac": { "hash": "f5d83eca972747f7c3db9f35c07ed57902418e8c", "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/881ad50c05049ca13d4b34e4f92f4167de5ac52a/trace_processor_shell" }, "mac_arm64": { - "hash": "3156587f0feafafad4fbcb9428a6206cdc561bb6", - "full_remote_path": "perfetto-luci-artifacts/v50.1/mac-arm64/trace_processor_shell" + "hash": "101268b449e75f13cc33a020af146dd9e0bb10d8", + "full_remote_path": "perfetto-luci-artifacts/cca1748cb16b9dc0cac21515813c3855a983917d/mac-arm64/trace_processor_shell" }, "linux": { "hash": "da59658d12c39e37a3ab55d5dfe1f8dd52f5d1e0",
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index 4cce051d..3dc44a2 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -416,8 +416,6 @@ <item id="help_me_write_model_execution" added_in_milestone="121" content_hash_code="069a7ee5" os_list="linux,windows,chromeos,android" file_path="components/optimization_guide/core/model_execution/model_execution_fetcher.cc" /> <item id="controlled_frame_content_scripts_download" added_in_milestone="122" content_hash_code="06d098d1" os_list="linux,windows,chromeos" file_path="extensions/browser/guest_view/web_view/controlled_frame_embedder_url_fetcher.cc" /> <item id="essential_search_manager" added_in_milestone="122" content_hash_code="0410c589" os_list="chromeos" file_path="chrome/browser/ash/app_list/search/essential_search/socs_cookie_fetcher.cc" /> - <item id="pepper_tcp_socket" added_in_milestone="123" content_hash_code="01a37664" os_list="chromeos" file_path="content/browser/renderer_host/pepper/pepper_socket_utils.cc" /> - <item id="pepper_udp_socket" added_in_milestone="123" content_hash_code="006ee842" os_list="chromeos" file_path="content/browser/renderer_host/pepper/pepper_socket_utils.cc" /> <item id="app_install_service_web_app_installer" added_in_milestone="123" content_hash_code="0790ca69" os_list="chromeos" file_path="chrome/browser/apps/app_service/app_install/web_app_installer.cc" /> <item id="remoting_corp_session_authz_generate_host_token" added_in_milestone="123" content_hash_code="045bc7d9" os_list="linux,windows,android,chromeos" file_path="remoting/base/corp_session_authz_service_client.cc" /> <item id="remoting_corp_session_authz_verify_session_token" added_in_milestone="123" content_hash_code="04127f42" os_list="linux,windows,android,chromeos" file_path="remoting/base/corp_session_authz_service_client.cc" /> @@ -515,4 +513,5 @@ <item id="trusted_vault_cert_request" added_in_milestone="139" content_hash_code="04ea4a98" os_list="linux,windows,chromeos" file_path="components/trusted_vault/recovery_key_store_connection_impl.cc" /> <item id="keepalive_fetch_retry" added_in_milestone="138" content_hash_code="023a2a10" os_list="linux,windows,android,chromeos" file_path="content/browser/loader/keep_alive_url_loader.cc" /> <item id="iwa_dev_tools_installation_web_bundle" added_in_milestone="139" type="partial" second_id="iwa_bundle_downloader" content_hash_code="00669d7d" os_list="linux,windows,chromeos" semantics_fields="1,2,3" policy_fields="3,5" file_path="chrome/browser/web_applications/isolated_web_apps/isolated_web_app_installation_manager.cc" /> + <item id="ntp_composebox_query_controller" added_in_milestone="139" content_hash_code="06439b42" os_list="linux,windows,chromeos,android" file_path="components/omnibox/composebox/composebox_query_controller.cc" /> </annotations>
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml index 727cfeda..17b45c14 100644 --- a/tools/traffic_annotation/summary/grouping.xml +++ b/tools/traffic_annotation/summary/grouping.xml
@@ -289,8 +289,6 @@ <annotation id="help_me_write_model_execution"/> <annotation id="controlled_frame_content_scripts_download"/> <annotation id="essential_search_manager"/> - <annotation id="pepper_tcp_socket"/> - <annotation id="pepper_udp_socket"/> <annotation id="app_install_service_web_app_installer"/> <annotation id="remoting_corp_session_authz_generate_host_token"/> <annotation id="remoting_corp_session_authz_verify_session_token"/> @@ -381,6 +379,7 @@ <annotation id="certificate_verifier_2qwac_loader"/> <annotation id="trusted_vault_cert_request"/> <annotation id="keepalive_fetch_retry"/> + <annotation id="ntp_composebox_query_controller"/> </sender> </group> <group name="Admin Features" hidden="true">
diff --git a/ui/gl/direct_composition_support.h b/ui/gl/direct_composition_support.h index afc2b71..782d77ba 100644 --- a/ui/gl/direct_composition_support.h +++ b/ui/gl/direct_composition_support.h
@@ -133,9 +133,14 @@ // decoder textures are used or not. bool disable_decode_swap_chain = false; - // On Intel GPUs where YUV overlays are supported, BGRA8 overlays are - // supported as well but IDXGIOutput3::CheckOverlaySupport() returns - // unsupported. So allow manually enabling BGRA8 overlay support. + // This is a workaround for a long-known issue where older Intel GPU drivers + // fail to report BGRA8 overlay support on Windows, while Windows D3D API + // before 10.0.26100.4061 fails to deal with RGB pixel format in + // IDXGIOutput3::CheckOverlaySupport(). This also means that both newer + // Windows versions (10.0.26100.4061 and later) and newer Intel GPU drivers + // (32.0.101.6314 and later) are required to correctly report BGRA8 overlay + // support. Otherwise, this workaround is applied to manually allow BGRA8 + // overlays to be used when YUV overlays are supported on Intel GPUs. bool enable_bgra8_overlays_with_yuv_overlay_support = false; // Forces to enable NV12 overlay support regardless of the query results from
diff --git a/v8 b/v8 index c59f2d9..c319a15e 160000 --- a/v8 +++ b/v8
@@ -1 +1 @@ -Subproject commit c59f2d912981432362352d6ae5620726d41a85cb +Subproject commit c319a15e697a26b8b2b31e2b8a3733ce82c6bb86