diff --git a/DEPS b/DEPS index 2e29d86..d98d459 100644 --- a/DEPS +++ b/DEPS
@@ -284,11 +284,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': '60e67b93909a1c858305b27111d9988f94fff0f8', + 'v8_revision': 'fc91f65bbd2f5dfa85e65a007ec01a71a10a45b4', # 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': '0a207b65f60fbfd3013df54cb3b9e650d94af48e', + 'angle_revision': '4b0f6f0649d2ed2c214cc093d6a86d4ce0009e52', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -356,7 +356,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. - 'crossbench_revision': '0d3512c78fe49298db80e80cf0d1d608ae13dd15', + 'crossbench_revision': '19819d8c80ab6eefff2a3cf1d5b732b4be454856', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -364,7 +364,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling fuzztest # and whatever else without interference from each other. - 'fuzztest_revision': 'c99c121225fcc175bdc084d83c30f3c806b75afd', + 'fuzztest_revision': '87fffb7eaf974e55ec736f0100dcd9bdf3f91469', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling domato # and whatever else without interference from each other. @@ -372,7 +372,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': '40f57f86c54cd8b5c06878c0a7301bce9d4b0dbf', + 'devtools_frontend_revision': '1ea78154d90c2b0a33fd7a72fc97beccc6d1c40d', # 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. @@ -396,7 +396,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': '46d1e23d9ee5fdf648359b7b3e3f9caa5eafac68', + 'dawn_revision': '041b072241d75850d18f441b53bacf2d317e9818', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -500,7 +500,7 @@ # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '74dd760826063f15ce4d373b31bc34d1c65e41c2', + 'libcxx_revision': '2e25154d49c29fa9aa42c30ad4a027bd30123434', # GN CIPD package version. 'gn_version': 'git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd', @@ -707,7 +707,7 @@ 'packages': [ { 'package': 'chrome_internal/third_party/google3/data_sharing_sdk', - 'version': 'auu6Zggy4Soot7tUJT28qMhahwQ0zuXEmd1b3EGcpeEC', + 'version': 't4zrKEZELPq_k-Rpzny0GLUOdcv_03R5n2pC9zT22c4C', }, ], 'condition': 'checkout_src_internal and non_git_source', @@ -1439,7 +1439,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - '2a16411ff60d055cb1def36b935da824fd6ce71a', + 'bbbe2cd7740a857fb0ba49ec0df3bc6131a604e8', 'condition': 'checkout_android and checkout_src_internal', }, @@ -1904,7 +1904,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'a9fdaf06401860211c818d7000208547d9de4b1b', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'bfc50e6c9b571af42db951af20e9d9d983a94ecc', 'condition': 'checkout_chromeos', }, @@ -2436,7 +2436,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'c6ea87b5b19e6b2798f290b000bb3609c9018c81', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '0b3d3cc75b911d55cb138252231d2c929e312dba', 'src/base/tracing/test/data': { 'bucket': 'perfetto', @@ -2618,7 +2618,7 @@ 'packages': [ { 'package': 'chromium/third_party/r8', - 'version': 'xbInvmbYpySCc5-qVBjQg8Ns8FvdvEyvQFadpxKY1-sC', + 'version': 'CqDcMSHb2wxXTFpn_KVnKoQSUN1HXWOqix19Kgv-oAYC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2806,7 +2806,7 @@ Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'd8135eb75b7ed9544c6b41732c8fd5640514d565', + Var('webrtc_git') + '/src.git' + '@' + '83861d5649c83d1df82fafa622f469ac272f21aa', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -2943,7 +2943,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': '4HRm2CyrffNynRe6Npgq_MCDvhEKIbqONij8o2O-nRgC', + 'version': 'nm_08U9PHR0_gpJbZOQmnFL58IFupLkRncgwKoB406YC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2954,7 +2954,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'HJ2OHUWpb1MRP3k3HJHwkTmMlE3_tjoaGsIqf7ZHpQoC', + 'version': 'BbaCM5c3dP1ztTh-QDEKJ4tUylIZLfCF6j47uRyN8JEC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -4604,7 +4604,7 @@ 'src/components/test/data/autofill/heuristics-json/internal': { 'url': Var('chrome_git') + '/chrome/test/autofill/structured_forms.git' + '@' + - 'd00d0a2480ff55cda6d6cc41bcecc615328860a7', + '868d3dca11f4ecca239de85e60f46de0b10ad106', 'condition': 'checkout_chromium_autofill_test_dependencies', }, @@ -4634,7 +4634,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - '728f2050ecc1547009c1ec095855a100e6554117', + '7c7a00774ea89513f74dcb2f89bf976d889ffb87', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 7d45aa77..1379ebb 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -687,15 +687,6 @@ (r'^third_party/leveldatabase/.*\.(cc|h)$', ), ), BanRule( - 'RunLoop::QuitCurrent', - ( - 'Please migrate away from RunLoop::QuitCurrent*() methods. Use member', - 'methods of a specific RunLoop instance instead.', - ), - False, - (), - ), - BanRule( 'base::ScopedMockTimeMessageLoopTaskRunner', ( 'ScopedMockTimeMessageLoopTaskRunner is deprecated. Prefer', @@ -708,6 +699,15 @@ (), ), BanRule( + '\bstd::aligned_(storage|union)\b', + ( + 'std::aligned_storage and std::aligned_union are deprecated in', + 'C++23. Use an aligned char array instead.' + ), + True, + (), + ), + BanRule( 'std::regex', ( 'Using std::regex adds unnecessary binary size to Chrome. Please use', @@ -1431,6 +1431,13 @@ 'in_out_out_result', 'min_max_result', 'in_found_result', + # From https://en.cppreference.com/w/cpp/header/functional + 'equal_to', + 'not_equal_to', + 'greater', + 'less', + 'greater_equal', + 'less_equal', # From https://en.cppreference.com/w/cpp/iterator 'advance', 'distance',
diff --git a/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc b/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc index 35ce6cc..b337a5b 100644 --- a/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc
@@ -45,6 +45,7 @@ page_load_metrics::PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext( content::BrowserContext* browser_context) override; + bool IsIncognito(content::WebContents* web_contents) override; protected: // page_load_metrics::PageLoadMetricsEmbedderBase: @@ -98,6 +99,11 @@ browser_context); } +bool PageLoadMetricsEmbedder::IsIncognito(content::WebContents* web_contents) { + // Android web view doesn't have Incognito mode. + return false; +} + } // namespace void InitializePageLoadMetricsForWebContents(
diff --git a/ash/shelf/shelf_app_button.cc b/ash/shelf/shelf_app_button.cc index 45410d92..7bc3dc1 100644 --- a/ash/shelf/shelf_app_button.cc +++ b/ash/shelf/shelf_app_button.cc
@@ -501,13 +501,15 @@ } void ShelfAppButton::SetShadowedImage(const gfx::ImageSkia& image) { - icon_view_->SetImage(gfx::ImageSkiaOperations::CreateImageWithDropShadow( - image, icon_shadows_)); + icon_view_->SetImage(ui::ImageModel::FromImageSkia( + gfx::ImageSkiaOperations::CreateImageWithDropShadow(image, + icon_shadows_))); } void ShelfAppButton::UpdateMainAndMaybeHostBadgeIconImage() { if (is_promise_app_ || progress_indicator_ || has_host_badge_) { - icon_view_->SetImage(GetIconImage(icon_scale_)); + icon_view_->SetImage( + ui::ImageModel::FromImageSkia(GetIconImage(icon_scale_))); return; }
diff --git a/ash/shelf/shelf_shutdown_confirmation_bubble.cc b/ash/shelf/shelf_shutdown_confirmation_bubble.cc index dcfe24ac..c75def2 100644 --- a/ash/shelf/shelf_shutdown_confirmation_bubble.cc +++ b/ash/shelf/shelf_shutdown_confirmation_bubble.cc
@@ -177,8 +177,8 @@ SkColor icon_color = color_provider->GetContentLayerColor( AshColorProvider::ContentLayerType::kButtonIconColor); - icon_->SetImage( - gfx::CreateVectorIcon(vector_icons::kWarningOutlineIcon, icon_color)); + icon_->SetImage(ui::ImageModel::FromVectorIcon( + vector_icons::kWarningOutlineIcon, icon_color)); SkColor label_color = color_provider->GetContentLayerColor( AshColorProvider::ContentLayerType::kTextColorPrimary);
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index 15c02fc..04aea64 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Titel</translation> <translation id="40062176907008878">Handskrif</translation> <translation id="4011112806063830608">Moenie Steur Nie is aan.</translation> -<translation id="4015144849380506405">Onderbreek/hervat muissleutels wanneer dit aan is</translation> <translation id="4017989525502048489">Laserwyser</translation> <translation id="401993194061514265">Merker is nie beskikbaar nie. Maak Screencast weer oop.</translation> <translation id="4021716437419160885">Rollees af</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera is geglip na hoek onder links. Konflik met stelseloppervlak.</translation> <translation id="6605415194043280389">Fokus is aan</translation> -<translation id="660846213831377756">Muissleutels</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, seinsterkte <ph name="SIGNAL_STRENGTH" />, deur jou administrateur bestuur</translation> <translation id="6612802754306526077">Skermopnamemodus gekies</translation> <translation id="6612889377159412215">subtaak</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 748253c7..e06ae30d 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ርዕስ</translation> <translation id="40062176907008878">የእጅ ጽሁፍ</translation> <translation id="4011112806063830608">አትረብሽ በርቷል።</translation> -<translation id="4015144849380506405">በሚበራበት ጊዜ የመዳፊት ቁልፎችን ባሉበት ያቁሙ/ከቆሙበት ይቀጥሉ</translation> <translation id="4017989525502048489">የሌዘር ጨረር</translation> <translation id="401993194061514265">ምልክት ማድረጊያ የለም። ማያገጽ መቅርጽን ድጋሚ ይክፈቱ።</translation> <translation id="4021716437419160885">ወደ ታች ይሸብልሉ</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />፣ <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">ካሜራ ታችኛው ግራ ጥግ ላይ ገጥሟል። ከስርዓት ወለል ጋር ግጭት።</translation> <translation id="6605415194043280389">ትኩረት በርቷል</translation> -<translation id="660846213831377756">የመዳፊት ቁልፎች</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />፣ የሲግናል ጥንካሬ <ph name="SIGNAL_STRENGTH" />፣ በአስተዳዳሪዎ የሚቀናበር</translation> <translation id="6612802754306526077">የማያ ገፅ ቀረጻ ሁነታ ተመርጧል</translation> <translation id="6612889377159412215">ንዑስ ተግባር</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index d3d1280..1065f5b 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -871,7 +871,6 @@ <translation id="4002066346123236978">العنوان</translation> <translation id="40062176907008878">الكتابة بخط اليد</translation> <translation id="4011112806063830608">ميزة "عدم الإزعاج" مفعَّلة.</translation> -<translation id="4015144849380506405">إيقاف مفاتيح الماوس مؤقتًا أو استئناف استخدامها في حال تفعيلها</translation> <translation id="4017989525502048489">مؤشر الليزر</translation> <translation id="401993194061514265">أداة التحديد غير متاحة. يُرجى إعادة تشغيل تطبيق Screencast.</translation> <translation id="4021716437419160885">التمرير لأسفل</translation> @@ -1676,7 +1675,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />، <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">تم توجيه الكاميرا إلى الزاوية السفلية اليسرى. هناك تعارض مع مساحة عرض نظام آخر.</translation> <translation id="6605415194043280389">"وضع التركيز" مفعَّل</translation> -<translation id="660846213831377756">مفاتيح الماوس</translation> <translation id="661203523074512333">حالة الأمان <ph name="SECURITY_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />، يديرها المشرف</translation> <translation id="6612802754306526077">تم اختيار وضع تسجيل الشاشة.</translation> <translation id="6612889377159412215">مهمة فرعية</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index e6d4c62..ece14be 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">শিৰোনাম</translation> <translation id="40062176907008878">হস্তলিপি</translation> <translation id="4011112806063830608">অসুবিধা নিদিব অন আছে।</translation> -<translation id="4015144849380506405">এইটো অন থাকিলে মাউছ কীসমূহ পজ কৰক/পুনৰ আৰম্ভ কৰক</translation> <translation id="4017989525502048489">লেজাৰ প্ৰিণ্টাৰ</translation> <translation id="401993194061514265">মাৰ্কাৰ উপলব্ধ নহয়। স্ক্ৰীন কাষ্ট কৰাৰ সুবিধাটো পুনৰ খোলক।</translation> <translation id="4021716437419160885">তললৈ স্ক্ৰল কৰক</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">কেমেৰা তলৰ বাওঁফালৰ কোণলৈ স্নেপ কৰা হৈছে। ছিষ্টেম ছাৰ্ফেচৰ সৈতে সংঘাত।</translation> <translation id="6605415194043280389">ফ’কাছ অন আছে</translation> -<translation id="660846213831377756">মাউছ কীসমূহ</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ছিগনেলৰ ক্ষমতা <ph name="SIGNAL_STRENGTH" />, আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে</translation> <translation id="6612802754306526077">স্ক্ৰীন ৰেকৰ্ডিঙৰ ম'ডটো বাছনি কৰা হ'ল</translation> <translation id="6612889377159412215">সহায়ক কাৰ্য</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb index b633358..d94a7ef 100644 --- a/ash/strings/ash_strings_az.xtb +++ b/ash/strings/ash_strings_az.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Başlıq</translation> <translation id="40062176907008878">Əlyazma</translation> <translation id="4011112806063830608">"Narahat etməyin" aktivdir.</translation> -<translation id="4015144849380506405">Yanılı olduqda maus düymələrini durdurun/bərpa edin</translation> <translation id="4017989525502048489">Lazer göstəricisi</translation> <translation id="401993194061514265">Marker əlçatan deyil. Ekran yayımını yenidən açın.</translation> <translation id="4021716437419160885">Aşağı sürüşdürün</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera aşağı sol küncə çəkildi. Sistem səthi ilə ziddiyyət yarandı.</translation> <translation id="6605415194043280389">Fokus yanılıdır</translation> -<translation id="660846213831377756">Maus düymələri</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Siqnal Gücü <ph name="SIGNAL_STRENGTH" />, Administratorunuz tərəfindən idarə olunur</translation> <translation id="6612802754306526077">Ekranın yazılması rejimi seçilib</translation> <translation id="6612889377159412215">alt tapşırıq</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb index d4210d7f..3d0ac1c 100644 --- a/ash/strings/ash_strings_be.xtb +++ b/ash/strings/ash_strings_be.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Назва</translation> <translation id="40062176907008878">Рукапісны ўвод</translation> <translation id="4011112806063830608">Рэжым "Не турбаваць" уключаны.</translation> -<translation id="4015144849380506405">Калі ўключана, прыпыняе (або ўзнаўляе) дзеянне клавіш кіравання мышшу</translation> <translation id="4017989525502048489">Лазерная ўказка</translation> <translation id="401993194061514265">Маркер недаступны. Адкрыйце Screencast яшчэ раз.</translation> <translation id="4021716437419160885">Прагартаць уніз</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Акно перадпрагляду камеры прывязана да левага ніжняга вугла, бо яно перакрывала інтэрфейс сістэмы.</translation> <translation id="6605415194043280389">Канцэнтрацыя ўвагі ўключана</translation> -<translation id="660846213831377756">Клавішы кіравання мышшу</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, магутнасць сігналу – <ph name="SIGNAL_STRENGTH" />, знаходзіцца пад кіраваннем адміністратара</translation> <translation id="6612802754306526077">Выбраны рэжым запісу экрана</translation> <translation id="6612889377159412215">падзадача</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index e250e11..b51b0cf 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Заглавие</translation> <translation id="40062176907008878">Писане на ръка</translation> <translation id="4011112806063830608">Режимът „Не безпокойте“ е включен.</translation> -<translation id="4015144849380506405">Поставяне на пауза/възобновяване на бутоните на мишката, когато е включено</translation> <translation id="4017989525502048489">Лазерна показалка</translation> <translation id="401993194061514265">Маркерът не е налице. Отворете Screencast отново.</translation> <translation id="4021716437419160885">Превъртане надолу</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Картината от камерата е прилепена към долния ляв ъгъл. Възникна конфликт с интерфейса на системата.</translation> <translation id="6605415194043280389">Режимът за концентрация е включен</translation> -<translation id="660846213831377756">Бутони на мишката</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, сила на сигнала <ph name="SIGNAL_STRENGTH" />, управлява се от администратора ви</translation> <translation id="6612802754306526077">Избран е режимът за записване на екрана</translation> <translation id="6612889377159412215">подзадача</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index d54f7ad..27ba20c2 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">শিরোনাম</translation> <translation id="40062176907008878">'হ্যান্ডরাইটিং' ফিচার</translation> <translation id="4011112806063830608">'বিরক্ত করবে না' চালু আছে।</translation> -<translation id="4015144849380506405">এটি চালু করা থাকলে মাউস 'কী' পজ/আবার চালু করুন</translation> <translation id="4017989525502048489">লেজার পয়েন্টার</translation> <translation id="401993194061514265">মার্কার উপলভ্য নেই। Screencast আবার খুলুন।</translation> <translation id="4021716437419160885">নিচের দিকে স্ক্রল করুন</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">ক্যামেরাটি নিচে বাঁদিকের কোণে স্ন্যাপ করা হয়েছে। সিস্টেমের সারফেসে ছবির কিছুটা ঢাকা পড়ছে।</translation> <translation id="6605415194043280389">ফোকাস মোড চালু আছে</translation> -<translation id="660846213831377756">মাউস কী</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, সিগন্যাল: <ph name="SIGNAL_STRENGTH" />, আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে</translation> <translation id="6612802754306526077">স্ক্রিন রেকর্ডিং মোড বেছে নেওয়া হয়েছে</translation> <translation id="6612889377159412215">সাবটাস্ক</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index 5c022d5..a88d9cf5 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Naslov</translation> <translation id="40062176907008878">Rukopis</translation> <translation id="4011112806063830608">Uključena je funkcija Ne ometaj.</translation> -<translation id="4015144849380506405">Pauziranje/nastavljanje tipki miša kada je uključeno</translation> <translation id="4017989525502048489">Laserski pokazivač</translation> <translation id="401993194061514265">Označivač nije dostupan. Ponovo otvorite Snimanje ekrana.</translation> <translation id="4021716437419160885">Klizni prema dolje</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera se uklopila u donji lijevi ugao. Došlo je do konflikta s površinom sistema.</translation> <translation id="6605415194043280389">Fokusiranje je uključeno</translation> -<translation id="660846213831377756">Tipke miša</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja vaš administrator</translation> <translation id="6612802754306526077">Odabran je način rada za snimanje ekrana</translation> <translation id="6612889377159412215">podzadatak</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 5d7ef51..fb9d76f 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Títol</translation> <translation id="40062176907008878">Escriptura a mà</translation> <translation id="4011112806063830608">El mode No molestis està activat.</translation> -<translation id="4015144849380506405">Posa en pausa o reprèn les tecles del ratolí quan estigui activat</translation> <translation id="4017989525502048489">Punter làser</translation> <translation id="401993194061514265">El marcador no està disponible. Torna a obrir Gravació de pantalla.</translation> <translation id="4021716437419160885">Desplaça't cap avall</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">La càmera s'ha ajustat a l'extrem inferior esquerre. S'ha produït un conflicte amb la superfície del sistema.</translation> <translation id="6605415194043280389">El mode Sense distraccions està activat</translation> -<translation id="660846213831377756">Tecles del ratolí</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, <ph name="SIGNAL_STRENGTH" /> d'intensitat del senyal, xarxa gestionada per l'administrador</translation> <translation id="6612802754306526077">S'ha seleccionat el mode de gravació de pantalla</translation> <translation id="6612889377159412215">subtasca</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index d0b0965..de291287 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Název</translation> <translation id="40062176907008878">Psaní rukou</translation> <translation id="4011112806063830608">Režim Nerušit je zapnutý.</translation> -<translation id="4015144849380506405">Když je tato funkce zapnutá, pozastavovat/obnovovat klávesy myši</translation> <translation id="4017989525502048489">Laserové ukazovátko</translation> <translation id="401993194061514265">Značka není k dispozici. Znovu otevřete Screencast.</translation> <translation id="4021716437419160885">Posunout dolů</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera byla připnuta do levého dolního rohu Konflikt s platformou systému.</translation> <translation id="6605415194043280389">Soustředění je zapnuté</translation> -<translation id="660846213831377756">Klávesy myši</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, síla signálu: <ph name="SIGNAL_STRENGTH" />, spravováno administrátorem</translation> <translation id="6612802754306526077">Je vybrán režim nahrávání obrazovky</translation> <translation id="6612889377159412215">dílčí úkol</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb index 3045c99..87d9f6b 100644 --- a/ash/strings/ash_strings_cy.xtb +++ b/ash/strings/ash_strings_cy.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Teitl</translation> <translation id="40062176907008878">Llawysgrifen</translation> <translation id="4011112806063830608">Mae Peidiwch ag Aflonyddu ymlaen.</translation> -<translation id="4015144849380506405">Seibio/ailddechrau bysellau'r llygoden pan fydd ymlaen</translation> <translation id="4017989525502048489">Pwyntydd laser</translation> <translation id="401993194061514265">Marciwr ddim ar gael. Ailagorwch Screencast.</translation> <translation id="4021716437419160885">Sgrolio i lawr</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Mae'r camera wedi'i snapio i'r gornel chwith isaf. Gwrthdaro ag arwyneb y system.</translation> <translation id="6605415194043280389">Mae Ffocysu ymlaen</translation> -<translation id="660846213831377756">Bysellau'r llygoden</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Cryfder Signal <ph name="SIGNAL_STRENGTH" />, Rheolir gan eich Gweinyddwr</translation> <translation id="6612802754306526077">Dewiswyd y modd recordio sgrîn</translation> <translation id="6612889377159412215">is-dasg</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index 9ac71c5..01a9217 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titel</translation> <translation id="40062176907008878">Håndskrift</translation> <translation id="4011112806063830608">Forstyr ikke er aktiveret.</translation> -<translation id="4015144849380506405">Sæt musetasterne på pause, eller genoptag dem, når musen er tændt</translation> <translation id="4017989525502048489">Lasermarkør</translation> <translation id="401993194061514265">Markøren er ikke tilgængelig. Åbn Screencast igen.</translation> <translation id="4021716437419160885">Rul ned</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kameraet er fastgjort til hjørnet nederst til venstre. Dette er i strid med systemfladen.</translation> <translation id="6605415194043280389">Fokus er aktiveret</translation> -<translation id="660846213831377756">Musetaster</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signalstyrke <ph name="SIGNAL_STRENGTH" />, administreret af din administrator</translation> <translation id="6612802754306526077">Skærmoptagelsestilstand er valgt</translation> <translation id="6612889377159412215">underopgave</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index ee4a362..65fc07d 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titel</translation> <translation id="40062176907008878">Handschrift</translation> <translation id="4011112806063830608">„Bitte nicht stören“ ist aktiviert.</translation> -<translation id="4015144849380506405">Tastaturmaus pausieren/fortsetzen, wenn aktiviert</translation> <translation id="4017989525502048489">Laserpointer</translation> <translation id="401993194061514265">Filzstift nicht verfügbar. Screencast wieder öffnen.</translation> <translation id="4021716437419160885">Nach unten scrollen</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera ist an der unteren linken Ecke angepinnt. Konflikt mit der Systemoberfläche.</translation> <translation id="6605415194043280389">Konzentrationsmodus ist aktiviert</translation> -<translation id="660846213831377756">Tastaturmaus</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Signalstärke bei <ph name="SIGNAL_STRENGTH" />, von deinem Administrator verwaltet</translation> <translation id="6612802754306526077">Modus für Aufzeichnung des Bildschirms ausgewählt</translation> <translation id="6612889377159412215">Unteraufgabe</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index b83eaca..9242e8fc 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Τίτλος</translation> <translation id="40062176907008878">Γραφή</translation> <translation id="4011112806063830608">Η λειτουργία Μην ενοχλείτε είναι ενεργή.</translation> -<translation id="4015144849380506405">Παύση/συνέχιση πλήκτρων ποντικιού όταν είναι ενεργοποιημένο</translation> <translation id="4017989525502048489">Δείκτης λέιζερ</translation> <translation id="401993194061514265">Ο δείκτης δεν είναι διαθέσιμος. Ανοίξτε ξανά το Screencast.</translation> <translation id="4021716437419160885">Κύλιση προς τα κάτω</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Η προεπισκόπηση κάμερας τοποθετήθηκε στην κάτω αριστερή γωνία. Διένεξη με επιφάνεια συστήματος.</translation> <translation id="6605415194043280389">Η λειτουργία συγκέντρωσης είναι ενεργοποιημένη</translation> -<translation id="660846213831377756">Πλήκτρα ποντικιού</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Ισχύς σήματος <ph name="SIGNAL_STRENGTH" />, Διαχειριζόμενο από τον διαχειριστή σας</translation> <translation id="6612802754306526077">Επιλέχτηκε η λειτουργία εγγραφής οθόνης.</translation> <translation id="6612889377159412215">δευτερεύουσα εργασία</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 0785005..a382b45e 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Title</translation> <translation id="40062176907008878">Handwriting</translation> <translation id="4011112806063830608">Do Not Disturb is on.</translation> -<translation id="4015144849380506405">Pause/resume mouse keys when it's on</translation> <translation id="4017989525502048489">Laser pointer</translation> <translation id="401993194061514265">Marker unavailable. Re-open Screencast.</translation> <translation id="4021716437419160885">Scroll down</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" /> <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Camera snapped to the bottom-left corner. Conflict with system surface.</translation> <translation id="6605415194043280389">Focus is on</translation> -<translation id="660846213831377756">Mouse keys</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signal strength <ph name="SIGNAL_STRENGTH" />, managed by your administrator</translation> <translation id="6612802754306526077">Screen recording mode selected</translation> <translation id="6612889377159412215">subtask</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index b1711cfe..869c85d6 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Título</translation> <translation id="40062176907008878">Escritura a mano</translation> <translation id="4011112806063830608">La función No interrumpir está activada.</translation> -<translation id="4015144849380506405">Pausar o reanudar las teclas del mouse cuando esté activado</translation> <translation id="4017989525502048489">Puntero láser</translation> <translation id="401993194061514265">Marcador no disponible. Volver a abrir Screencast.</translation> <translation id="4021716437419160885">Desplazar hacia abajo</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Se ajustó la cámara a la esquina inferior izquierda. Entra en conflicto con la superficie del sistema.</translation> <translation id="6605415194043280389">El Modo sin distracciones está activado</translation> -<translation id="660846213831377756">Teclas del mouse</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, intensidad de la señal: <ph name="SIGNAL_STRENGTH" />, administrada por tu administrador</translation> <translation id="6612802754306526077">Se seleccionó el modo de grabación de pantalla</translation> <translation id="6612889377159412215">subtarea</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 66c7f12..32d76ee 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Título</translation> <translation id="40062176907008878">Escritura a mano</translation> <translation id="4011112806063830608">No molestar está activado.</translation> -<translation id="4015144849380506405">Pausar o reanudar las teclas del ratón cuando esté activado</translation> <translation id="4017989525502048489">Puntero láser</translation> <translation id="401993194061514265">Rotulador no disponible. Vuelve a abrir Grabación de pantalla.</translation> <translation id="4021716437419160885">Desplazarse hacia abajo</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Cámara ajustada a la esquina inferior izquierda. Conflicto con la superficie del sistema.</translation> <translation id="6605415194043280389">El modo Sin distracciones está activado</translation> -<translation id="660846213831377756">Teclas del ratón</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, intensidad de la señal: <ph name="SIGNAL_STRENGTH" />, gestionada por el administrador</translation> <translation id="6612802754306526077">Modo de grabación de pantalla seleccionado</translation> <translation id="6612889377159412215">subtarea</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index ae4dd252..ea5764bf 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Pealkiri</translation> <translation id="40062176907008878">Käsitsi kirjutamine</translation> <translation id="4011112806063830608">Režiim Mitte segada on sees.</translation> -<translation id="4015144849380506405">Hiireklahvide funktsiooni ajutine keelamine / lubamine, kui funktsioon on sees</translation> <translation id="4017989525502048489">Laserkursor</translation> <translation id="401993194061514265">Marker pole saadaval. Avage Screencast uuesti.</translation> <translation id="4021716437419160885">Keri alla</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kaamera kinnitati vasakusse alanurka. Konflikt süsteemi platvormiga.</translation> <translation id="6605415194043280389">Keskendumise režiim on sisse lülitatud</translation> -<translation id="660846213831377756">Hiireklahvid</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signaalitugevus <ph name="SIGNAL_STRENGTH" />, võrku haldab teie administraator</translation> <translation id="6612802754306526077">Valitud on ekraanisalvestuse režiim</translation> <translation id="6612889377159412215">alamülesanne</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index 9257926..2d64023 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Izena</translation> <translation id="40062176907008878">Eskuzko idazketa</translation> <translation id="4011112806063830608">Aktibatuta dago ez molestatzeko modua.</translation> -<translation id="4015144849380506405">Aktibatuta dagoenean, pausatu edo aktibatu berriro saguaren teklak</translation> <translation id="4017989525502048489">Laser-erakuslea</translation> <translation id="401993194061514265">Markatzailea ez dago erabilgarri. Ireki berriro Screencast.</translation> <translation id="4021716437419160885">Egin behera</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Atxiki egin da kamera beheko ezkerraldeko izkinan, sistemaren beste gainazal batean gainjartzen zelako.</translation> <translation id="6605415194043280389">Kontzentratzeko modua aktibatuta dago</translation> -<translation id="660846213831377756">Saguaren teklak</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />. Seinalearen indarra: <ph name="SIGNAL_STRENGTH" />. Administratzaileak kudeatua.</translation> <translation id="6612802754306526077">Pantaila grabatzeko modua hautatu da</translation> <translation id="6612889377159412215">azpizeregin</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index b06df40..7d628389 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">عنوان</translation> <translation id="40062176907008878">دستنویسی</translation> <translation id="4011112806063830608">«مزاحم نشوید» روشن است.</translation> -<translation id="4015144849380506405">کلیدهای مکث/ ازسرگیری موشواره هنگام روشن بودن</translation> <translation id="4017989525502048489">اشارهگر لیزری</translation> <translation id="401993194061514265">نشانگر دردسترس نیست. «صفحهپخش» را دوباره باز کنید.</translation> <translation id="4021716437419160885">پیمایش به پایین</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />، <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">دوربین به گوشه پایین سمت چپ چسبید. تداخلی با سطح سیستم روی داد.</translation> <translation id="6605415194043280389">«تمرکز» روشن است.</translation> -<translation id="660846213831377756">کلیدهای موشواره</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />، قدرت سیگنال <ph name="SIGNAL_STRENGTH" />، تحتمدیریت سرپرست</translation> <translation id="6612802754306526077">حالت ضبط صفحهنمایش انتخاب شد</translation> <translation id="6612889377159412215">تکلیف فرعی</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 571a7312..efca05a 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Nimi</translation> <translation id="40062176907008878">Käsinkirjoitus</translation> <translation id="4011112806063830608">Älä häiritse ‑tila on päällä.</translation> -<translation id="4015144849380506405">Keskeytä hiiren painikkeiden käyttö tai jatka niiden käyttöä, kun se on päällä</translation> <translation id="4017989525502048489">Laserosoitin</translation> <translation id="401993194061514265">Piirtotyökalu ei ole saatavilla. Avaa Screencast uudelleen.</translation> <translation id="4021716437419160885">Vieritä alas</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera kohdistettu vasempaan alakulmaan. Ristiriita järjestelmän alustan kanssa.</translation> <translation id="6605415194043280389">Keskittymistila on päällä</translation> -<translation id="660846213831377756">Hiiren painikkeet</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signaalin vahvuus <ph name="SIGNAL_STRENGTH" />, järjestelmänvalvojan hallinnoima</translation> <translation id="6612802754306526077">Näytön tallentajatila valittu</translation> <translation id="6612889377159412215">alatehtävä</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 44b779e..8d94d20 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Pamagat</translation> <translation id="40062176907008878">Sulat-kamay</translation> <translation id="4011112806063830608">Naka-on ang Huwag Istorbohin.</translation> -<translation id="4015144849380506405">I-pause/ituloy ang mga mouse key kapag naka-on ang mga ito</translation> <translation id="4017989525502048489">Laser pointer</translation> <translation id="401993194061514265">Hindi available ang marker. Buksan ulit ang Screencast.</translation> <translation id="4021716437419160885">Mag-scroll pababa</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Nag-snap ang camera sa kaliwang sulok sa ibaba. Pagsasalungat sa surface ng system.</translation> <translation id="6605415194043280389">Naka-on ang Pag-focus</translation> -<translation id="660846213831377756">Mga mouse key</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Lakas ng Signal <ph name="SIGNAL_STRENGTH" />, Pinapamahalaan ng iyong Administrator</translation> <translation id="6612802754306526077">Pinili ang screen recording mode</translation> <translation id="6612889377159412215">subtask</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb index a16547e..99390b0 100644 --- a/ash/strings/ash_strings_fr-CA.xtb +++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titre</translation> <translation id="40062176907008878">Écriture manuscrite</translation> <translation id="4011112806063830608">Le mode Ne pas déranger est activé.</translation> -<translation id="4015144849380506405">Mettre en pause/reprendre les touches de la souris lorsque c'est activé</translation> <translation id="4017989525502048489">Pointeur laser</translation> <translation id="401993194061514265">Marqueur inaccessible. Rouvrez l'enregistreur d'écran.</translation> <translation id="4021716437419160885">Faire défiler vers le bas</translation> @@ -1677,7 +1676,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Caméra alignée sur le coin inférieur gauche. Conflit avec la surface du système.</translation> <translation id="6605415194043280389">Le mode Sans distractions est activé</translation> -<translation id="660846213831377756">Touches de la souris</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, force du signal : <ph name="SIGNAL_STRENGTH" /> géré par votre administrateur</translation> <translation id="6612802754306526077">Mode d'enregistrement de l'écran sélectionné</translation> <translation id="6612889377159412215">sous-tâche</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index 873601e20..59105ad 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titre</translation> <translation id="40062176907008878">Écriture manuscrite</translation> <translation id="4011112806063830608">Ne pas déranger activé.</translation> -<translation id="4015144849380506405">Suspendre/Réactiver les touches pour la souris</translation> <translation id="4017989525502048489">Pointeur laser</translation> <translation id="401993194061514265">Marqueur non disponible. Rouvrez l'Enregistreur d'écran.</translation> <translation id="4021716437419160885">Faire défiler vers le bas</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Appareil photo aligné sur l'angle inférieur gauche. Conflit avec la surface du système.</translation> <translation id="6605415194043280389">Le mode Sans distractions est activé</translation> -<translation id="660846213831377756">Touches pour la souris</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, force du signal : <ph name="SIGNAL_STRENGTH" />, géré par votre administrateur</translation> <translation id="6612802754306526077">Mode d'enregistreur d'écran sélectionné</translation> <translation id="6612889377159412215">tâche secondaire</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb index fb0197eb..6915e53 100644 --- a/ash/strings/ash_strings_gl.xtb +++ b/ash/strings/ash_strings_gl.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Título</translation> <translation id="40062176907008878">Escritura manual</translation> <translation id="4011112806063830608">O modo Non molestar está activado.</translation> -<translation id="4015144849380506405">Pór en pausa ou retomar teclas do rato cando a opción estea activada</translation> <translation id="4017989525502048489">Punteiro láser</translation> <translation id="401993194061514265">O marcador non está dispoñible. Volve abrir Gravación da pantalla.</translation> <translation id="4021716437419160885">Desprazarse cara abaixo</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Cámara axustada á esquina inferior esquerda. Conflito coa plataforma do sistema.</translation> <translation id="6605415194043280389">Modo Sen distraccións activado</translation> -<translation id="660846213831377756">Teclas do rato</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, intensidade do sinal do <ph name="SIGNAL_STRENGTH" />, xestionada polo teu administrador</translation> <translation id="6612802754306526077">Seleccionouse o modo de gravación da pantalla</translation> <translation id="6612889377159412215">subtarefa</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index bf782b7d..15d421d 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">શીર્ષક</translation> <translation id="40062176907008878">હસ્તલેખન</translation> <translation id="4011112806063830608">'ખલેલ પાડશો નહીં' સુવિધા ચાલુ છે.</translation> -<translation id="4015144849380506405">તે ચાલુ હોય ત્યારે માઉસ કીને થોભાવો/ફરી શરૂ કરો</translation> <translation id="4017989525502048489">લેઝર પૉઇન્ટર</translation> <translation id="401993194061514265">માર્કર ઉપલબ્ધ નથી. Screencast ફરીથી ખોલો.</translation> <translation id="4021716437419160885">નીચે સ્ક્રોલ કરો</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">કૅમેરાને નીચેના ડાબા ખૂણામાં સ્નેપ કર્યો. સિસ્ટમની સપાટીને ઓવરલેપ કરે છે.</translation> <translation id="6605415194043280389">ફોકસ ચાલુ છે</translation> -<translation id="660846213831377756">માઉસ કી</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, સિગ્નલની સશક્તતા <ph name="SIGNAL_STRENGTH" />, તમારા વ્યવસ્થાપક દ્વારા મેનેજ કરવામાં આવે છે</translation> <translation id="6612802754306526077">સ્ક્રીન રેકોર્ડિંગ મોડ પસંદ કર્યો</translation> <translation id="6612889377159412215">પેટાકાર્ય</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 291669d..a2833f93 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">टाइटल</translation> <translation id="40062176907008878">हैंडराइटिंग</translation> <translation id="4011112806063830608">'परेशान न करें' सुविधा चालू है.</translation> -<translation id="4015144849380506405">इस सुविधा के चालू होने पर, माउस का काम करने वाले बटन रोकें/फिर से चालू करें</translation> <translation id="4017989525502048489">लेज़र पॉइंटर</translation> <translation id="401993194061514265">मार्कर पेन उपलब्ध नहीं है. स्क्रीनकास्ट ऐप्लिकेशन फिर से खोलें.</translation> <translation id="4021716437419160885">नीचे स्क्रोल करें</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">कैमरा इनपुट की झलक, अब नीचे बाएं कोने में दिखेगी. ऐसा, सिस्टम पर दूसरे ऐप्लिकेशन के साथ ओवरलैप होने की वजह से किया गया है.</translation> <translation id="6605415194043280389">फ़ोकस मोड चालू है</translation> -<translation id="660846213831377756">माउस का काम करने वाले बटन</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, सिग्नल की क्षमता <ph name="SIGNAL_STRENGTH" />, आपका एडमिन प्रबंधित करता है</translation> <translation id="6612802754306526077">स्क्रीन रिकॉर्डिंग मोड चुना गया</translation> <translation id="6612889377159412215">सबटास्क</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index da3bb1ac..2fb6c77 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Naslov</translation> <translation id="40062176907008878">Rukopis</translation> <translation id="4011112806063830608">Uključena je značajka Ne uznemiravaj.</translation> -<translation id="4015144849380506405">Pauzirajte/nastavite tipke miša kada je uključenu</translation> <translation id="4017989525502048489">Laserski pokazivač</translation> <translation id="401993194061514265">Marker nije dostupan. Ponovo otvorite Snimanje zaslona.</translation> <translation id="4021716437419160885">Pomakni prema dolje</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera je poravnata s donjim lijevim kutom. Došlo je do sukoba s površinom sustava.</translation> <translation id="6605415194043280389">Način rada za koncentraciju je uključen</translation> -<translation id="660846213831377756">Tipke miša</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja administrator</translation> <translation id="6612802754306526077">Odabran je način snimanja zaslona</translation> <translation id="6612889377159412215">podzadatak</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 0260c494..104e464 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Cím</translation> <translation id="40062176907008878">Kézírás</translation> <translation id="4011112806063830608">A Ne zavarjanak mód be van kapcsolva.</translation> -<translation id="4015144849380506405">Az egérgombok szüneteltetése/folytatása, ha be van kapcsolva</translation> <translation id="4017989525502048489">Lézermutató</translation> <translation id="401993194061514265">A jelölő nem áll rendelkezésre. Nyissa meg újra a Screencastot.</translation> <translation id="4021716437419160885">Görgetés lefelé</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera a bal alsó sarokhoz igazítva. Ütközés a rendszerfelülettel.</translation> <translation id="6605415194043280389">Összpontosítási üzemmód bekapcsolva</translation> -<translation id="660846213831377756">Egérgombok</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, jelerősség: <ph name="SIGNAL_STRENGTH" />, a rendszergazdája kezeli</translation> <translation id="6612802754306526077">Képernyőrögzítés mód kiválasztva</translation> <translation id="6612889377159412215">részfeladat</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb index a6f149da..1273c90b 100644 --- a/ash/strings/ash_strings_hy.xtb +++ b/ash/strings/ash_strings_hy.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Վերնագիր</translation> <translation id="40062176907008878">Ձեռագիր</translation> <translation id="4011112806063830608">«Չանհանգստացնել» ռեժիմը միացված է։</translation> -<translation id="4015144849380506405">Դադարեցնել/վերագործարկել մկնիկի ստեղները, երբ այն միացված է</translation> <translation id="4017989525502048489">Լազերային ցուցիչ</translation> <translation id="401993194061514265">Նշիչը հասանելի չէ։ Նորից բացեք Screencast-ը։</translation> <translation id="4021716437419160885">Թերթել ներքև</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Տեսախցիկի պատկերն ամրացված է ներքևի ձախ անկյունում, քանի որ ծածկում էր համակարգի միջերեսի տարրերը։</translation> <translation id="6605415194043280389">Առանց շեղումների ռեժիմը միացված է</translation> -<translation id="660846213831377756">Մկնիկի ստեղներ</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ազդանշանի ուժգնությունը՝ <ph name="SIGNAL_STRENGTH" />, կառավարվում է ձեր ադմինիստրատորի կողմից</translation> <translation id="6612802754306526077">Ընտրված է էկրանի տեսագրման ռեժիմը</translation> <translation id="6612889377159412215">ենթաառաջադրանք</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index 5d007e1f..10b798f1 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Judul</translation> <translation id="40062176907008878">Tulis tangan</translation> <translation id="4011112806063830608">Mode Jangan Ganggu aktif.</translation> -<translation id="4015144849380506405">Menjeda/melanjutkan tombol mouse saat aktif</translation> <translation id="4017989525502048489">Penunjuk laser</translation> <translation id="401993194061514265">Penanda tidak tersedia. Buka kembali Screencast.</translation> <translation id="4021716437419160885">Scroll ke bawah</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera dipaskan ke pojok kiri bawah. Bertentangan dengan platform sistem.</translation> <translation id="6605415194043280389">Fokus aktif</translation> -<translation id="660846213831377756">Tombol mouse</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Kekuatan Sinyal <ph name="SIGNAL_STRENGTH" />, Dikelola oleh Administrator Anda</translation> <translation id="6612802754306526077">Mode perekaman layar dipilih</translation> <translation id="6612889377159412215">subtugas</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb index 5a6258f..5f761f3f 100644 --- a/ash/strings/ash_strings_is.xtb +++ b/ash/strings/ash_strings_is.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Heiti</translation> <translation id="40062176907008878">Handskrift</translation> <translation id="4011112806063830608">Kveikt er á „Ónáðið ekki“.</translation> -<translation id="4015144849380506405">Gera hlé/halda áfram með músarhnappa þegar kveikt er á músinni</translation> <translation id="4017989525502048489">Laser-bendill</translation> <translation id="401993194061514265">Merki ekki tiltækt. Opna „Skjávarp“ aftur.</translation> <translation id="4021716437419160885">Fletta niður</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Myndavél fest við neðra horn vinstra megin. Skörun við vettvang kerfis.</translation> <translation id="6605415194043280389">Einbeitingarlota í gangi</translation> -<translation id="660846213831377756">Músarhnappar</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, sendistyrkur <ph name="SIGNAL_STRENGTH" />, stjórnað af kerfisstjóra</translation> <translation id="6612802754306526077">Skjáupptökustilling valin</translation> <translation id="6612889377159412215">undirverkefni</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index 8f52072a..5994861 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -870,7 +870,6 @@ <translation id="4002066346123236978">Titolo</translation> <translation id="40062176907008878">Scrittura a mano libera</translation> <translation id="4011112806063830608">Modalità Non disturbare attiva.</translation> -<translation id="4015144849380506405">Metti in pausa/riprendi i tasti del mouse quando il criterio è attivo</translation> <translation id="4017989525502048489">Puntatore laser</translation> <translation id="401993194061514265">Indicatore non disponibile. Riapri Registra schermo.</translation> <translation id="4021716437419160885">Scorri verso il basso</translation> @@ -1675,7 +1674,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Fotocamera allineata all'angolo in basso a sinistra. Conflitto con la piattaforma di sistema.</translation> <translation id="6605415194043280389">Modalità Niente distrazioni attiva</translation> -<translation id="660846213831377756">Tasti del mouse</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, intensità del segnale <ph name="SIGNAL_STRENGTH" />, gestita dall'amministratore</translation> <translation id="6612802754306526077">Modalità Registrazione dello schermo selezionata</translation> <translation id="6612889377159412215">attività secondaria</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index 23b36c7..7eede96 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -60,7 +60,7 @@ <translation id="1183863904939664422">ההצעה הזו לא מעניינת אותי</translation> <translation id="1184126796192815024">ברשת הזו אין תמיכה בשידור אפליקציות מהטלפון. ניתן לנסות להשתמש בנקודה לשיתוף אינטרנט בטלפון. <ph name="LEARN_MORE" /></translation> <translation id="118437560755358292">כדי לשפר את רמת ההגנה, צריך להזין סיסמה או קוד אימות</translation> -<translation id="118532027333893379">כדי לצלם את המסך המלא, יש להקיש במקום כלשהו</translation> +<translation id="118532027333893379">כדי לצלם את המסך המלא, יש ללחוץ במקום כלשהו</translation> <translation id="1190609913194133056">מרכז התראות</translation> <translation id="1195412055398077112">סריקת יתר</translation> <translation id="1195667586424773550">גרירת הקישור אל שורת כתובת האתר של הכרטיסייה</translation> @@ -370,7 +370,7 @@ <translation id="2322173485024759474">אות אחת אחורה</translation> <translation id="2326112202058075478">הצגת סמלי אמוג'י נוספים</translation> <translation id="2335091074961603075">ב-Chromebook או במכשיר ה-Bluetooth שלך יש גרסה ישנה יותר של Bluetooth. לשיפור איכות האודיו, צריך להשתמש במיקרופון הפנימי.</translation> -<translation id="2339073806695260576">הקשה על לחצן הסטיילוס במדף מאפשרת לכתוב הערות, לצלם את המסך ולהשתמש בסמן הלייזר או בזכוכית המגדלת.</translation> +<translation id="2339073806695260576">לחיצה על כפתור הסטיילוס במדף מאפשרת לכתוב הערות, לצלם את המסך ולהשתמש בסמן הלייזר או בזכוכית המגדלת.</translation> <translation id="2341729377289034582">נעול במצב אנכי</translation> <translation id="2345226652884463045">יש להקיש על Enter או על מקש החיפוש + מקש הרווח כדי לבחור את הטקסט לעריכה.</translation> <translation id="2349785431103945039">הצגת פרטי הנקודה לשיתוף אינטרנט (Hotspot). צריך להתחבר לרשת הסלולרית כדי להשתמש בנקודת האינטרנט.</translation> @@ -583,7 +583,7 @@ <translation id="3038571455154067151">כדי להיכנס יש להזין את קוד הגישה להורים (הקוד מ-Family Link)</translation> <translation id="3039939407102840004">רמת הטעינה של סוללת הסטיילוס: <ph name="PERCENTAGE" />.</translation> <translation id="304097922505898963">פתיחת האפליקציה 'מקשי הקיצור'</translation> -<translation id="304417730895741346">האפליקציות המוצמדות והפתוחות נמצאות על המדף. כדי להצמיד אפליקציה למדף, לוחצים לחיצה ימנית על אפליקציה או מקישים על לוח המגע בשתי אצבעות.</translation> +<translation id="304417730895741346">האפליקציות המוצמדות והפתוחות נמצאות על המדף. כדי להצמיד אפליקציה למדף, לוחצים לחיצה ימנית על אפליקציה או לוחצים על לוח המגע בשתי אצבעות.</translation> <translation id="3045488863354895414">צהריים טובים,</translation> <translation id="3047761520276763270">אפשר לנסות לומר:</translation> <translation id="3053407068093039599">הפעלה או השבתה של הגישה למצלמה</translation> @@ -689,7 +689,7 @@ <translation id="3410336247007142655">הגדרות של הצגת עיצוב כהה</translation> <translation id="3413817803639110246">עדיין אין מה לראות</translation> <translation id="3417835166382867856">חיפוש כרטיסיות</translation> -<translation id="3426253816581969877">לחיצה ארוכה על <ph name="MODIFIER_1" /><ph name="MODIFIER_2" />, הקשה על <ph name="KEY" /> עד שמגיעים לחלון שרוצים לפתוח, ושחרור</translation> +<translation id="3426253816581969877">לחיצה ארוכה על <ph name="MODIFIER_1" /><ph name="MODIFIER_2" />, לחיצה על <ph name="KEY" /> עד שמגיעים לחלון שרוצים לפתוח, ושחרור</translation> <translation id="3428447136709161042">התנתקות מ-<ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">יש להחליק מצד ימין כדי לחזור אחורה</translation> <translation id="3431517721463707585">שולחן עבודה וירטואלי מספר 14</translation> @@ -850,7 +850,7 @@ <translation id="3934456833412894880">הטעינה הדינמית מופעלת. רמת הטעינה של הסוללה תישאר על 80% כדי להאריך את חיי הסוללה, ותתבצע טעינה מלאה כשיהיה בכך צורך.</translation> <translation id="3943857333388298514">הדבקה</translation> <translation id="394485226368336402">הגדרות אודיו</translation> -<translation id="3945319193631853098">יש להקיש כדי להשלים את ההגדרה</translation> +<translation id="3945319193631853098">יש ללחוץ כדי להשלים את ההגדרה</translation> <translation id="3945867833895287237">מתבצע חיבור אל לנקודת אינטרנט…</translation> <translation id="3950272133184491871">רוצה לצאת עכשיו?</translation> <translation id="3950820424414687140">כניסה</translation> @@ -873,7 +873,6 @@ <translation id="4002066346123236978">כותרת</translation> <translation id="40062176907008878">כתב יד</translation> <translation id="4011112806063830608">המצב 'נא לא להפריע' מופעל.</translation> -<translation id="4015144849380506405">השהיה או המשך הפעלה של מקשי העכבר כשהם מופעלים</translation> <translation id="4017989525502048489">סמן לייזר</translation> <translation id="401993194061514265">כלי הסימון לא זמין. יש לפתוח את Screencast מחדש.</translation> <translation id="4021716437419160885">גלילה למטה</translation> @@ -1202,7 +1201,7 @@ <translation id="5034421018520995080">מעבר אל ראש הדף</translation> <translation id="5035236842988137213">מכשיר <ph name="DEVICE_NAME" /> התחבר לטלפון חדש</translation> <translation id="5042305953558921026">מקש של מצב סקירה כללית</translation> -<translation id="5043679421800073804">לחיצה או הקשה על הסמל האחרון במדף</translation> +<translation id="5043679421800073804">לחיצה או לחיצה על הסמל האחרון במדף</translation> <translation id="504465286040788597">הפיסקה הקודמת</translation> <translation id="5045550434625856497">סיסמה שגויה</translation> <translation id="5062496344832867502">RAM</translation> @@ -1344,7 +1343,7 @@ <translation id="5520909879404821039">'שלום' בצרפתית</translation> <translation id="5523434445161341166">התכונה <ph name="FEATURE_NAME" /> מתחברת.</translation> <translation id="5529587891732734495">השהיית ההעברה</translation> -<translation id="5532994612895037630">יש להקיש במקום כלשהו כדי להקליט את המסך המלא</translation> +<translation id="5532994612895037630">יש ללחוץ במקום כלשהו כדי להקליט את המסך המלא</translation> <translation id="5536723544185013515">האפליקציות האחרונות, מנווטים לכל האפליקציות האחרונות באמצעות החץ שמאלה או החץ ימינה</translation> <translation id="553675580533261935">יציאה מההפעלה</translation> <translation id="5537725057119320332">הפעלת Cast</translation> @@ -1400,7 +1399,7 @@ <translation id="5682642926269496722">Google Assistant לא זמינה לחשבון המשתמש הנוכחי.</translation> <translation id="5682844616152977671"><ph name="RELATIVE_DATE" /> <ph name="TIME" /></translation> <translation id="5689233503102158537">Alt + מקש Backspace</translation> -<translation id="5689633613396158040">עם תאורת לילה, קל יותר להסתכל על המסך או לקרוא כשהתאורה מסביב עמומה. יש להקיש כדי לשנות את השעה שבה מופעלת 'תאורת לילה' או כדי לכבות אותה לגמרי.</translation> +<translation id="5689633613396158040">עם תאורת לילה, קל יותר להסתכל על המסך או לקרוא כשהתאורה מסביב עמומה. יש ללחוץ כדי לשנות את השעה שבה מופעלת 'תאורת לילה' או כדי לכבות אותה לגמרי.</translation> <translation id="5691772641933328258">טביעת האצבע לא זוהתה</translation> <translation id="5693255400847650006">המיקרופון נמצא בשימוש</translation> <translation id="5699366815052349604">הקצאת חלון פעיל לכל שולחנות העבודה הווירטואליים</translation> @@ -1416,7 +1415,7 @@ <translation id="5733630091161562207">התראת הצטרפות</translation> <translation id="573413375004481890">המכשיר הזה לא הצליח לתמוך בכל המסכים, ולכן אחד מהם נותק</translation> <translation id="574392208103952083">בינוני</translation> -<translation id="5744083938413354016">הקשה וגרירה</translation> +<translation id="5744083938413354016">לחיצה וגרירה</translation> <translation id="5745612484876805746">תאורת לילה נדלקת באופן אוטומטי בשעת השקיעה</translation> <translation id="5750765938512549687">Bluetooth כבוי</translation> <translation id="5758114525425072423">הפעלת מצב הריכוז. הוגדר טיימר ל-<ph name="FOCUS_DURATION" />.</translation> @@ -1591,7 +1590,7 @@ <translation id="6288235558961782912">ניתן יהיה להוסיף את <ph name="USER_EMAIL_ADDRESS" /> מחדש מאוחר יותר לאחר שיתקבל אישור של הורה.</translation> <translation id="6291221004442998378">לא בטעינה</translation> <translation id="6298183524022479114">יש אפשרות להתאים אישית את המכשיר הזה באפליקציה</translation> -<translation id="6309219492973062892">לחיצה או הקשה על הסמלים 1-8 במדף</translation> +<translation id="6309219492973062892">לחיצה או לחיצה על הסמלים 1-8 במדף</translation> <translation id="6315170314923504164">קול</translation> <translation id="6319058840130157106">מעבר אחורה בין הפינה השמאלית התחתונה, מרכז האפליקציות, סרגל הכתובות, סרגל הסימניות, האתר שפתוח וההורדות</translation> <translation id="6319503618073410818">לצפייה בפרטים בדפדפן</translation> @@ -1670,7 +1669,7 @@ <translation id="6570902864550063460">מתבצעת טעינה באמצעות USB</translation> <translation id="6571006437522772306">חיפוש באפליקציית 'קבצים'</translation> <translation id="6574587113394758819">ההתראה מ-<ph name="APP_TITLE" /> מוסתרת כי מופעלת הגנה על תצוגה</translation> -<translation id="6574622320167699133">הנעילה בוטלה על ידי הטלפון שלך. כדי להיכנס, צריך להקיש או ללחוץ.</translation> +<translation id="6574622320167699133">הנעילה בוטלה על ידי הטלפון שלך. כדי להיכנס, צריך ללחוץ או ללחוץ.</translation> <translation id="6578407462441924264">ללא שם</translation> <translation id="6582012689384648647">כדי להשתמש בפלייליסטים מותאמים אישית לשמירה על המיקוד, צריך לאפשר גישה ל-YouTube Music</translation> <translation id="6582034443359256692">מתבצע חישוב של רמת הטעינה של הסוללה.</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">המצלמה מוצמדת לפינה הימנית התחתונה. התנגשות עם תצוגת המערכת.</translation> <translation id="6605415194043280389">מצב הריכוז מופעל</translation> -<translation id="660846213831377756">מקשי העכבר</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, עוצמת האות: <ph name="SIGNAL_STRENGTH" />, הרשת מנוהלת על ידי מנהל המערכת</translation> <translation id="6612802754306526077">נבחר מצב של הקלטת מסך</translation> <translation id="6612889377159412215">תת-משימה</translation> @@ -1899,7 +1897,7 @@ <translation id="7401788553834047908">'נא לא להפריע' בזמן מצב ריכוז</translation> <translation id="7405710164030118432">כדי לבטל את נעילת המכשיר, יש להזין את קוד גישת ההורה של Family Link</translation> <translation id="7406608787870898861">סיום ההגדרה של הרשת הסלולרית</translation> -<translation id="7406854842098869085">לחיצה ארוכה על <ph name="MODIFIER_1" />, הקשה על <ph name="KEY" /> עד שמגיעים לחלון שרוצים לפתוח, ושחרור</translation> +<translation id="7406854842098869085">לחיצה ארוכה על <ph name="MODIFIER_1" />, לחיצה על <ph name="KEY" /> עד שמגיעים לחלון שרוצים לפתוח, ושחרור</translation> <translation id="740790383907119240">קיצורי דרך של אפליקציות</translation> <translation id="7413851974711031813">יש להקיש על "Esc" לסגירה</translation> <translation id="7416471219712049036">שמירת הדף הנוכחי</translation> @@ -1980,7 +1978,7 @@ <translation id="7658239707568436148">ביטול</translation> <translation id="7659861092419699379">שולחן העבודה הווירטואלי והחלונות שלו נסגרו</translation> <translation id="7660160718439869192">המכשיר <ph name="NAME" /> יופיע ברשימת המכשירים המקושרים אל <ph name="EMAIL" /></translation> -<translation id="7662283695561029522">יש להקיש כדי להגדיר</translation> +<translation id="7662283695561029522">יש ללחוץ כדי להגדיר</translation> <translation id="7670953955701272011">פתיחת התאריך הזה ביומן Google</translation> <translation id="7671610481353807627">האפליקציות ממוינות לפי צבע</translation> <translation id="7672095158465655885">מחובר אל <ph name="NAME" />, <ph name="SUBTEXT" /></translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 8fbd0bc..f1334bf9 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">タイトル</translation> <translation id="40062176907008878">手書き</translation> <translation id="4011112806063830608">サイレント モードはオンになっています。</translation> -<translation id="4015144849380506405">マウスキーがオンになっているときの一時停止 / 再開</translation> <translation id="4017989525502048489">レーザー ポインタ</translation> <translation id="401993194061514265">マーカーを使用できません。スクリーンキャストをもう一度開いてください。</translation> <translation id="4021716437419160885">下にスクロール</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />、<ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">カメラは左下にスナップされています。システムのサーフェスと競合しています。</translation> <translation id="6605415194043280389">フォーカス モードがオンです</translation> -<translation id="660846213831377756">マウスキー</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />、信号強度 <ph name="SIGNAL_STRENGTH" />、管理者によって管理</translation> <translation id="6612802754306526077">画面の録画モードを選択しました</translation> <translation id="6612889377159412215">サブタスク</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb index b7390f0..5bb035e 100644 --- a/ash/strings/ash_strings_ka.xtb +++ b/ash/strings/ash_strings_ka.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">სათაური</translation> <translation id="40062176907008878">ხელნაწერი</translation> <translation id="4011112806063830608">„არ შემაწუხოთ“ რეჟიმი ჩართულია.</translation> -<translation id="4015144849380506405">მაუსის კლავიშების დაპაუზება/განახლება, როცა ის ჩართულია</translation> <translation id="4017989525502048489">ლაზერული მიმთითებელი</translation> <translation id="401993194061514265">მარკერი მიუწვდომელია. ხელახლა გახსენით Screencast.</translation> <translation id="4021716437419160885">ქვემოთ გადაადგილება</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">კამერა მიზიდულია ქვედა მარცხენა კუთხეში. ის კონფლიქტშია სისტემის ზედაპირთან.</translation> <translation id="6605415194043280389">ფოკუსირების რეჟიმი ჩართულია</translation> -<translation id="660846213831377756">მაუსის კლავიშები</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, სიგნალის სიძლიერე: <ph name="SIGNAL_STRENGTH" />, მართავს თქვენი ადმინისტრატორი</translation> <translation id="6612802754306526077">ეკრანის ჩაწერის რეჟიმი არჩეულია</translation> <translation id="6612889377159412215">ქვეამოცანა</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index 0d662b3ac6..d4a95fc 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Тақырып</translation> <translation id="40062176907008878">Қолжазба</translation> <translation id="4011112806063830608">Мазаламау режимі қосулы.</translation> -<translation id="4015144849380506405">Қосулы кезде, тінтуір пернелерін кідірту/жалғастыру</translation> <translation id="4017989525502048489">Лазер меңзер</translation> <translation id="401993194061514265">Маркер қолжетімді емес. Скринкасты қайта ашыңыз.</translation> <translation id="4021716437419160885">Төменге айналдыру</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Камера төменгі сол жақ бұрышқа ауыстырылды. Жүйе платформасына қатысты қарама-қайшылық туындады.</translation> <translation id="6605415194043280389">Зейін қою режимі қосулы</translation> -<translation id="660846213831377756">Тінтуір пернелері</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, сигнал күші: <ph name="SIGNAL_STRENGTH" />, әкімші басқарады</translation> <translation id="6612802754306526077">Экранды жазу режимі таңдалды.</translation> <translation id="6612889377159412215">қосымша тапсырма</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb index caead74..5838540 100644 --- a/ash/strings/ash_strings_km.xtb +++ b/ash/strings/ash_strings_km.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ចំណងជើង</translation> <translation id="40062176907008878">ការសរសេរដោយដៃ</translation> <translation id="4011112806063830608">មុខងារកុំរំខានត្រូវបានបើក។</translation> -<translation id="4015144849380506405">ផ្អាក/បន្តគ្រាប់ចុចម៉ៅស៍ នៅពេលបើកវា</translation> <translation id="4017989525502048489">ព្រួញឡាស៊ែរ</translation> <translation id="401993194061514265">មិនអាចប្រើហ្វឺតបានទេ។ បើក Screencast ឡើងវិញ។</translation> <translation id="4021716437419160885">រំកិលចុះក្រោម</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">បានតម្រៀបកាមេរ៉ាទៅជ្រុងខាងឆ្វេងផ្នែកខាងក្រោម។ ខុសគ្នាជាមួយនឹងផ្ទៃប្រព័ន្ធ។</translation> <translation id="6605415194043280389">មុខងារផ្ដោតអារម្មណ៍ត្រូវបានបើក</translation> -<translation id="660846213831377756">គ្រាប់ចុចម៉ៅស៍</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, កម្លាំងរលកសញ្ញា <ph name="SIGNAL_STRENGTH" />, គ្រប់គ្រងដោយអ្នកគ្រប់គ្រងរបស់អ្នក</translation> <translation id="6612802754306526077">បានជ្រើសរើសមុខងារថតវីដេអូអេក្រង់</translation> <translation id="6612889377159412215">កិច្ចការរង</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index d93703c..dbb05d4 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ಶೀರ್ಷಿಕೆ</translation> <translation id="40062176907008878">ಕೈಬರಹ</translation> <translation id="4011112806063830608">ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ.</translation> -<translation id="4015144849380506405">ಮೌಸ್ ಕೀಗಳು ಆನ್ ಆಗಿರುವಾಗ ಅವುಗಳನ್ನು ವಿರಾಮಗೊಳಿಸಿ/ಪುನರಾರಂಭಿಸಿ</translation> <translation id="4017989525502048489">ಲೇಸರ್ ಪಾಯಿಂಟರ್</translation> <translation id="401993194061514265">ಮಾರ್ಕರ್ ಲಭ್ಯವಿಲ್ಲ. ಸ್ಕ್ರೀನ್ಕ್ಯಾಸ್ಟ್ ಅನ್ನು ಮರುತೆರೆಯಿರಿ.</translation> <translation id="4021716437419160885">ಕೆಳಗೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">ಕ್ಯಾಮರಾವನ್ನು ಕೆಳಗಿನ ಎಡ ಮೂಲೆಯಲ್ಲಿ ಸ್ನ್ಯಾಪ್ ಮಾಡಲಾಗಿದೆ. ಸಿಸ್ಟಮ್ ಮೇಲ್ಮೈ ಜೊತೆಗೆ ಸಂಘರ್ಷ.</translation> <translation id="6605415194043280389">ಫೋಕಸ್ ಆನ್ ಆಗಿದೆ</translation> -<translation id="660846213831377756">ಮೌಸ್ ಕೀಗಳು</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ <ph name="SIGNAL_STRENGTH" />, ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸಿದ್ದಾರೆ</translation> <translation id="6612802754306526077">ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಮೋಡ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation> <translation id="6612889377159412215">ಉಪಕಾರ್ಯ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 3637e56..2a72b428a 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">제목</translation> <translation id="40062176907008878">필기 입력</translation> <translation id="4011112806063830608">방해 금지 모드를 사용 중입니다.</translation> -<translation id="4015144849380506405">사용 시 마우스 키 일시중지/재개</translation> <translation id="4017989525502048489">레이저 포인터</translation> <translation id="401993194061514265">마커를 사용할 수 없습니다. 스크린캐스트를 다시 여세요.</translation> <translation id="4021716437419160885">아래로 스크롤</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">카메라 미리보기가 왼쪽 하단으로 맞춰졌습니다. 시스템 표시 경로와 충돌합니다.</translation> <translation id="6605415194043280389">집중 모드 사용 중</translation> -<translation id="660846213831377756">마우스 키</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, 신호 강도 <ph name="SIGNAL_STRENGTH" />, 관리자가 관리함</translation> <translation id="6612802754306526077">화면 녹화 모드 선택됨</translation> <translation id="6612889377159412215">하위 할 일</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb index 7b1ae6d68..329d2b0 100644 --- a/ash/strings/ash_strings_ky.xtb +++ b/ash/strings/ash_strings_ky.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Аталышы</translation> <translation id="40062176907008878">Кол жазма</translation> <translation id="4011112806063830608">"Тынчымды алба" режими күйгүзүлдү.</translation> -<translation id="4015144849380506405">Күйүп турганда чычкандын баскычтарын тындыруу/иштетүү</translation> <translation id="4017989525502048489">Лазер көрсөткүчү</translation> <translation id="401993194061514265">Белгилегич жеткиликсиз. Screencast'ты кайра ачыңыз.</translation> <translation id="4021716437419160885">Ылдый сыдыруу</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Камера төмөнкү сол бурчка кадалды. Системанын платформасына туура келген жок.</translation> <translation id="6605415194043280389">Ынтаа коюу режими күйүк</translation> -<translation id="660846213831377756">Чычкандын баскычтары</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Сигналдын күчү <ph name="SIGNAL_STRENGTH" />, Администраторуңуз башкарат</translation> <translation id="6612802754306526077">Экрандан видео жаздырып алуу режими тандалды</translation> <translation id="6612889377159412215">кошумча иш</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb index 86cab7a..989873f 100644 --- a/ash/strings/ash_strings_lo.xtb +++ b/ash/strings/ash_strings_lo.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ຫົວຂໍ້</translation> <translation id="40062176907008878">ການຂຽນດ້ວຍມື</translation> <translation id="4011112806063830608">ເປີດໂໝດຫ້າມລົບກວນແລ້ວ.</translation> -<translation id="4015144849380506405">ຢຸດຊົ່ວຄາວ/ສືບຕໍ່ໃຊ້ແປ້ນເມົ້າເມື່ອເປີດຢູ່</translation> <translation id="4017989525502048489">ເຄື່ອງພິມເລເຊີ</translation> <translation id="401993194061514265">ບໍ່ສາມາດໃຊ້ຕົວໝາຍໄດ້. ກະລຸນາເປີດ Screencast ຄືນໃໝ່.</translation> <translation id="4021716437419160885">ເລື່ອນລົງ</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">ແນບກ້ອງຖ່າຍຮູບໄປໃສ່ມຸມຊ້າຍລຸ່ມແລ້ວ. ຂັດແຍ້ງກັບພື້ນຜິວຂອງລະບົບ.</translation> <translation id="6605415194043280389">ໂໝດໂຟກັສເປີດຢູ່</translation> -<translation id="660846213831377756">ແປ້ນເມົ້າ</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ຄວາມແຮງສັນຍານ <ph name="SIGNAL_STRENGTH" />, ຈັດການໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ</translation> <translation id="6612802754306526077">ເລືອກໂໝດການບັນທຶກໜ້າຈໍແລ້ວ</translation> <translation id="6612889377159412215">ໜ້າວຽກຍ່ອຍ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index e55268b..f644af82 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Pavadinimas</translation> <translation id="40062176907008878">Rašymas ranka</translation> <translation id="4011112806063830608">Netrukdymo režimas įjungtas.</translation> -<translation id="4015144849380506405">Pristabdyti ir atnaujinti pelės klavišus, kai ji įjungta</translation> <translation id="4017989525502048489">Lazerinis žymeklis</translation> <translation id="401993194061514265">Žymeklis nepasiekiamas. Iš naujo atidarykite „Screencast“.</translation> <translation id="4021716437419160885">Slinkti į apačią</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Fotoaparato peržiūra pridėta apatiniame kairiajame kampe. Nesuderinama su sistemos platforma.</translation> <translation id="6605415194043280389">„Focus“ įjungtas</translation> -<translation id="660846213831377756">Pelės klavišai</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signalo stiprumas <ph name="SIGNAL_STRENGTH" />, tvarko administratorius</translation> <translation id="6612802754306526077">Pasirinktas ekrano vaizdo įrašymo režimas</translation> <translation id="6612889377159412215">papildoma užduotis</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index c729631..a5530b8 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Nosaukums</translation> <translation id="40062176907008878">Rokraksts</translation> <translation id="4011112806063830608">Ir ieslēgts režīms “Netraucēt”.</translation> -<translation id="4015144849380506405">Apturēt/atsākt peles taustiņu darbību, kad ieslēgts</translation> <translation id="4017989525502048489">Lāzera rādītājs</translation> <translation id="401993194061514265">Marķieris nav pieejams. Atkārtoti atveriet lietotni Ekrāna apraide.</translation> <translation id="4021716437419160885">Ritināt uz leju</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera pārnesta uz kreiso apakšējo stūri. Konflikts ar sistēmas virsmu.</translation> <translation id="6605415194043280389">Fokusa režīms ir ieslēgts</translation> -<translation id="660846213831377756">Peles taustiņi</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signāla stiprums: <ph name="SIGNAL_STRENGTH" />, pārvalda jūsu administrators</translation> <translation id="6612802754306526077">Atlasīts ekrāna ierakstīšanas režīms</translation> <translation id="6612889377159412215">apakšuzdevums</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index caddcfa..82752d5b 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Наслов</translation> <translation id="40062176907008878">Ракописно</translation> <translation id="4011112806063830608">„Не вознемирувај“ е вклучено.</translation> -<translation id="4015144849380506405">Паузирајте/продолжете ги копчињата за глувче кога се вклучени</translation> <translation id="4017989525502048489">Ласерски покажувач</translation> <translation id="401993194061514265">Означувачот не е достапен. Отворете ја повторно Screencast.</translation> <translation id="4021716437419160885">Оди надолу</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Камерата е поставена во долниот лев агол. Конфликт со површината на системот.</translation> <translation id="6605415194043280389">„Режимот за концентрација“ е вклучен</translation> -<translation id="660846213831377756">Копчиња за глувче</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, јачина на сигналот: <ph name="SIGNAL_STRENGTH" />, управувана од администраторот</translation> <translation id="6612802754306526077">Избран е режимот на снимање на екранот</translation> <translation id="6612889377159412215">подзадача</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index b7d1b357..3906fb8 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ശീർഷകം</translation> <translation id="40062176907008878">കൈയ്യെഴുത്ത്</translation> <translation id="4011112806063830608">'ശല്യപ്പെടുത്തരുത്' ഓണാണ്.</translation> -<translation id="4015144849380506405">മൗസ് കീകൾ ഓണായിരിക്കുമ്പോൾ താൽക്കാലികമായി നിർത്തുക/പുനരാരംഭിക്കുക</translation> <translation id="4017989525502048489">ലേസർ പോയിന്റർ</translation> <translation id="401993194061514265">മാർക്കർ ലഭ്യമല്ല. സ്ക്രീൻകാസ്റ്റ് വീണ്ടും തുറക്കുക.</translation> <translation id="4021716437419160885">താഴേയ്ക്ക് സ്ക്രോൾ ചെയ്യുക</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">താഴെ ഇടത് കോണിലേക്ക് ക്യാമറ സ്നാപ്പ് ചെയ്തു. സിസ്റ്റം സർഫേസിനെ ഓവർലാപ്പ് ചെയ്യുന്നു.</translation> <translation id="6605415194043280389">ഫോക്കസ് ഓണാണ്</translation> -<translation id="660846213831377756">മൗസ് കീകൾ</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, സിഗ്നൽ ശക്തി <ph name="SIGNAL_STRENGTH" />, നിങ്ങളുടെ അഡ്മിൻ മാനേജ് ചെയ്യുന്നത്</translation> <translation id="6612802754306526077">സ്ക്രീൻ റെക്കോർഡിംഗ് മോഡ് തിരഞ്ഞെടുത്തു</translation> <translation id="6612889377159412215">ഉപടാസ്ക്</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb index a9968ab..8131108 100644 --- a/ash/strings/ash_strings_mn.xtb +++ b/ash/strings/ash_strings_mn.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Гарчиг</translation> <translation id="40062176907008878">Гараар бичих</translation> <translation id="4011112806063830608">Бүү саад бол онцлог асаалттай байна.</translation> -<translation id="4015144849380506405">Үүнийг асаалттай үед хулганын товчийг түр зогсоох/үргэлжлүүлэх</translation> <translation id="4017989525502048489">Лазер заагч</translation> <translation id="401993194061514265">Тэмдэглэгч боломжгүй байна. Дэлгэцийн видео бичлэгийг дахин нээнэ үү.</translation> <translation id="4021716437419160885">Доош гүйлгэх</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Камерыг зүүн доод булан руу зэрэгцүүлсэн. Системийн гадаргуутай зөрчилдсөн.</translation> <translation id="6605415194043280389">Төвлөрөх горим асаалттай байна</translation> -<translation id="660846213831377756">Хулганын товч</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, дохионы хүч <ph name="SIGNAL_STRENGTH" />, таны администратор удирддаг</translation> <translation id="6612802754306526077">Дэлгэцийн үйлдэл бичих горимыг сонгосон</translation> <translation id="6612889377159412215">дэд ажил</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index 5d09d4d..6aebd6f 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">शीर्षक</translation> <translation id="40062176907008878">हस्तलेखन</translation> <translation id="4011112806063830608">व्यत्यय आणू नका सुरू आहे.</translation> -<translation id="4015144849380506405">ते सुरू असेल, तेव्हा थांबवा/पुन्हा सुरू करा माउस की</translation> <translation id="4017989525502048489">लेझर पॉइंट</translation> <translation id="401993194061514265">मार्कर उपलब्ध नाही. Screencast पुन्हा उघडा.</translation> <translation id="4021716437419160885">खाली स्क्रोल करा</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">कॅमेरा सर्वात खालच्या डाव्या कोपऱ्यात स्नॅप केला आहे. सिस्टीम सर्फेसवरील इतर ॲपवर ओव्हरलॅप होत आहे.</translation> <translation id="6605415194043280389">फोकस सुरू आहे</translation> -<translation id="660846213831377756">माउस की</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, सिग्नल क्षमता <ph name="SIGNAL_STRENGTH" />, तुमच्या अॅडमिनिस्ट्रेटरने व्यवस्थापित केलेले</translation> <translation id="6612802754306526077">स्क्रीन रेकॉर्डिंग मोड निवडला आहे</translation> <translation id="6612889377159412215">उपटास्क</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 7444b402..76f5cec 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">Tajuk</translation> <translation id="40062176907008878">Tulisan Tangan</translation> <translation id="4011112806063830608">Jangan Ganggu dihidupkan.</translation> -<translation id="4015144849380506405">Jeda/sambung semula kekunci tetikus apabila tetikus dihidupkan</translation> <translation id="4017989525502048489">Penuding laser</translation> <translation id="401993194061514265">Penanda tidak tersedia. Buka semula Screencast.</translation> <translation id="4021716437419160885">Tatal ke bawah</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera diautojajar ke penjuru kiri sebelah bawah. Bercanggah dengan permukaan sistem.</translation> <translation id="6605415194043280389">Fokus dihidupkan</translation> -<translation id="660846213831377756">Kekunci tetikus</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Kekuatan Isyarat <ph name="SIGNAL_STRENGTH" />, Diurus oleh Pentadbir anda</translation> <translation id="6612802754306526077">Mod rakaman skrin dipilih</translation> <translation id="6612889377159412215">subtugasan</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb index 436edc4..9536d92c 100644 --- a/ash/strings/ash_strings_my.xtb +++ b/ash/strings/ash_strings_my.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ခေါင်းစဉ်</translation> <translation id="40062176907008878">လက်ရေး</translation> <translation id="4011112806063830608">‘မနှောင့်ယှက်ရ’ ကို ဖွင့်ထားသည်။</translation> -<translation id="4015144849380506405">၎င်းဖွင့်ထားချိန်တွင် မောက်စ်ကီးများကို ခဏရပ်ရန်/ဆက်လုပ်ရန်</translation> <translation id="4017989525502048489">လေဆာညွှန်တံ</translation> <translation id="401993194061514265">ညွှန်မှတ် မရရှိနိုင်ပါ။ Screencast ကို ပြန်ဖွင့်ပါ။</translation> <translation id="4021716437419160885">အောက်သို့ လှိမ့်ရန်</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />၊ <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">ကင်မရာကို အောက်ဘယ်ဘက်ထောင့်သို့ ကပ်ထားသည်။ စနစ်မျက်နှာပြင်နှင့် ငြိနေသည်။</translation> <translation id="6605415194043280389">အထူးပြသမှု ဖွင့်ထားသည်</translation> -<translation id="660846213831377756">မောက်စ်ကီးများ</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />၊ လိုင်းဆွဲအား <ph name="SIGNAL_STRENGTH" />၊ သင်၏ 'ကြီးကြပ်သူ' က စီမံထားသည်</translation> <translation id="6612802754306526077">ဖန်သားပြင်ရိုက်ကူးခြင်းမုဒ် ရွေးထားသည်</translation> <translation id="6612889377159412215">လုပ်ဆောင်စရာ အပိုင်းခွဲ</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 9215e68..3f0e54c 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">शीर्षक</translation> <translation id="40062176907008878">हस्तलेखन</translation> <translation id="4011112806063830608">Do Not Disturb अन छ।</translation> -<translation id="4015144849380506405">माउस की सुविधा अन हुँदा यसलाई पज गर्नुहोस्/सुचारु गर्नुहोस्</translation> <translation id="4017989525502048489">लेजर प्वाइन्टर</translation> <translation id="401993194061514265">मार्कर उपलब्ध छैन। स्क्रिनकास्ट पुनः खोल्नुहोस्।</translation> <translation id="4021716437419160885">तलतिर स्क्रोल गर्नुहोस्</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">क्यामेरा पुछारको बायाँ कुनामा स्न्याप गरियो। सिस्टमको सतहसँग बाझियो।</translation> <translation id="6605415194043280389">फोकस मोड अन छ</translation> -<translation id="660846213831377756">माउस की सुविधा</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, सिग्नलको क्षमता <ph name="SIGNAL_STRENGTH" />, तपाईंका प्रशासकले व्यवस्थित गर्नुभएको छ</translation> <translation id="6612802754306526077">स्क्रिन रेकर्डिङ मोड चयन गरियो</translation> <translation id="6612889377159412215">उपकार्य</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index 796a789..f85f8ce 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titel</translation> <translation id="40062176907008878">Handschrift</translation> <translation id="4011112806063830608">Niet storen staat aan.</translation> -<translation id="4015144849380506405">Muisknoppen onderbreken/hervatten als dit actief is</translation> <translation id="4017989525502048489">Laserpen</translation> <translation id="401993194061514265">Stift niet beschikbaar. Open Screencast opnieuw.</translation> <translation id="4021716437419160885">Omlaag scrollen</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Camera uitgelijnd op de linkerbenedenhoek. Conflict met systeemoppervlak.</translation> <translation id="6605415194043280389">Focus staat aan</translation> -<translation id="660846213831377756">Muisknoppen</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signaalsterkte <ph name="SIGNAL_STRENGTH" />, beheerd door je beheerder</translation> <translation id="6612802754306526077">Schermopnamemodus geselecteerd</translation> <translation id="6612889377159412215">subtaak</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index bdc25c3..e8df79e2 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Tittel</translation> <translation id="40062176907008878">Håndskrift</translation> <translation id="4011112806063830608">Ikke forstyrr er på.</translation> -<translation id="4015144849380506405">Sett museknappene på pause eller gjenoppta dem når denne funksjonen er på</translation> <translation id="4017989525502048489">Laserpeker</translation> <translation id="401993194061514265">Merkepennen er ikke tilgjengelig. Åpne Screencast på nytt.</translation> <translation id="4021716437419160885">Rull ned</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" /> <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kameraet er festet til nedre venstre hjørne. Konflikt med systemoverflaten.</translation> <translation id="6605415194043280389">Fokus er på</translation> -<translation id="660846213831377756">Musetaster</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" /> – signalstyrke <ph name="SIGNAL_STRENGTH" /> – administreres av administratoren din</translation> <translation id="6612802754306526077">Skjermopptaksmodus er valgt</translation> <translation id="6612889377159412215">underoppgave</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb index 3b825c6..15906f2 100644 --- a/ash/strings/ash_strings_or.xtb +++ b/ash/strings/ash_strings_or.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ଆଖ୍ୟା</translation> <translation id="40062176907008878">ହସ୍ତଲିଖନ</translation> <translation id="4011112806063830608">"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ" ଚାଲୁ ଅଛି।</translation> -<translation id="4015144849380506405">ମାଉସ କୀ ଚାଲୁ ଥିଲେ ମାଉସ କୀଗୁଡ଼ିକୁ ବିରତ/ପୁଣି ଆରମ୍ଭ କରନ୍ତୁ</translation> <translation id="4017989525502048489">ଲେଜର୍ ପଏଣ୍ଟର୍</translation> <translation id="401993194061514265">ମାର୍କର ଉପଲବ୍ଧ ନାହିଁ। Screencastକୁ ପୁଣି ଖୋଲନ୍ତୁ।</translation> <translation id="4021716437419160885">ତଳକୁ ସ୍କ୍ରୋଲ୍ କରନ୍ତୁ</translation> @@ -1677,7 +1676,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">କ୍ୟାମେରାକୁ ନିମ୍ନ ବାମପାର୍ଶ୍ୱ କୋଣକୁ ସ୍ନାପ କରାଯାଇଛି। ସିଷ୍ଟମ ସର୍ଫେସ ସହ ବିବାଦ।</translation> <translation id="6605415194043280389">ଫୋକସ ମୋଡ ଚାଲୁ ଅଛି</translation> -<translation id="660846213831377756">ମାଉସ କୀ</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ସିଗ୍ନାଲ୍ର କ୍ଷମତା <ph name="SIGNAL_STRENGTH" />, ଆପଣଙ୍କର ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ</translation> <translation id="6612802754306526077">ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ମୋଡକୁ ଚୟନ କରାଯାଇଛି</translation> <translation id="6612889377159412215">ସବଟାସ୍କ</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index e490be5..c16390ac 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">ਸਿਰਲੇਖ</translation> <translation id="40062176907008878">ਲਿਖਾਈ</translation> <translation id="4011112806063830608">'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ' ਮੋਡ ਚਾਲੂ ਹੈ।</translation> -<translation id="4015144849380506405">ਇਸਦੇ ਚਾਲੂ ਹੋਣ 'ਤੇ ਮਾਊਸ ਕੁੰਜੀਆਂ ਨੂੰ ਰੋਕੋ/ਮੁੜ-ਚਾਲੂ ਕਰੋ</translation> <translation id="4017989525502048489">ਲੇਜ਼ਰ ਪੁਆਇੰਟਰ</translation> <translation id="401993194061514265">ਮਾਰਕਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ। ਸਕ੍ਰੀਨਕਾਸਟ ਦੁਬਾਰਾ ਖੋਲ੍ਹੋ।</translation> <translation id="4021716437419160885">ਹੇਠਾਂ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">ਕੈਮਰੇ ਨੂੰ ਹੇਠਲੇ ਖੱਬੇ ਕੋਨੇ 'ਤੇ ਵਿਵਸਥਿਤ ਕੀਤਾ ਗਿਆ। ਸਿਸਟਮ ਸਰਫ਼ੇਸ ਨਾਲ ਓਵਰਲੈਪ ਕਰਦਾ ਹੈ।</translation> <translation id="6605415194043280389">ਫੋਕਸ ਮੋਡ ਚਾਲੂ ਹੈ</translation> -<translation id="660846213831377756">ਮਾਊਸ ਕੁੰਜੀਆਂ</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ <ph name="SIGNAL_STRENGTH" />, ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation> <translation id="6612802754306526077">ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਮੋਡ ਨੂੰ ਚੁਣਿਆ ਗਿਆ</translation> <translation id="6612889377159412215">ਉਪ-ਕਾਰਜ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 3a556aa..0a24867 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Tytuł</translation> <translation id="40062176907008878">Pismo odręczne</translation> <translation id="4011112806063830608">Tryb Nie przeszkadzać jest włączony.</translation> -<translation id="4015144849380506405">Wstrzymaj/wznów klawisze myszy, gdy ta opcja jest włączona</translation> <translation id="4017989525502048489">Wskaźnik laserowy</translation> <translation id="401993194061514265">Pisak niedostępny. Otwórz ponownie Screencast.</translation> <translation id="4021716437419160885">Przewiń w dół</translation> @@ -1677,7 +1676,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Podgląd z kamery został przyciągnięty do lewego dolnego rogu. Konflikt z obszarem systemowym.</translation> <translation id="6605415194043280389">Tryb skupienia jest włączony</translation> -<translation id="660846213831377756">Klawisze myszy</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, siła sygnału: <ph name="SIGNAL_STRENGTH" />, zarządzana przez administratora</translation> <translation id="6612802754306526077">Wybrano tryb nagrywania ekranu</translation> <translation id="6612889377159412215">zadanie podrzędne</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index 5cc2acb..926fb74f 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Título</translation> <translation id="40062176907008878">Escrita à mão</translation> <translation id="4011112806063830608">O "Não perturbe" está ativado.</translation> -<translation id="4015144849380506405">Pausar/retomar as teclas do mouse quando estiver ativado</translation> <translation id="4017989525502048489">Apontador laser</translation> <translation id="401993194061514265">Marcador indisponível; Abra o Screencast novamente.</translation> <translation id="4021716437419160885">Rolar para baixo</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />: <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Câmera alinhada ao canto esquerdo de baixo. Conflito com a superfície do sistema.</translation> <translation id="6605415194043280389">O Foco está ativado</translation> -<translation id="660846213831377756">Teclas do mouse</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, intensidade do sinal em <ph name="SIGNAL_STRENGTH" />, gerenciada pelo seu administrador</translation> <translation id="6612802754306526077">Modo de gravação de tela selecionado</translation> <translation id="6612889377159412215">subtarefa</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index d0e24f6..8b9b594 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Título</translation> <translation id="40062176907008878">Escrita manual</translation> <translation id="4011112806063830608">O modo Não incomodar está ativado.</translation> -<translation id="4015144849380506405">Pausar/retomar teclas do rato quando a opção está ativada</translation> <translation id="4017989525502048489">Ponteiro de laser</translation> <translation id="401993194061514265">Marcador indisponível. Reabra o Screencast.</translation> <translation id="4021716437419160885">Deslocar para baixo</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Câmara ajustada ao canto inferior esquerdo. Há um conflito com a superfície do sistema.</translation> <translation id="6605415194043280389">O Modo sem distrações está ativado</translation> -<translation id="660846213831377756">Teclas do rato</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, intensidade do sinal: <ph name="SIGNAL_STRENGTH" />, gerida pelo administrador</translation> <translation id="6612802754306526077">Modo de gravação de ecrã selecionado</translation> <translation id="6612889377159412215">subtarefa</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index 874f62c..45be711 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titlu</translation> <translation id="40062176907008878">Scriere de mână</translation> <translation id="4011112806063830608">Funcția Nu deranja este activată.</translation> -<translation id="4015144849380506405">Întrerupe / reia tastele mouse-ului când este activată</translation> <translation id="4017989525502048489">Indicator laser</translation> <translation id="401993194061514265">Marcatorul este indisponibil. Redeschide Screencast.</translation> <translation id="4021716437419160885">Derulează în jos</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" /> <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Camera foto este aliniată cu colțul din stânga jos. Conflict cu platforma de sistem.</translation> <translation id="6605415194043280389">Modul Focus este activat</translation> -<translation id="660846213831377756">Tastele mouse-ului</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, puterea semnalului: <ph name="SIGNAL_STRENGTH" />, gestionată de administratorul tău</translation> <translation id="6612802754306526077">Modul de înregistrare a ecranului selectat</translation> <translation id="6612889377159412215">sarcină secundară</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 7122b968..49f47fb 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Название</translation> <translation id="40062176907008878">Рукописный ввод</translation> <translation id="4011112806063830608">Сейчас он включен.</translation> -<translation id="4015144849380506405">Деактивировать/активировать кнопки мыши</translation> <translation id="4017989525502048489">Лазерная указка</translation> <translation id="401993194061514265">Фломастер недоступен. Закройте и снова откройте Screencast.</translation> <translation id="4021716437419160885">Прокрутить вниз</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Окно предварительного просмотра камеры привязано к левому нижнему углу, так как перекрывало элементы системного интерфейса</translation> <translation id="6605415194043280389">Режим концентрации внимания включен</translation> -<translation id="660846213831377756">Клавиши управления мышью</translation> <translation id="661203523074512333">Статус защиты – "<ph name="SECURITY_STATUS" />", уровень сигнала – <ph name="SIGNAL_STRENGTH" />, под управлением администратора</translation> <translation id="6612802754306526077">Выбран режим записи видео с экрана</translation> <translation id="6612889377159412215">подзадача</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb index ca2a6f9f..43049dd 100644 --- a/ash/strings/ash_strings_si.xtb +++ b/ash/strings/ash_strings_si.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">සිරස්තලය</translation> <translation id="40062176907008878">අත් අකුරු</translation> <translation id="4011112806063830608">බාධා නොකරන්න ක්රියාත්මකයි.</translation> -<translation id="4015144849380506405">මූසික යතුරු ක්රියාත්මක වූ විට විරාම කරන්න/නැවත ආරම්භ කරන්න</translation> <translation id="4017989525502048489">ලේසර් මුද්රණ යන්ත්රය</translation> <translation id="401993194061514265">ලකුණුකරය නොමැත. Screencast යළි විවෘත කරන්න.</translation> <translation id="4021716437419160885">පහළට අනුචලනය කරන්න</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">කැමරාව පහළ වම් කෙළවරට සවි කර ඇත. පද්ධති මතුපිට සමග ගැටුම.</translation> <translation id="6605415194043280389">අවධානය සක්රීයයි</translation> -<translation id="660846213831377756">මූසික යතුරු</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, සංඥා ප්රබලතාව <ph name="SIGNAL_STRENGTH" />, ඔබේ පරිපාලකයා විසින් කළමනාකරණය කරයි</translation> <translation id="6612802754306526077">තිර පටිගත කිරීම් ප්රකාරය තෝරන ලදි</translation> <translation id="6612889377159412215">උප කාර්යය</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index aff9adb..63cfd11 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Názov</translation> <translation id="40062176907008878">Napísať ručne</translation> <translation id="4011112806063830608">Režim bez vyrušení je zapnutý.</translation> -<translation id="4015144849380506405">Pozastavenie alebo obnova klávesov myši, keď je funkcia zapnutá</translation> <translation id="4017989525502048489">Laserový ukazovateľ</translation> <translation id="401993194061514265">Značka nie je k dispozícii. Znova otvorte Screencast.</translation> <translation id="4021716437419160885">Posunúť nadol</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera bola prichytená do ľavého dolného rohu. Konflikt s platformou systému.</translation> <translation id="6605415194043280389">Zameranie je zapnuté</translation> -<translation id="660846213831377756">Klávesy myši</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, sila signálu <ph name="SIGNAL_STRENGTH" />, ovládané správcom</translation> <translation id="6612802754306526077">Bol vybraný režim nahrávania obrazovky</translation> <translation id="6612889377159412215">podradená úloha</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 72159f2..f59b55a2 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Naslov</translation> <translation id="40062176907008878">Rokopis</translation> <translation id="4011112806063830608">Način »Ne moti« je vklopljen.</translation> -<translation id="4015144849380506405">Zaustavitev/nadaljevanje tipk miške, ko je vklopljeno</translation> <translation id="4017989525502048489">Laserski kazalnik</translation> <translation id="401993194061514265">Označevalnik ni na voljo. Znova odprite aplikacijo Snemanje zaslona.</translation> <translation id="4021716437419160885">Pomik navzdol</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Fotoaparat je pripet v spodnji levi kot. To je v navzkrižju s sistemskim okoljem.</translation> <translation id="6605415194043280389">Osredotočenost je vklopljena</translation> -<translation id="660846213831377756">Tipke miške</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, moč signala je <ph name="SIGNAL_STRENGTH" />, upravlja ga vaš skrbnik</translation> <translation id="6612802754306526077">Način snemanja zaslona je izbran</translation> <translation id="6612889377159412215">podpravilo</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb index fdf3a5d..c9795fb 100644 --- a/ash/strings/ash_strings_sq.xtb +++ b/ash/strings/ash_strings_sq.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titulli</translation> <translation id="40062176907008878">Shkrim dore</translation> <translation id="4011112806063830608">Modaliteti "Mos shqetëso" është aktiv.</translation> -<translation id="4015144849380506405">Vendos në pauzë/rinis butonat e miut kur është aktiv</translation> <translation id="4017989525502048489">Treguesi me lazer</translation> <translation id="401993194061514265">Shënuesi nuk ofrohet. Rihap "Transmetimin e ekranit".</translation> <translation id="4021716437419160885">Lëviz poshtë</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Pamja paraprake e kamerës ka kaluar në këndin e poshtëm majtas. Në konflikt me sipërfaqen e sistemit.</translation> <translation id="6605415194043280389">"Fokusi" është aktiv</translation> -<translation id="660846213831377756">Butonat e miut</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, fuqia e sinjalit <ph name="SIGNAL_STRENGTH" />, menaxhuar nga administratori yt</translation> <translation id="6612802754306526077">U zgjodh modaliteti i regjistrimit të ekranit</translation> <translation id="6612889377159412215">nëndetyrë</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index 78003a8..050b30e 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Naslov</translation> <translation id="40062176907008878">Pisanje rukom</translation> <translation id="4011112806063830608">Režim Ne uznemiravaj je uključen.</translation> -<translation id="4015144849380506405">Pauzirajte/nastavite radnje tastera miša kada je uključen</translation> <translation id="4017989525502048489">Laserski pokazivač</translation> <translation id="401993194061514265">Marker nije dostupan. Ponovo otvorite Snimanje ekrana.</translation> <translation id="4021716437419160885">Pomeri nadole</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera je uklopljena u donji levi ugao. Neusaglašenost sa površinom sistema.</translation> <translation id="6605415194043280389">Fokus je uključen</translation> -<translation id="660846213831377756">Tasteri miša</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja administrator</translation> <translation id="6612802754306526077">Režim snimanja ekrana je izabran</translation> <translation id="6612889377159412215">podzadatak</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index 1368b779..ad8c09e 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Наслов</translation> <translation id="40062176907008878">Писање руком</translation> <translation id="4011112806063830608">Режим Не узнемиравај је укључен.</translation> -<translation id="4015144849380506405">Паузирајте/наставите радње тастера миша када је укључен</translation> <translation id="4017989525502048489">Ласерски показивач</translation> <translation id="401993194061514265">Маркер није доступан. Поново отворите Снимање екрана.</translation> <translation id="4021716437419160885">Помери надоле</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Камера је уклопљена у доњи леви угао. Неусаглашеност са површином система.</translation> <translation id="6605415194043280389">Фокус је укључен</translation> -<translation id="660846213831377756">Тастери миша</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, јачина сигнала <ph name="SIGNAL_STRENGTH" />, управља администратор</translation> <translation id="6612802754306526077">Режим снимања екрана је изабран</translation> <translation id="6612889377159412215">подзадатак</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index c27f8e14..3188a07 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Titel</translation> <translation id="40062176907008878">Handskrift</translation> <translation id="4011112806063830608">Stör ej är aktiverat.</translation> -<translation id="4015144849380506405">Pausa/återuppta musknappar när funktionen är aktiverad</translation> <translation id="4017989525502048489">Laserpekare</translation> <translation id="401993194061514265">Markören är inte tillgänglig. Öppna Screencast igen.</translation> <translation id="4021716437419160885">Scrolla ned</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kameran har fästs i det nedre vänstra hörnet. Konflikt med systemyta.</translation> <translation id="6605415194043280389">Fokus är på</translation> -<translation id="660846213831377756">Musknappar</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, signalstyrka <ph name="SIGNAL_STRENGTH" />, hanteras av administratören</translation> <translation id="6612802754306526077">Skärminspelningsläget har valts</translation> <translation id="6612889377159412215">deluppgift</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index ba4952b5..45e7f5d 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Kichwa</translation> <translation id="40062176907008878">Mwandiko</translation> <translation id="4011112806063830608">Kipengele cha Usinisumbue kimewashwa.</translation> -<translation id="4015144849380506405">Kusitisha au kurejesha vitufe vya kipanya kikiwa kimewashwa</translation> <translation id="4017989525502048489">Kielekezi cha leza</translation> <translation id="401993194061514265">Kitia alama hakipatikani. Fungua tena programu ya Kurekodi skrini.</translation> <translation id="4021716437419160885">Sogeza chini</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Onyesho la kukagua kamera limelinganishwa kwenye kona ya chini kushoto. Linakinzana na mfumo wa kiolesura uliopo.</translation> <translation id="6605415194043280389">Umewasha hali ya kumakinika</translation> -<translation id="660846213831377756">Vitufe vya kipanya</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Uthabiti wa Mtandao <ph name="SIGNAL_STRENGTH" />, Unadhibitiwa na Msimamizi wako</translation> <translation id="6612802754306526077">Umechagua hali ya kurekodi skrini</translation> <translation id="6612889377159412215">jukumu dogo</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index 6d698041..703bdd0 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">தலைப்பு</translation> <translation id="40062176907008878">கையெழுத்து</translation> <translation id="4011112806063830608">'தொந்தரவு செய்ய வேண்டாம்' அம்சம் இயக்கப்பட்டுள்ளது.</translation> -<translation id="4015144849380506405">இயக்கப்பட்டிருக்கும்போது மவுஸ் பட்டன்களை இடைநிறுத்த/மீண்டும் தொடங்க</translation> <translation id="4017989525502048489">லேசர் பாயிண்டர்</translation> <translation id="401993194061514265">அடையாளங்காட்டி இல்லை. Screencast ஆப்ஸ் மீண்டும் திறக்கும்.</translation> <translation id="4021716437419160885">கீழே நகர்த்து</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">கேமரா மாதிரிக்காட்சி கீழ் இடது மூலையில் பொருத்தப்பட்டது. ஏனெனில் சிஸ்டத்தின் காட்சியை இது மறைக்கும்.</translation> <translation id="6605415194043280389">ஃபோகஸ் பயன்முறை இயக்கப்பட்டுள்ளது</translation> -<translation id="660846213831377756">மவுஸ் பட்டன்கள்</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, சிக்னல் வலிமை: <ph name="SIGNAL_STRENGTH" />, உங்கள் நிர்வாகி நிர்வகிக்கிறார்</translation> <translation id="6612802754306526077">ஸ்கிரீன் ரெக்கார்டிங் பயன்முறை தேர்ந்தெடுக்கப்பட்டது</translation> <translation id="6612889377159412215">உட்பணி</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index 5d5ac258..a638e85 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -874,7 +874,6 @@ <translation id="4002066346123236978">శీర్షిక</translation> <translation id="40062176907008878">చేతిరాత</translation> <translation id="4011112806063830608">'అంతరాయం కలిగించవద్దు' ఫీచర్ ఆన్లో ఉంది.</translation> -<translation id="4015144849380506405">మౌస్ కీలు ఆన్లో ఉన్నప్పుడు పాజ్ చేయండి/కొనసాగించండి</translation> <translation id="4017989525502048489">లేజర్ పాయింటర్</translation> <translation id="401993194061514265">మార్కర్ అందుబాటులో లేదు. స్క్రీన్కాస్ట్ను మళ్లీ తెరవండి.</translation> <translation id="4021716437419160885">కిందికి స్క్రోల్ చేయి</translation> @@ -1679,7 +1678,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">కెమెరా దిగువ ఎడమ మూలకు స్నాప్ చేయబడింది. సిస్టమ్ ప్లాట్ఫామ్కు విరుద్ధంగా.</translation> <translation id="6605415194043280389">ఫోకస్ ఆన్లో ఉంది</translation> -<translation id="660846213831377756">మౌస్ కీలు</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతోంది</translation> <translation id="6612802754306526077">స్క్రీన్ రికార్డింగ్ మోడ్ ఎంచుకోబడింది</translation> <translation id="6612889377159412215">సబ్టాస్క్</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index 5985c5c6b..5fbe9c7 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -869,7 +869,6 @@ <translation id="4002066346123236978">ชื่อ</translation> <translation id="40062176907008878">การเขียนด้วยลายมือ</translation> <translation id="4011112806063830608">โหมดห้ามรบกวนเปิดอยู่</translation> -<translation id="4015144849380506405">หยุดชั่วคราว/ใช้งานแป้นเมาส์ต่อเมื่อเปิดอยู่</translation> <translation id="4017989525502048489">ตัวชี้เลเซอร์</translation> <translation id="401993194061514265">ตัวทำเครื่องหมายไม่พร้อมใช้งาน เปิด Screencast อีกครั้ง</translation> <translation id="4021716437419160885">เลื่อนลง</translation> @@ -1673,7 +1672,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">จัดกล้องพอดีกับมุมซ้ายล่างแล้ว เนื่องจากขัดแย้งกับแพลตฟอร์มของระบบ</translation> <translation id="6605415194043280389">โหมดโฟกัสเปิดอยู่</translation> -<translation id="660846213831377756">แป้นเมาส์</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, ความแรงสัญญาณ <ph name="SIGNAL_STRENGTH" />, จัดการโดยผู้ดูแลระบบ</translation> <translation id="6612802754306526077">เลือกโหมดบันทึกหน้าจอแล้ว</translation> <translation id="6612889377159412215">งานย่อย</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index a094890..71aa2641 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Başlık</translation> <translation id="40062176907008878">El Yazısı</translation> <translation id="4011112806063830608">Rahatsız Etmeyin modu açık.</translation> -<translation id="4015144849380506405">Açıkken fare tuşlarını duraklat/devam ettir</translation> <translation id="4017989525502048489">Lazer işaretçi</translation> <translation id="401993194061514265">İşaretçi kullanılamıyor. Ekran Kaydı'nı tekrar açın.</translation> <translation id="4021716437419160885">Aşağı kaydır</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera sol alt köşeye tutturuldu. Sistem yüzeyi ile çakışıyor.</translation> <translation id="6605415194043280389">Odaklanma açık</translation> -<translation id="660846213831377756">Fare tuşları</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, <ph name="SIGNAL_STRENGTH" /> Sinyal Gücü, Yöneticiniz tarafından yönetiliyor</translation> <translation id="6612802754306526077">Ekran kaydetme modu seçildi</translation> <translation id="6612889377159412215">alt görev</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index a5c0d0d1..8c0f6c4 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Назва</translation> <translation id="40062176907008878">Рукописне введення</translation> <translation id="4011112806063830608">Режим "Не турбувати" ввімкнено.</translation> -<translation id="4015144849380506405">Призупинити/відновити роботу клавіш миші, коли цю функцію ввімкнено</translation> <translation id="4017989525502048489">Лазерний вказівник</translation> <translation id="401993194061514265">Маркер недоступний. Ще раз відкрийте додаток Запис екрана.</translation> <translation id="4021716437419160885">Прокрутити вниз</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Зображення з камери закріплено в нижньому лівому куті, що конфліктує із системною платформою.</translation> <translation id="6605415194043280389">Режим концентрації уваги ввімкнено</translation> -<translation id="660846213831377756">Клавіші миші</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, рівень сигналу – <ph name="SIGNAL_STRENGTH" />. Мережею керує адміністратор</translation> <translation id="6612802754306526077">Вибрано режим запису екрана</translation> <translation id="6612889377159412215">підзавдання</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index 6718b5d7..f1143cc4 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">عنوان</translation> <translation id="40062176907008878">ہینڈ رائٹنگ</translation> <translation id="4011112806063830608">'ڈسٹرب نہ کریں' آن ہے۔</translation> -<translation id="4015144849380506405">ماؤس کیز آن ہونے پر اسے روکیں/دوبارہ شروع کریں</translation> <translation id="4017989525502048489">لیزر پوائنٹر</translation> <translation id="401993194061514265">مارکر دستیاب نہیں ہے۔ اسکرین کاسٹ دوبارہ کھولیں۔</translation> <translation id="4021716437419160885">نیچے اسکرول کریں</translation> @@ -1677,7 +1676,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />، <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">کیمرا نیچے بائیں کونے میں اسنیپ کیا گیا ہے۔ سسٹم کی سطح سے متصادم ہے۔</translation> <translation id="6605415194043280389">فوکس آن ہے</translation> -<translation id="660846213831377756">ماؤس کیز</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />، سگنل کی مضبوطی <ph name="SIGNAL_STRENGTH" />، آپ کے منتظم کے زیر انتظام ہے</translation> <translation id="6612802754306526077">اسکرین ریکارڈنگ موڈ کا انتخاب کیا گیا</translation> <translation id="6612889377159412215">ذیلی ٹاسک</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index f17c9b9..eb245d8 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Nomi</translation> <translation id="40062176907008878">Qoʻlyozma</translation> <translation id="4011112806063830608">Bezovta qilinmasin rejimi yoniq.</translation> -<translation id="4015144849380506405">Sichqoncha tugmalarini faolsizlantirish/yoqish</translation> <translation id="4017989525502048489">Lazerli ko‘rsatkich</translation> <translation id="401993194061514265">Marker ishlamayapti. Skrinkastni qayta ochish.</translation> <translation id="4021716437419160885">Pastga tushish</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Kamera pastki chap burchakka joylandi. Tizim platfromasi bilan muammo chiqdi.</translation> <translation id="6605415194043280389">Fokus yoniq</translation> -<translation id="660846213831377756">Sinchqoncha tugmalari</translation> <translation id="661203523074512333">Himoya: <ph name="SECURITY_STATUS" />, Signal darajasi: <ph name="SIGNAL_STRENGTH" />, Administrator boshqaruvida</translation> <translation id="6612802754306526077">Ekranni yozib olish rejimi tanlandi</translation> <translation id="6612889377159412215">ichki vazifa</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 77d1084..52fcaa6 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Tiêu đề</translation> <translation id="40062176907008878">Chữ viết tay</translation> <translation id="4011112806063830608">Chế độ Không làm phiền đang bật.</translation> -<translation id="4015144849380506405">Tạm dừng/tiếp tục phím chuột khi bật</translation> <translation id="4017989525502048489">Con trỏ laser</translation> <translation id="401993194061514265">Hiện không có điểm đánh dấu. Hãy mở lại Screencast.</translation> <translation id="4021716437419160885">Cuộn xuống</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Máy ảnh đang bám theo góc dưới bên trái. Xung đột với khu vực hệ thống.</translation> <translation id="6605415194043280389">Chế độ Tập trung đang bật</translation> -<translation id="660846213831377756">Phím chuột</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />, Cường độ tín hiệu <ph name="SIGNAL_STRENGTH" />, Do quản trị viên của bạn quản lý</translation> <translation id="6612802754306526077">Đã chọn chế độ ghi màn hình</translation> <translation id="6612889377159412215">việc phụ cần làm</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index 9117d61..66aa7f8 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">标题</translation> <translation id="40062176907008878">手写</translation> <translation id="4011112806063830608">“勿扰”模式处于开启状态。</translation> -<translation id="4015144849380506405">处于开启状态时暂停/恢复使用鼠标按键</translation> <translation id="4017989525502048489">激光笔</translation> <translation id="401993194061514265">无法使用标记。请重新打开“屏幕录制”应用。</translation> <translation id="4021716437419160885">向下滚动</translation> @@ -1676,7 +1675,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />,<ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">相机已对准左下角。与系统界面冲突。</translation> <translation id="6605415194043280389">专注模式已开启</translation> -<translation id="660846213831377756">鼠标按键</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />,信号强度为 <ph name="SIGNAL_STRENGTH" />,由您的管理员管理</translation> <translation id="6612802754306526077">已选择录屏模式</translation> <translation id="6612889377159412215">子任务</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index 8c6cadb..6308a19a 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">標題</translation> <translation id="40062176907008878">手寫</translation> <translation id="4011112806063830608">「請勿騷擾」模式已開啟。</translation> -<translation id="4015144849380506405">處於啟用狀態時暫停/恢復滑鼠按鍵</translation> <translation id="4017989525502048489">雷射筆</translation> <translation id="401993194061514265">無法使用標記,請重新開啟螢幕錄影應用程式。</translation> <translation id="4021716437419160885">向下捲動</translation> @@ -1676,7 +1675,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />,<ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">攝錄機已經對齊左下角,同系統平台有衝突。</translation> <translation id="6605415194043280389">「專注模式」已開啟</translation> -<translation id="660846213831377756">滑鼠按鍵</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />,訊號強度係 <ph name="SIGNAL_STRENGTH" />,由管理員管理</translation> <translation id="6612802754306526077">揀咗螢幕錄影模式</translation> <translation id="6612889377159412215">子工作</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index f8ca222..d2c3fb3 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -871,7 +871,6 @@ <translation id="4002066346123236978">標題</translation> <translation id="40062176907008878">手寫</translation> <translation id="4011112806063830608">零打擾模式已開啟。</translation> -<translation id="4015144849380506405">開啟時暫停/繼續使用滑鼠按鍵</translation> <translation id="4017989525502048489">雷射筆</translation> <translation id="401993194061514265">無法使用標記功能,請重新開啟螢幕側錄應用程式。</translation> <translation id="4021716437419160885">向下捲動</translation> @@ -1674,7 +1673,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />,<ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">攝影機已對齊左下角,與系統平台發生衝突。</translation> <translation id="6605415194043280389">專注模式已開啟</translation> -<translation id="660846213831377756">滑鼠按鍵</translation> <translation id="661203523074512333"><ph name="SECURITY_STATUS" />,訊號強度 <ph name="SIGNAL_STRENGTH" />,由系統管理員管理</translation> <translation id="6612802754306526077">已選取螢幕畫面錄製模式</translation> <translation id="6612889377159412215">子工作</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb index a85fdd6..694ee3e 100644 --- a/ash/strings/ash_strings_zu.xtb +++ b/ash/strings/ash_strings_zu.xtb
@@ -873,7 +873,6 @@ <translation id="4002066346123236978">Isihloko</translation> <translation id="40062176907008878">Ukubhala ngesandla</translation> <translation id="4011112806063830608">Okuthi Ungaphazamisi kuvuliwe.</translation> -<translation id="4015144849380506405">Misa/qhubeka nezinkinobho zemouse uma isivuliwe</translation> <translation id="4017989525502048489">Isikhombi se-Laser</translation> <translation id="401993194061514265">Umaka awutholakali. Phinda uvule i-Screencast.</translation> <translation id="4021716437419160885">Skrolela phansi</translation> @@ -1678,7 +1677,6 @@ <translation id="6593850935013518327"><ph name="PRIMARY_TEXT" />, <ph name="SECONDARY_TEXT" /></translation> <translation id="6597278316891651699">Ikhamera iqondaniswe ekhoneni elingezansi ngakwesokudla Ukungqubuzana nendawo yesistimu.</translation> <translation id="6605415194043280389">Ukugxilisa kuvuliwe</translation> -<translation id="660846213831377756">Izinkinobho zemouse</translation> <translation id="661203523074512333">I-<ph name="SECURITY_STATUS" />, Amandla esignali angu-<ph name="SIGNAL_STRENGTH" />, iphethwe umlawuli wakho</translation> <translation id="6612802754306526077">Imodi yokurekhoda isikrini ikhethiwe</translation> <translation id="6612889377159412215">umsebenzi ongaphansi</translation>
diff --git a/base/files/file_path.cc b/base/files/file_path.cc index 0329da8f..f7aa217 100644 --- a/base/files/file_path.cc +++ b/base/files/file_path.cc
@@ -213,14 +213,6 @@ #endif // defined(FILE_PATH_USES_DRIVE_LETTERS) } -bool FilePath::operator!=(const FilePath& that) const { -#if defined(FILE_PATH_USES_DRIVE_LETTERS) - return !EqualDriveLetterCaseInsensitive(this->path_, that.path_); -#else // defined(FILE_PATH_USES_DRIVE_LETTERS) - return path_ != that.path_; -#endif // defined(FILE_PATH_USES_DRIVE_LETTERS) -} - std::ostream& operator<<(std::ostream& out, const FilePath& file_path) { return out << file_path.value(); }
diff --git a/base/files/file_path.h b/base/files/file_path.h index 136ba9f..a70ef1e 100644 --- a/base/files/file_path.h +++ b/base/files/file_path.h
@@ -209,12 +209,12 @@ // unspecified state. FilePath& operator=(FilePath&& that) noexcept; + // On systems which use drive letters, the drive letters are compared + // case-insensitively. bool operator==(const FilePath& that) const; - bool operator!=(const FilePath& that) const; - // Required for some STL containers and operations - bool operator<(const FilePath& that) const { return path_ < that.path_; } + auto operator<=>(const FilePath& that) const = default; const StringType& value() const LIFETIME_BOUND { return path_; }
diff --git a/base/test/perf_test_suite.cc b/base/test/perf_test_suite.cc index 66688b7d..8158e9b 100644 --- a/base/test/perf_test_suite.cc +++ b/base/test/perf_test_suite.cc
@@ -10,7 +10,6 @@ #include "base/path_service.h" #include "base/process/launch.h" #include "base/strings/string_util.h" -#include "base/test/allow_check_is_test_for_testing.h" #include "base/test/perf_log.h" #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" @@ -27,8 +26,6 @@ void PerfTestSuite::Initialize() { TestSuite::Initialize(); - test::AllowCheckIsTestForTesting(); - // Initialize the perf timer log FilePath log_path = CommandLine::ForCurrentProcess()->GetSwitchValuePath("log-file");
diff --git a/base/tools_sanity_unittest.cc b/base/tools_sanity_unittest.cc index 10758f2..1500a6f 100644 --- a/base/tools_sanity_unittest.cc +++ b/base/tools_sanity_unittest.cc
@@ -234,8 +234,8 @@ TEST(ToolsSanityTest, DISABLED_AddressSanitizerLocalOOBCrashTest) { // Intentionally crash to make sure AddressSanitizer is instrumenting // the local variables. - // This test should not be ran on bots. - std::array<int, 5> array; + // This test should not be run on bots. + int array[5]; // Must not use std::array, lest hardening catch this first. // Work around the OOB warning reported by Clang. int* volatile access = &array[5]; *access = 43;
diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc index 57e6118..e090401 100644 --- a/base/trace_event/trace_event_unittest.cc +++ b/base/trace_event/trace_event_unittest.cc
@@ -1331,7 +1331,13 @@ } }; -TEST_F(TraceEventTestFixture, ConvertableTypes) { +// crbug.com/325641473: Flaky on Mac due to missing last event. +#if BUILDFLAG(IS_APPLE) +#define MAYBE_ConvertableTypes DISABLED_ConvertableTypes +#else +#define MAYBE_ConvertableTypes ConvertableTypes +#endif +TEST_F(TraceEventTestFixture, MAYBE_ConvertableTypes) { TraceLog::GetInstance()->SetEnabled( TraceConfig(kRecordAllCategoryFilter, "")); @@ -1424,7 +1430,13 @@ ASSERT_TRUE(convertable_dict); } -TEST_F(TraceEventTestFixture, PrimitiveArgs) { +// crbug.com/325641473: Flaky on Mac due to missing last event. +#if BUILDFLAG(IS_APPLE) +#define MAYBE_PrimitiveArgs DISABLED_PrimitiveArgs +#else +#define MAYBE_PrimitiveArgs PrimitiveArgs +#endif +TEST_F(TraceEventTestFixture, MAYBE_PrimitiveArgs) { TraceLog::GetInstance()->SetEnabled( TraceConfig(kRecordAllCategoryFilter, ""));
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni index fd5e668..2ef8353 100644 --- a/buildtools/deps_revisions.gni +++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@ declare_args() { # Used to cause full rebuilds on libc++ rolls. This should be kept in sync # with the libcxx_revision var in //DEPS. - libcxx_revision = "74dd760826063f15ce4d373b31bc34d1c65e41c2" + libcxx_revision = "2e25154d49c29fa9aa42c30ad4a027bd30123434" }
diff --git a/cc/raster/raster_buffer_provider.cc b/cc/raster/raster_buffer_provider.cc index 202b3e8..81f74210 100644 --- a/cc/raster/raster_buffer_provider.cc +++ b/cc/raster/raster_buffer_provider.cc
@@ -59,7 +59,8 @@ DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format.ToString(); - SkColorType color_type = ToClosestSkColorType(gpu_compositing, format); + SkColorType color_type = + ToClosestSkColorTypeDeprecated(gpu_compositing, format); // Uses kPremul_SkAlphaType since the result is not known to be opaque. SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), color_type, @@ -104,8 +105,8 @@ TRACE_EVENT0("cc", "RasterBufferProvider::PlaybackToMemory::ConvertRGBA4444"); - SkImageInfo dst_info = - info.makeColorType(ToClosestSkColorType(gpu_compositing, format)); + SkImageInfo dst_info = info.makeColorType( + ToClosestSkColorTypeDeprecated(gpu_compositing, format)); auto dst_canvas = SkCanvas::MakeRasterDirect(dst_info, memory, stride, &surface_props); DCHECK(dst_canvas);
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc index bc34a41..0d3a553 100644 --- a/cc/tiles/tile_manager_unittest.cc +++ b/cc/tiles/tile_manager_unittest.cc
@@ -2159,7 +2159,7 @@ EXPECT_TRUE(tile->draw_info().IsReadyToDraw()); gfx::Size resource_size = tile->draw_info().resource_size(); - SkColorType ct = ToClosestSkColorType( + SkColorType ct = ToClosestSkColorTypeDeprecated( TestSoftwareRasterBufferProvider::kIsGpuCompositing, TestSoftwareRasterBufferProvider::kSharedImageFormat); auto info = SkImageInfo::Make(resource_size.width(), resource_size.height(),
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index f5aa65cb..2f44dff 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -248,8 +248,7 @@ size_t decoded_image_working_set_budget_bytes, RasterDarkModeFilter* dark_mode_filter) { if (raster_caps.use_gpu_rasterization) { - auto color_type = viz::ToClosestSkColorType( - /*gpu_compositing=*/true, raster_caps.tile_format); + auto color_type = viz::ToClosestSkColorType(raster_caps.tile_format); if (enable_shared_image_cache_for_gpu) { image_decode_cache_ptr_ = &worker_context_provider_wrapper->GetGpuImageDecodeCache( @@ -263,7 +262,8 @@ } } else { image_decode_cache_ = std::make_unique<SoftwareImageDecodeCache>( - viz::ToClosestSkColorType(gpu_compositing, raster_caps.tile_format), + viz::ToClosestSkColorTypeDeprecated(gpu_compositing, + raster_caps.tile_format), decoded_image_working_set_budget_bytes); }
diff --git a/chrome/VERSION b/chrome/VERSION index 9d30fcb9..ff876dd 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=134 MINOR=0 -BUILD=6955 +BUILD=6956 PATCH=0
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java index 723963a..0960543 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -709,7 +709,7 @@ } @Override - public void didMergeTabToGroup(Tab movedTab, int selectedTabIdInGroup) { + public void didMergeTabToGroup(Tab movedTab) { assert mShowingTabs; TabGroupModelFilter filter = mCurrentTabGroupModelFilterSupplier.get();
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java index 99220950..d9cff5d 100644 --- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java +++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediatorUnitTest.java
@@ -1139,7 +1139,7 @@ .thenReturn(Arrays.asList(mTab1, mTab2)); when(mTabModel.indexOf(mTab1)).thenReturn(POSITION1); when(mTabModel.indexOf(mTab2)).thenReturn(POSITION2); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2, TAB1_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2); assertThat(mModelList.size(), equalTo(3)); mFakeViewHolder1 = prepareFakeViewHolder(mItemView1, 0); @@ -1164,7 +1164,7 @@ when(mTabGroupModelFilter.getRelatedTabList(TAB3_ID)).thenReturn(Arrays.asList(tab3, tab4)); when(mTabModel.indexOf(tab3)).thenReturn(2); when(mTabModel.indexOf(tab4)).thenReturn(3); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(tab4, TAB3_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(tab4); assertThat(mModelList.size(), equalTo(2)); mFakeViewHolder1 = prepareFakeViewHolder(mItemView1, 0); @@ -1186,7 +1186,7 @@ when(mTabGroupModelFilter.getRelatedTabList(TAB3_ID)) .thenReturn(Arrays.asList(mTab1, mTab2, tab3, tab4)); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(tab3, TAB1_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(tab3); assertThat(mModelList.size(), equalTo(1)); } @@ -1734,7 +1734,7 @@ assertNotNull(mModelList.get(0).model.get(TabProperties.FAVICON_FETCHER)); assertNotNull(mModelList.get(1).model.get(TabProperties.FAVICON_FETCHER)); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab1, TAB2_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab1); assertThat(mModelList.size(), equalTo(1)); assertThat(mModelList.get(0).model.get(TabProperties.TAB_ID), equalTo(TAB1_ID)); @@ -1762,7 +1762,7 @@ assertNotNull(mModelList.get(1).model.get(TabProperties.FAVICON_FETCHER)); mTabGroupModelFilter.setTabGroupTitle(mTab1.getRootId(), CUSTOMIZED_DIALOG_TITLE1); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab1, TAB2_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab1); assertThat(mModelList.size(), equalTo(1)); assertThat(mModelList.get(0).model.get(TabProperties.TAB_ID), equalTo(TAB1_ID)); @@ -1789,7 +1789,7 @@ createTabGroup(List.of(mTab1, mTab2), TAB1_ID, TAB_GROUP_ID); when(mTabGroupModelFilter.getGroupLastShownTabId(TAB1_ID)).thenReturn(TAB1_ID); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2, TAB1_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2); assertThat(mModelList.size(), equalTo(2)); assertThat(mModelList.get(0).model.get(TabProperties.TAB_ID), equalTo(TAB1_ID)); @@ -1813,7 +1813,7 @@ createTabGroup(List.of(mTab2), TAB2_ID, new Token(7, 9)); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2, TAB2_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2); assertThat(mModelList.size(), equalTo(1)); assertThat(mModelList.get(0).model.get(TabProperties.TAB_ID), equalTo(TAB1_ID)); @@ -2603,7 +2603,7 @@ mTabGroupModelFilterObserverCaptor.getValue().didMoveTabOutOfGroup(tab4, POSITION1); assertThat(mModelList.size(), equalTo(2)); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(tab4, TAB4_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(tab4); assertThat(mModelList.size(), equalTo(2)); assertThat(mModelList.indexFromId(TAB1_ID), equalTo(0)); @@ -2958,7 +2958,7 @@ doReturn(POSITION1).when(mTabGroupModelFilter).indexOf(mTab1); doReturn(POSITION1).when(mTabGroupModelFilter).indexOf(mTab2); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2, TAB1_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2); assertEquals( mTab1Domain + ", " + mTab2Domain, mModelList.get(POSITION1).model.get(TabProperties.URL_DOMAIN)); @@ -2999,7 +2999,7 @@ setUpTabListMediator(TabListMediatorType.TAB_GRID_DIALOG, TabListMode.GRID); verify(mTab2, times(1)).addObserver(mTabObserverCaptor.getValue()); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2, TAB1_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2); assertEquals(mTab1Domain, mModelList.get(POSITION1).model.get(TabProperties.URL_DOMAIN)); assertEquals(mTab2Domain, mModelList.get(POSITION2).model.get(TabProperties.URL_DOMAIN)); verify(mTab2, times(2)).addObserver(mTabObserverCaptor.getValue()); @@ -3036,7 +3036,7 @@ List<Tab> tabs = new ArrayList<>(Arrays.asList(mTab1, mTab2)); createTabGroup(tabs, TAB1_ID, TAB_GROUP_ID); - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2, TAB1_ID); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab2); assertEquals( mTab1Domain + ", " + mTab2Domain, mModelList.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ReorderDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ReorderDelegate.java index c98b8cb..680ed01 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ReorderDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ReorderDelegate.java
@@ -180,13 +180,6 @@ return null; } - // TODO(crbug.com/381285152): Remove get viewBeingDragged once DragDropReorderStrategy is - // complete. - StripLayoutView getViewBeingDragged() { - if (mSourceViewDragDropReorderStrategy == null) return null; - return mSourceViewDragDropReorderStrategy.mViewBeingDragged; - } - // ============================================================================================ // Initialization // ============================================================================================ @@ -252,11 +245,7 @@ @ReorderType int reorderType) { assert mInitialized && mActiveStrategy == null && !getInReorderMode(); mActiveStrategy = getReorderStrategy(interactingView, reorderType); - // TODO(crbug.com/381285152): Remove below check once SourceViewDragDropReorderStrategy - // implementation is complete. - if (mActiveStrategy != mSourceViewDragDropReorderStrategy) { - mInReorderModeSupplier.set(true); - } + mInReorderModeSupplier.set(true); mActiveStrategy.startReorderMode(stripTabs, stripGroupTitles, interactingView, startPoint); } @@ -268,11 +257,7 @@ float endX, float deltaX, @ReorderType int reorderType) { - // TODO(crbug.com/381285152): Remove SourceViewDragDropReorderStrategy check once - // implementation is complete. - assert mActiveStrategy != null - && (getInReorderMode() - || mActiveStrategy == mSourceViewDragDropReorderStrategy) + assert mActiveStrategy != null && getInReorderMode() : "Attempted to update reorder without an active Strategy."; // Return if accumulated delta is too small. This isn't the accumulated delta since the // beginning of the drag. It accumulates the delta X until a threshold is crossed and then @@ -309,11 +294,7 @@ float stripWidth, float leftMargin, float rightMargin) { - // TODO(crbug.com/381285152): Remove SourceViewDragDropReorderStrategy check once - // implementation is complete. - assert mActiveStrategy != null - && (getInReorderMode() - || mActiveStrategy == mSourceViewDragDropReorderStrategy) + assert mActiveStrategy != null && getInReorderMode() : "Attempted to update reorder without an active Strategy."; float scrollOffsetDelta = computeScrollOffsetDeltaForAutoScroll(time, stripWidth, leftMargin, rightMargin); @@ -336,11 +317,7 @@ /** See {@link ReorderStrategy#stopReorderMode} */ void stopReorderMode(StripLayoutGroupTitle[] groupTitles, StripLayoutTab[] stripTabs) { - // TODO(crbug.com/381285152): Remove SourceViewDragDropReorderStrategy check once - // implementation is complete. - assert mActiveStrategy != null - && (getInReorderMode() - || mActiveStrategy == mSourceViewDragDropReorderStrategy) + assert mActiveStrategy != null && getInReorderMode() : "Attempted to stop reorder without an active Strategy."; mActiveStrategy.stopReorderMode(groupTitles, stripTabs); @@ -1119,9 +1096,6 @@ mTabStrategy.startReorderMode( stripTabs, groupTitles, mViewBeingDragged, new PointF(endX, 0f)); mTabStrategyInProgress = true; - // TODO(crbug.com/381285152): Remove below once SourceViewDragDropReorderStrategy - // implementation is complete. - mInReorderModeSupplier.set(true); } else if (reorderType == ReorderType.DRAG_WITHIN_STRIP) { // Drag within strip - delegate to another strategy. mTabStrategy.updateReorderPosition( @@ -1155,9 +1129,6 @@ mLastOffsetX = draggedTab.getOffsetX(); mTabStrategy.stopReorderMode(groupTitles, stripTabs); mTabStrategyInProgress = false; - // TODO(crbug.com/381285152): Remove below once SourceViewDragDropReorderStrategy - // implementation is complete. - mInReorderModeSupplier.set(false); // 3. Immediately hide the dragged tab container, as if it were being translated // off like a closed tab. Resize strip views accordingly.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java index 40ead13..94ef73d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
@@ -215,7 +215,7 @@ } @Override - public void didMergeTabToGroup(Tab movedTab, int selectedTabIdInGroup) { + public void didMergeTabToGroup(Tab movedTab) { // TODO(crbug.com/375047646): Investigate kicking off animations here. int rootId = movedTab.getRootId(); updateGroupTextAndSharedState(rootId); @@ -1693,8 +1693,7 @@ private void updateTouchableRect() { // Make the entire strip touchable when during dragging / reordering mode. - boolean isTabDraggingInProgress = - mTabDragSource != null && mTabDragSource.isTabDraggingInProgress(); + boolean isTabDraggingInProgress = isTabDraggingInProgress(); if (isTabStripFull() || mReorderDelegate.getInReorderMode() || isTabDraggingInProgress) { mTouchableRect.set(getVisibleLeftBound(), 0, getVisibleRightBound(), mHeight); return; @@ -1716,6 +1715,10 @@ mTouchableRect.set(touchableRect); } + private boolean isTabDraggingInProgress() { + return mTabDragSource != null && mTabDragSource.isTabDraggingInProgress(); + } + /** * Checks whether a tab at the edge of the strip is partially hidden, in which case the close * button will be hidden to avoid accidental clicks. @@ -2448,8 +2451,11 @@ * @param time The current time of the app in ms. */ public void onUpOrCancel(long time) { - // 1. Stop any reordering that is happening. - if (mReorderDelegate.getInReorderMode()) { + /* 1. Stop any reordering that is happening. For Android drag&drop, this method is invoked + * immediately after View#startDrag to stop ongoing gesture events. Do not stop reorder in + * this case. + */ + if (mReorderDelegate.getInReorderMode() && !isTabDraggingInProgress()) { mReorderDelegate.stopReorderMode(mStripGroupTitles, mStripTabs); } @@ -3794,9 +3800,7 @@ } void stopReorderMode() { - // TODO(crbug.com/381285152): Remove getViewBeingDragged check once - // SourceViewDragDropReorderStrategy implementation is complete. - if (mReorderDelegate.getInReorderMode() || mReorderDelegate.getViewBeingDragged() != null) { + if (mReorderDelegate.getInReorderMode()) { mReorderDelegate.stopReorderMode(mStripGroupTitles, mStripTabs); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java index c150af5..230c78a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java
@@ -32,6 +32,7 @@ import org.chromium.content_public.browser.InvalidateTypes; import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.common.ResourceRequestBody; +import org.chromium.ui.UiUtils; import org.chromium.url.GURL; /** Implementation class of {@link TabWebContentsDelegateAndroid}. */ @@ -441,6 +442,16 @@ } @Override + public boolean supportsForwardTransitionAnimation() { + var window = mTab.getWindowAndroid().getWindow(); + if (window == null) { + return true; + } + // Android doesn't currently offer semantics for forward navigation for an edge gesture. + return !UiUtils.isGestureNavigationMode(window); + } + + @Override public Bitmap maybeCopyContentAreaAsBitmapSync() { return NativePageBitmapCapturer.maybeCaptureNativeViewSync(mTab, getTopControlsHeight()); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java index 3906bc46..433df63a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java
@@ -11,6 +11,7 @@ import static androidx.test.espresso.matcher.RootMatchers.isDialog; import static androidx.test.espresso.matcher.ViewMatchers.isChecked; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withText; @@ -38,12 +39,19 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.text.TextUtils; +import android.view.MotionEvent; +import android.view.View; import android.widget.ProgressBar; import androidx.appcompat.app.AppCompatDelegate; +import androidx.test.espresso.UiController; import androidx.test.espresso.ViewAction; +import androidx.test.espresso.action.GeneralLocation; +import androidx.test.espresso.action.MotionEvents; +import androidx.test.espresso.action.Press; import androidx.test.filters.MediumTest; +import org.hamcrest.Matcher; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; @@ -533,7 +541,7 @@ R.string.sync_promo_continue_as, TestAccounts.ACCOUNT1.getGivenName()); - onView(withText(continueAsText)).perform(click()); + onView(withText(continueAsText)).perform(new SimpleTap()); // ToS should be accepted right away, without waiting for the sign-in to complete. verify(mFirstRunPageDelegateMock).acceptTermsOfService(true); @@ -661,7 +669,7 @@ R.string.sync_promo_continue_as, TestAccounts.TEST_ACCOUNT_NO_NAME.getEmail()); - ViewUtils.onViewWaiting(withText(continueAsText)).perform(click()); + ViewUtils.onViewWaiting(withText(continueAsText)).perform(new SimpleTap()); CriteriaHelper.pollUiThread( () -> { @@ -701,7 +709,7 @@ .getString( R.string.sync_promo_continue_as, targetPrimaryAccount.getGivenName()); - onView(withText(continueAsText)).perform(click()); + onView(withText(continueAsText)).perform(new SimpleTap()); verify(mFirstRunPageDelegateMock).acceptTermsOfService(true); CriteriaHelper.pollUiThread( @@ -763,7 +771,7 @@ primaryAccount.getEmail()); launchActivityWithFragment(); - onView(withText(R.string.signin_fre_dismiss_button)).perform(click()); + onView(withText(R.string.signin_fre_dismiss_button)).perform(new SimpleTap()); CriteriaHelper.pollUiThread( () -> { @@ -798,7 +806,7 @@ @DisableIf.Build( sdk_is_greater_than = Build.VERSION_CODES.S_V2, message = "Flaky, crbug.com/358148764") - public void testContinueButtonWithChildAccount_replaceSyncWithSigninPromosEnabled() { + public void testContinueButtonWithChildAccount() { IdentityServicesProvider.setInstanceForTests(mIdentityServicesProviderMock); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -838,8 +846,7 @@ @DisableIf.Build( sdk_is_greater_than = Build.VERSION_CODES.S_V2, message = "Flaky, crbug.com/358148764") - public void - testContinueButtonWithChildAccountWithNonDisplayableAccountEmail_replaceSyncWithSigninPromosEnabled() { + public void testContinueButtonWithChildAccountWithNonDisplayableAccountEmail() { IdentityServicesProvider.setInstanceForTests(mIdentityServicesProviderMock); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -868,7 +875,7 @@ sdk_is_greater_than = Build.VERSION_CODES.S_V2, message = "Flaky, crbug.com/358148764") public void - testContinueButtonWithChildAccountWithNonDisplayableAccountEmailWithEmptyDisplayName_replaceSyncPromosWithSigninPromosEnabled() { + testContinueButtonWithChildAccountWithNonDisplayableAccountEmailWithEmptyDisplayName() { IdentityServicesProvider.setInstanceForTests(mIdentityServicesProviderMock); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -1564,7 +1571,37 @@ } private void clickContinueButton(String continueAsText) { - onView(withText(continueAsText)).perform(click()); + onView(withText(continueAsText)).perform(new SimpleTap()); SigninTestUtil.completeAutoDeviceLockForFirstRunIfNeeded(mFragment); } + + // A tap is the combination of two motions: pressing down and moving up. Espresso starts a timer + // and waits for the app to idle to determine if a tap is a short or long press. + // Sometimes the wait hangs and causes an AppNotIdleException to be thrown, even if the tap was + // performed correctly (see http://crbug.com/358148764). We get around this by implementing a + // simple tap action without the timer and wait. + private static final class SimpleTap implements ViewAction { + + @Override + public String getDescription() { + return "A simple tap comprised of a down motion followed by an up motion."; + } + + @Override + public Matcher<View> getConstraints() { + // This is the visibility percentage used in GeneralClickAction. + return isDisplayingAtLeast(90); + } + + @Override + public void perform(UiController uiController, View view) { + MotionEvent downEvent = + MotionEvents.sendDown( + uiController, + GeneralLocation.CENTER.calculateCoordinates(view), + Press.FINGER.describePrecision()) + .down; + MotionEvents.sendUp(uiController, downEvent); + } + } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java index 6aa77b6..a0f703fa 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java
@@ -4369,11 +4369,9 @@ verify(mTabDragSource, times(1)) .startTabDragAction(any(), any(), any(), anyFloat(), anyFloat()); - // TODO(crbug.com/381285152): Reenable check once SourceViewDragDropReorderStrategy - // implementation is complete. - // assertTrue( - // "Drag action should initiate reorder.", - // mStripLayoutHelper.getInReorderModeForTesting()); + assertTrue( + "Drag action should initiate reorder.", + mStripLayoutHelper.getInReorderModeForTesting()); assertTrue( "Dragged Tab should match selected tab during drag action.", mStripLayoutHelper.getReorderDelegateForTesting().getInteractingTab() @@ -4472,20 +4470,19 @@ "Animator should be running.", mStripLayoutHelper.getRunningAnimatorForTesting()); mStripLayoutHelper.finishAnimationsAndPushTabUpdates(); - // Verify we stop reorder mode and animate the tab exiting. + // Verify we animate the tab exiting. Reorder is still in progress. assertEquals( "Should have stored dragged tab's x-offset.", expectedOffsetX, mStripLayoutHelper.getLastOffsetXForTesting(), EPSILON); assertTrue("Should mark the tab is off the strip.", draggedTab.isDraggedOffStrip()); - assertFalse( - "Should not be in reorder mode.", mStripLayoutHelper.getInReorderModeForTesting()); assertEquals( "Tab should be translated off the strip.", SCREEN_HEIGHT, draggedTab.getOffsetY(), EPSILON); + assertTrue("Should be in reorder mode.", mStripLayoutHelper.getInReorderModeForTesting()); } @Test
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd index e80694bf..5f9b728 100644 --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd
@@ -2074,20 +2074,18 @@ Your organization can see and manage browsing data, such as your bookmarks, history, and passwords. It can't see browsing data in personal Chromium profiles. </message> <!-- Profile Picker --> - <if expr="not chromeos_lacros"> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE" desc="Profile picker main view title"> - Welcome to Chromium profiles - </message> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE_V2" desc="Title of a screen that lets the user choose which profile to use when browsing the web. *If the EN source doesn't translate well in your language, an alternative string 'Which Chromium profile would you like to use?' may be used instead"> - Who's using Chromium? - </message> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE" desc="Profile picker main view subtitle"> - With Chromium profiles you can separate all your Chromium stuff. Create profiles for friends and family, or split between work and fun. - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE" desc="Profile picker profile type choice subtitle"> - To access your Chromium stuff across all your devices, sign in, then turn on sync. - </message> - </if> + <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE" desc="Profile picker main view title"> + Welcome to Chromium profiles + </message> + <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE_V2" desc="Title of a screen that lets the user choose which profile to use when browsing the web. *If the EN source doesn't translate well in your language, an alternative string 'Which Chromium profile would you like to use?' may be used instead"> + Who's using Chromium? + </message> + <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE" desc="Profile picker main view subtitle"> + With Chromium profiles you can separate all your Chromium stuff. Create profiles for friends and family, or split between work and fun. + </message> + <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE" desc="Profile picker profile type choice subtitle"> + To access your Chromium stuff across all your devices, sign in, then turn on sync. + </message> <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_TITLE" desc="Profile picker profile type choice title"> Set up your new Chromium profile </message>
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd index 9520d89..0aa30808 100644 --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd
@@ -2255,20 +2255,18 @@ Your organization can see and manage browsing data, such as your bookmarks, history, and passwords. It can't see browsing data in personal Chrome profiles. </message> <!-- Profile Picker --> - <if expr="not chromeos_lacros"> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE" desc="Profile picker main view title"> - Welcome to Chrome profiles - </message> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE_V2" desc="Title of a screen that lets the user choose which profile to use when browsing the web. *If the EN source doesn't translate well in your language, an alternative string 'Which Chrome profile would you like to use?' may be used instead"> - Who's using Chrome? - </message> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE" desc="Profile picker main view subtitle"> - With Chrome profiles you can separate all your Chrome stuff. Create profiles for friends and family, or split between work and fun. - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE" desc="Profile picker profile type choice subtitle"> - To access your Chrome stuff across all your devices, sign in, then turn on sync. - </message> - </if> + <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE" desc="Profile picker main view title"> + Welcome to Chrome profiles + </message> + <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE_V2" desc="Title of a screen that lets the user choose which profile to use when browsing the web. *If the EN source doesn't translate well in your language, an alternative string 'Which Chrome profile would you like to use?' may be used instead"> + Who's using Chrome? + </message> + <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE" desc="Profile picker main view subtitle"> + With Chrome profiles you can separate all your Chrome stuff. Create profiles for friends and family, or split between work and fun. + </message> + <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE" desc="Profile picker profile type choice subtitle"> + To access your Chrome stuff across all your devices, sign in, then turn on sync. + </message> <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_TITLE" desc="Profile picker profile type choice title"> Set up your new Chrome profile </message>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 239b1bc..505ff3b 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -796,6 +796,7 @@ <translation id="1549788673239553762">يريد <ph name="APP_NAME" /> الوصول إلى <ph name="VOLUME_NAME" />. قد يعدّل أو يحذف ملفاتك.</translation> <translation id="1549966883323105187">الوصول بسرعة إلى كلمات المرور المحفوظة</translation> <translation id="1550656959113606473">إعدادات Chrome التلقائية</translation> +<translation id="1552065819535218588">سيتوقف Chrome عن تنبيهك من أي محتوى غير مرغوب فيه من <ph name="URL" /></translation> <translation id="1552301827267621511">غيرت الإضافة "<ph name="EXTENSION_NAME" />" البحث لاستخدام <ph name="SEARCH_PROVIDER_DOMAIN" />.</translation> <translation id="1552752544932680961">إدارة الإضافة</translation> <translation id="1553538517812678578">غير محدودة</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 9c3b3e7..b6bbf87 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -792,6 +792,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" />এ <ph name="VOLUME_NAME" />লৈ এক্সেছ কৰিব খুজিছে। ই আপোনাৰ ফাইল সংশোধন কৰিব বা মচিব পাৰে।</translation> <translation id="1549966883323105187">আপোনাৰ ছেভ হৈ থকা পাছৱৰ্ডসমূহ ক্ষিপ্ৰতাৰে লাভ কৰক</translation> <translation id="1550656959113606473">ডিফ’ল্ট Chrome</translation> +<translation id="1552065819535218588">Chromeএ <ph name="URL" />ৰ পৰা অহা জাননীসমূহ স্পাম হিচাপে চিহ্নিত কৰাটো বন্ধ কৰিব</translation> <translation id="1552301827267621511">"<ph name="EXTENSION_NAME" />" এক্সটেনশ্বনটোৱে <ph name="SEARCH_PROVIDER_DOMAIN" /> ব্যৱহাৰ কৰিবলৈ সন্ধানৰ সুবিধাটো সলনি কৰিছে</translation> <translation id="1552752544932680961">এক্সটেনশ্বন পৰিচালনা কৰক</translation> <translation id="1553538517812678578">সীমাহীন</translation> @@ -3096,6 +3097,7 @@ <translation id="3159978855457658359">ডিভাইচৰ নাম সম্পাদনা কৰক</translation> <translation id="3160928651883997588">ভিপিএনৰ অগ্ৰাধিকাৰ</translation> <translation id="3161522574479303604">সকলো ভাষা</translation> +<translation id="3162070126914310576">আপোনাৰ সংস্থাৰ ইউনিটটোৱে নিজৰ প্ৰাৰম্ভিক পঞ্জীয়নৰ সীমাত উপনীত হোৱাৰ বাবে এই মুহূৰ্তত এই ডিভাইচটো পঞ্জীয়ন কৰিব নোৱাৰি। সহায় পাবলৈ আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation> <translation id="3162766632262775911">সদায় V8 অপ্টিমাইজাৰ ব্যৱহাৰ কৰাৰ অনুমতি আছে</translation> <translation id="3162853326462195145">বিদ্যালয় একাউণ্ট</translation> <translation id="3162899666601560689">ছাইটসমূহে আপোনাৰ ব্ৰাউজিঙৰ অভিজ্ঞতা উন্নত কৰিবলৈ কুকিসমূহ ব্যৱহাৰ কৰিব পাৰে, যেনে, আপোনাক ছাইন ইন কৰি ৰাখিবলৈ অথবা আপোনাৰ শ্বপিং কার্টত থকা বস্তুবোৰ মনত ৰাখিবলৈ</translation> @@ -9070,6 +9072,7 @@ <translation id="746861123368584540">এক্সটেনশ্বন ল’ড কৰা হ’ল</translation> <translation id="7469612367552312334">অন আছে • আপোনাৰ ব্ৰাউজিঙৰ ইতিহাস সন্ধান কৰিবলৈ আৰু আপুনি চোৱা ছাইটসমূহ বিচাৰিবলৈ দৈনন্দিন জীৱনত ব্যৱহৃত ভাষা ব্যৱহাৰ কৰক</translation> <translation id="7470131554696493512">Thunderbolt অথবা USB4ৰ আনুষংগিক সামগ্ৰীসমূহে মেম’ৰী (RAM) এক্সেছ আৰু শ্বেয়াৰ কৰাটো অৱৰোধ কৰক</translation> +<translation id="7470284766345262333">এই একাউণ্টটো Googleৰ সৈতে জড়িত নহয়, গতিকে Chrome ছিংক কৰাৰ দৰে সুবিধাসমূহ উপলব্ধ নহয়</translation> <translation id="7470424110735398630">আপোনাৰ ক্লিপব’ৰ্ড চোৱাৰ অনুমতি আছে</translation> <translation id="747114903913869239">আসোঁৱাহ: এক্সটেনশ্বন ডিক’ড কৰিব পৰা নগ’ল</translation> <translation id="7471520329163184433">লেহেমীয়া</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 1dc0dc1..9cf4e2b1 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -791,6 +791,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> иска достъп до „<ph name="VOLUME_NAME" />“. Приложението може да промени или изтрие файловете ви.</translation> <translation id="1549966883323105187">Стигайте по-бързо до запазените си пароли</translation> <translation id="1550656959113606473">Стандартни настройки на Chrome</translation> +<translation id="1552065819535218588">Chrome ще спре да означава известията от <ph name="URL" /> като спам</translation> <translation id="1552301827267621511">Разширението <ph name="EXTENSION_NAME" /> промени търсещата машина на <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Управление на разширението</translation> <translation id="1553538517812678578">неограничено</translation> @@ -3094,6 +3095,7 @@ <translation id="3159978855457658359">Редактиране на името на устройството</translation> <translation id="3160928651883997588">Предпочитания за VPN</translation> <translation id="3161522574479303604">Всички езици</translation> +<translation id="3162070126914310576">Това устройство не може да бъде регистрирано в момента, защото за организационната единица е достигнато ограничението за първоначална регистрация. За помощ се свържете с администратора си.</translation> <translation id="3162766632262775911">Сайтове с разрешение за използване на оптимизатора V8</translation> <translation id="3162853326462195145">Училищен профил</translation> <translation id="3162899666601560689">Сайтовете могат да използват „бисквитки“ с цел по-добро сърфиране, например за да оставате в профила си или за да запомнят артикулите в пазарската ви кошница</translation> @@ -9070,6 +9072,7 @@ <translation id="746861123368584540">Разширението е заредено</translation> <translation id="7469612367552312334">Включено • Използвайте общ език, за да търсите в историята си на сърфиране и да намирате сайтове, които сте посетили</translation> <translation id="7470131554696493512">Блокиране на аксесоарите с Thunderbolt или USB4 така, че да не могат да осъществяват достъп до паметта (RAM) и да я споделят</translation> +<translation id="7470284766345262333">Този профил не е свързан с Google, затова функции като „Синхронизиране в Chrome“ не са налице</translation> <translation id="7470424110735398630">Сайтове с разрешение за преглед на буферната памет</translation> <translation id="747114903913869239">Грешка: Разширението не може да се декодира</translation> <translation id="7471520329163184433">По-бавна</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 9cc3e5ad..71b877f 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -795,6 +795,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" /> অ্যাক্সেস করতে চায়৷ এটি আপনার ফাইলগুলিকে মডিফাই করতে বা মুছে ফেলতে পারে৷</translation> <translation id="1549966883323105187">আরও চটপট আপনার সেভ করা পাসওয়ার্ড পান</translation> <translation id="1550656959113606473">ডিফল্ট ক্রোম</translation> +<translation id="1552065819535218588">Chrome, <ph name="URL" /> থেকে আসা বিজ্ঞপ্তি স্প্যাম হিসেবে ফ্ল্যাগ করা বন্ধ করবে</translation> <translation id="1552301827267621511">"<ph name="EXTENSION_NAME" />" এক্সটেনশনের মাধ্যমে ডিফল্ট সার্চ ইঞ্জিনকে ওভাররাইড করা হয়েছে এবং এখন <ph name="SEARCH_PROVIDER_DOMAIN" />-এর মাধ্যমে কন্ট্রোল করা হচ্ছে</translation> <translation id="1552752544932680961">এক্সটেনশান পরিচালনা করুন</translation> <translation id="1553538517812678578">সীমাহীন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 527c617..b8d42010 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -796,6 +796,7 @@ <translation id="1549788673239553762">Aplikacija <ph name="APP_NAME" /> želi pristup za <ph name="VOLUME_NAME" />. Moguće je da će izmijeniti ili izbrisati fajlove.</translation> <translation id="1549966883323105187">Dođite brže do sačuvanih lozinki</translation> <translation id="1550656959113606473">Zadani Chrome</translation> +<translation id="1552065819535218588">Chrome će prestati označavati obavijesti s web-lokacije <ph name="URL" /> kao neželjenu poštu</translation> <translation id="1552301827267621511">Ekstenzija "<ph name="EXTENSION_NAME" />" je promijenila pretraživanje da koristi <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Upravljajte ekstenzijom</translation> <translation id="1553538517812678578">neograničeno</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 93ba58bb..5f56433a 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -793,6 +793,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> vol accedir a <ph name="VOLUME_NAME" />. És possible que modifiqui o suprimeixi els fitxers.</translation> <translation id="1549966883323105187">Accedeix a les contrasenyes desades més ràpidament</translation> <translation id="1550656959113606473">Chrome predeterminat</translation> +<translation id="1552065819535218588">Chrome deixarà de marcar les notificacions de <ph name="URL" /> com a correu brossa</translation> <translation id="1552301827267621511">L'extensió "<ph name="EXTENSION_NAME" />" ha canviat el proveïdor de cerca i ara s'utilitza <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Gestiona l'extensió</translation> <translation id="1553538517812678578">il·limitat</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 4b5a5d3..8f043b3 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -8129,7 +8129,7 @@ <translation id="6805647936811177813">Melde dich in <ph name="TOKEN_NAME" /> an, um das Clientzertifikat von <ph name="HOST_NAME" /> herunterzuladen.</translation> <translation id="680572642341004180">RLZ-Nachverfolgung für <ph name="SHORT_PRODUCT_OS_NAME" /> aktivieren</translation> <translation id="6806089545527108739">Nicht zulassen, später noch einmal fragen</translation> -<translation id="680644983456221885">Proaktiver Schutz in Echtzeit vor gefährlichen Websites, Downloads und Erweiterungen auf der Grundlage deiner Browserdaten, die an Google gesendet werden.</translation> +<translation id="680644983456221885">Proaktiver Schutz in Echtzeit vor gefährlichen Websites, Downloads und Erweiterungen auf Basis deiner Browserdaten, die an Google gesendet werden.</translation> <translation id="6806781719264274042">Nur meine Kontakte mit einem Google-Konto. <ph name="LINK_BEGIN" />Kontakte anzeigen<ph name="LINK_END" /></translation> <translation id="6808039367995747522">Stecke deinen Sicherheitsschlüssel ein und tippe darauf, um fortzufahren</translation> <translation id="6808166974213191158">Chrome OS Flex-Systemimage-Writer</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 0cf05b8..acf55bdc 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -794,6 +794,7 @@ <translation id="1549788673239553762">Η εφαρμογή <ph name="APP_NAME" /> θέλει να αποκτήσει πρόσβαση σε <ph name="VOLUME_NAME" />. Ενδέχεται να τροποποιήσει ή να διαγράψει τα αρχεία σας.</translation> <translation id="1549966883323105187">Μεταβείτε ταχύτερα στους αποθηκευμένους κωδικούς πρόσβασης</translation> <translation id="1550656959113606473">Προεπιλογή Chrome</translation> +<translation id="1552065819535218588">Το Chrome θα σταματήσει να επισημαίνει τις ειδοποιήσεις από τη διεύθυνση <ph name="URL" /> ως ανεπιθύμητες</translation> <translation id="1552301827267621511">Η επέκταση "<ph name="EXTENSION_NAME" />" άλλαξε τον πάροχο αναζήτησης που χρησιμοποιείται <ph name="SEARCH_PROVIDER_DOMAIN" />.</translation> <translation id="1552752544932680961">Διαχείριση επέκτασης</translation> <translation id="1553538517812678578">απεριόριστο</translation> @@ -3098,6 +3099,7 @@ <translation id="3159978855457658359">Επεξεργασία ονόματος συσκευής</translation> <translation id="3160928651883997588">Προτιμήσεις VPN</translation> <translation id="3161522574479303604">Όλες οι γλώσσες</translation> +<translation id="3162070126914310576">Δεν είναι δυνατή η εγγραφή της συσκευής αυτή τη στιγμή, επειδή η μονάδα οργανισμού έχει συμπληρώσει το αρχικό όριο εγγραφής. Επικοινωνήστε με τον διαχειριστή σας για βοήθεια.</translation> <translation id="3162766632262775911">Να επιτρέπεται πάντα η χρήση του βελτιστοποιητή V8</translation> <translation id="3162853326462195145">Σχολικός λογαριασμός</translation> <translation id="3162899666601560689">Οι ιστότοποι μπορούν να χρησιμοποιούν cookie για να βελτιώσουν την εμπειρία περιήγησής σας, για παράδειγμα, για να παραμείνετε συνδεδεμένοι ή να διατηρηθούν τα προϊόντα στο καλάθι αγορών σας.</translation> @@ -9073,6 +9075,7 @@ <translation id="746861123368584540">Η επέκταση φορτώθηκε</translation> <translation id="7469612367552312334">Ενεργή • Χρησιμοποιήστε καθημερινή γλώσσα, για να κάνετε αναζήτηση στο ιστορικό περιήγησης και να βρείτε ιστοτόπους που επισκεφτήκατε</translation> <translation id="7470131554696493512">Αποκλεισμός των αξεσουάρ Thunderbolt ή USB4 από την πρόσβαση και την κοινή χρήση μνήμης (RAM)</translation> +<translation id="7470284766345262333">Αυτός ο λογαριασμός δεν σχετίζεται με την Google, επομένως οι λειτουργίες όπως ο Συγχρονισμός Chrome δεν είναι διαθέσιμες</translation> <translation id="7470424110735398630">Επιτρέπεται να βλέπουν το πρόχειρό σας</translation> <translation id="747114903913869239">Σφάλμα: Δεν είναι δυνατή η αποκωδικοποίηση της επέκτασης</translation> <translation id="7471520329163184433">Πιο αργή</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 80259c7..a8c9869f 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -793,6 +793,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> quiere acceder a <ph name="VOLUME_NAME" />. Puede modificar o eliminar tus archivos.</translation> <translation id="1549966883323105187">Accede a tus contraseñas guardadas más rápido</translation> <translation id="1550656959113606473">Chrome predeterminado</translation> +<translation id="1552065819535218588">Chrome dejará de marcar como spam las notificaciones de <ph name="URL" /></translation> <translation id="1552301827267621511">La extensión <ph name="EXTENSION_NAME" /> ha cambiado el proveedor de búsquedas a <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Gestionar extensión</translation> <translation id="1553538517812678578">sin límite</translation> @@ -3086,6 +3087,7 @@ <translation id="3159978855457658359">Editar nombre del dispositivo</translation> <translation id="3160928651883997588">Preferencias de VPN</translation> <translation id="3161522574479303604">Todos los idiomas</translation> +<translation id="3162070126914310576">Este dispositivo no se puede registrar ahora mismo porque tu unidad organizativa ha alcanzado su límite de registro inicial. Ponte en contacto con tu administrador para obtener ayuda.</translation> <translation id="3162766632262775911">Siempre se permite usar el optimizador de V8</translation> <translation id="3162853326462195145">Cuenta de centro educativo</translation> <translation id="3162899666601560689">Los sitios pueden usar cookies para mejorar tu experiencia de navegación, por ejemplo, para mantener tu sesión iniciada o recordar los artículos de tu carrito de la compra.</translation> @@ -9057,6 +9059,7 @@ <translation id="746861123368584540">Extensión cargada</translation> <translation id="7469612367552312334">Activado • Usa frases cotidianas para buscar en tu historial de navegación y encontrar los sitios que has visitado.</translation> <translation id="7470131554696493512">Impedir que los accesorios Thunderbolt o USB4 accedan a la memoria (RAM) y la compartan</translation> +<translation id="7470284766345262333">Esta cuenta no está asociada a Google, por lo que no están disponibles funciones como la Sincronización de Chrome</translation> <translation id="7470424110735398630">Puede ver tu portapapeles</translation> <translation id="747114903913869239">Error: no es posible decodificar la extensión.</translation> <translation id="7471520329163184433">Más lenta</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index b50fa95..d3bd8f9 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -792,6 +792,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> میخواهد به <ph name="VOLUME_NAME" /> دسترسی یابد. ممکن است فایلهایتان را تغییر داده یا حذف کند.</translation> <translation id="1549966883323105187">سریعتر به گذرواژههای ذخیرهشده دسترسی داشته باشید</translation> <translation id="1550656959113606473">Chrome پیشفرض</translation> +<translation id="1552065819535218588">Chrome دیگر اعلانهای <ph name="URL" /> را بهعنوان اسپم پرچمگذاری نخواهد کرد</translation> <translation id="1552301827267621511">افزونه «<ph name="EXTENSION_NAME" />»، <ph name="SEARCH_PROVIDER_DOMAIN" /> را تغییر داد تا جستجو با استفاده از آن انجام شود</translation> <translation id="1552752544932680961">مدیریت برنامه افزودنی</translation> <translation id="1553538517812678578">نامحدود</translation> @@ -3095,6 +3096,7 @@ <translation id="3159978855457658359">ویرایش نام دستگاه</translation> <translation id="3160928651883997588">اولویتهای VPN</translation> <translation id="3161522574479303604">همه زبانها</translation> +<translation id="3162070126914310576">درحالحاضر نمیتوان این دستگاه را ثبتنام کرد زیرا واحد سازمانیتان به حداکثر تعداد ثبتنام اولیه خود رسیده است. برای دریافت کمک با سرپرستتان تماس بگیرید.</translation> <translation id="3162766632262775911">همیشه اجازه دارد از بهینهساز V8 استفاده کند</translation> <translation id="3162853326462195145">حساب محل تحصیل</translation> <translation id="3162899666601560689">سایتها میتوانند از کوکیها برای بهبود تجربه مرورتان استفاده کنند، مثلاً برای اینکه شما را درحالت واردشده به سیستم نگه دارند یا موارد موجود در سبد خریدتان را بهخاطر بسپارند</translation> @@ -6461,7 +6463,7 @@ <translation id="5559768063688681413">چاپگری ذخیره نشده است</translation> <translation id="55601339223879446">تنظیم محدوه دسکتاپ شما در صفحه نمایشگر</translation> <translation id="5561162485081632007">رویدادهای خطرناک را درصورت وقوع شناسایی میکند و به شما هشدار میدهد</translation> -<translation id="556321030400250233">فایلهای محلی یا اشتراکگذاری شده</translation> +<translation id="556321030400250233">فایلهای محلی یا همرسانیشده</translation> <translation id="5563234215388768762">جستجو کردن در Google یا تایپ نشانی وب</translation> <translation id="5563824734298958390">گروه برگه را ترک میکنید؟</translation> <translation id="5565735124758917034">فعال</translation> @@ -9071,6 +9073,7 @@ <translation id="746861123368584540">افزونه بار شد</translation> <translation id="7469612367552312334">روشن • سابقه مرورتان را بااستفاده از زبان روزمره جستجو کنید و سایتهایی را که بازدید کردهاید پیدا کنید</translation> <translation id="7470131554696493512">مسدود کردن لوازم جانبی Thunderbolt یا USB4 از دسترسی داشتن و همرسانی حافظه (حافظه دسترسی تصادفی)</translation> +<translation id="7470284766345262333">این حساب با Google منسوب نیست، بنابراین ویژگیهایی مانند «همگامسازی Chrome» دردسترس نیست.</translation> <translation id="7470424110735398630">اجازه دارد بریدهدان را ببیند</translation> <translation id="747114903913869239">خطا: رمزگشایی برنامهٔ افزودنی ممکن نیست</translation> <translation id="7471520329163184433">آهستهتر</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index b844674..f811cf2 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -791,6 +791,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" />, <ph name="VOLUME_NAME" />ને ઍક્સેસ કરવા માંગે છે. તે તમારી ફાઇલોમાં ફેરફાર કરી અથવા ડિલીટ કરી શકે છે.</translation> <translation id="1549966883323105187">તમારા સાચવેલા પાસવર્ડ સુધી વધુ ઝડપથી પહોંચો</translation> <translation id="1550656959113606473">Chromeના ડિફૉલ્ટ સેટિંગ</translation> +<translation id="1552065819535218588">Chrome <ph name="URL" /> તરફથી મળતા નોટિફિકેશનને સ્પામ તરીકે ફ્લૅગ કરવાનું બંધ કરશે</translation> <translation id="1552301827267621511">"<ph name="EXTENSION_NAME" />" એક્સ્ટેન્શન દ્વારા શોધને <ph name="SEARCH_PROVIDER_DOMAIN" />નો ઉપયોગ કરવા પર બદલવામાં આવ્યું</translation> <translation id="1552752544932680961">એક્સ્ટેન્શનનું સંચાલન કરો</translation> <translation id="1553538517812678578">અસીમિત</translation> @@ -3083,6 +3084,7 @@ <translation id="3159978855457658359">ડિવાઇસના નામમાં ફેરફાર કરો</translation> <translation id="3160928651883997588">VPN પસંદગીઓ</translation> <translation id="3161522574479303604">બધી ભાષાઓ</translation> +<translation id="3162070126914310576">અત્યારે ડિવાઇસની નોંધણી કરી શકાતી નથી કારણ કે તમારી સંસ્થાનું યુનિટ તેની પ્રારંભિક નોંધણીની મર્યાદાએ પહોંચી ગયું છે. સહાયતા માટે તમારા ઍડમિનિસ્ટ્રેટરનો સંપર્ક કરો.</translation> <translation id="3162766632262775911">હંમેશા V8 ઑપ્ટિમાઇઝરનો ઉપયોગ કરવાની મંજૂરી છે</translation> <translation id="3162853326462195145">સ્કૂલ એકાઉન્ટ</translation> <translation id="3162899666601560689">તમને વધુ સારો બ્રાઉઝિંગ અનુભવ આપવા માટે, ઉદાહરણ તરીકે, તમને સાઇન ઇન કરીને રાખવા અથવા તમારા શૉપિંગ કાર્ટની આઇટમ યાદ રાખવા માટે, સાઇટ કુકીનો ઉપયોગ કરી શકે છે</translation> @@ -9061,6 +9063,7 @@ <translation id="746861123368584540">એક્સ્ટેન્શન લોડ કર્યું</translation> <translation id="7469612367552312334">ચાલુ • તમારા બ્રાઉઝિંગ ઇતિહાસમાં શોધવા માટે રોજિંદા વપરાશની ભાષાનો ઉપયોગ કરો અને તમે મુલાકાત લીધેલી સાઇટ શોધો</translation> <translation id="7470131554696493512">Thunderbolt અથવા USB4 ઍક્સેસરીને મેમરી (RAM) ઍક્સેસ અને શેર કરવાથી બ્લૉક કરો</translation> +<translation id="7470284766345262333">આ એકાઉન્ટ Google સાથે સંકળાયેલું નથી, તેથી Chrome સિંક જેવી સુવિધાઓ ઉપલબ્ધ નથી</translation> <translation id="7470424110735398630">તમારું ક્લિપબોર્ડ જોવાની મંજૂરી છે</translation> <translation id="747114903913869239">ભૂલ: એક્સટેન્શનને ડિકોડ કરવામાં અક્ષમ</translation> <translation id="7471520329163184433">ઝડપ ધીમી કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index ce7de4c6..d116450 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -795,6 +795,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> ऐक्सेस करना चाहता है <ph name="VOLUME_NAME" />. वह आपकी फ़ाइलों में बदलाव कर सकता है या उन्हें मिटा सकता है.</translation> <translation id="1549966883323105187">अपने सेव किए गए पासवर्ड तुरंत ऐक्सेस करें</translation> <translation id="1550656959113606473">Chrome की डिफ़ॉल्ट सेटिंग</translation> +<translation id="1552065819535218588">Chrome, <ph name="URL" /> से मिलने वाली सूचनाओं को स्पैम के तौर पर मार्क करना बंद कर देगा</translation> <translation id="1552301827267621511">"<ph name="EXTENSION_NAME" />" एक्सटेंशन ने <ph name="SEARCH_PROVIDER_DOMAIN" /> का इस्तेमाल करने के लिए सर्च इंजन बदला है</translation> <translation id="1552752544932680961">एक्सटेंशन मैनेज करें</translation> <translation id="1553538517812678578">असीमित</translation> @@ -3099,6 +3100,7 @@ <translation id="3159978855457658359">डिवाइस के नाम में बदलाव करें</translation> <translation id="3160928651883997588">वीपीएन की सेटिंग</translation> <translation id="3161522574479303604">सभी भाषाएं</translation> +<translation id="3162070126914310576">इस डिवाइस को अभी रजिस्टर नहीं किया जा सकता, क्योंकि आपके संगठन की इकाई में रजिस्टर करने की तय सीमा पूरी हो चुकी है. सहायता के लिए, अपने एडमिन से संपर्क करें.</translation> <translation id="3162766632262775911">ये हमेशा V8 ऑप्टिमाइज़र का इस्तेमाल कर सकती हैं</translation> <translation id="3162853326462195145">स्कूल वाला खाता</translation> <translation id="3162899666601560689">ब्राउज़ करने के आपके अनुभव को बेहतर बनाने के लिए साइटें, कुकी इस्तेमाल कर सकती हैं. जैसे, आपको साइन इन रखने के लिए या शॉपिंग कार्ट में सेव किए गए आइटम को याद रखने के लिए</translation> @@ -9071,6 +9073,7 @@ <translation id="746861123368584540">एक्सटेंशन लोड हो गया है</translation> <translation id="7469612367552312334">चालू है • अपना ब्राउज़िंग इतिहास खोजने और विज़िट की गई साइटों को ढूंढने के लिए, आम बोलचाल वाली भाषा का इस्तेमाल करें</translation> <translation id="7470131554696493512">Thunderbolt या USB4 ऐक्सेसरी को अपने डिवाइस की मेमोरी (रैम) को ऐक्सेस करने और शेयर करने से रोकें</translation> +<translation id="7470284766345262333">यह खाता Google से जुड़ा नहीं है, इसलिए Chrome सिंक जैसी सुविधाएं उपलब्ध नहीं हैं</translation> <translation id="7470424110735398630">आपका क्लिपबोर्ड देखने की अनुमति है</translation> <translation id="747114903913869239">गड़बड़ी: एक्सटेंशन डिकोड करने में असमर्थ</translation> <translation id="7471520329163184433">और धीमी</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 8818b25..837709b8 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -795,6 +795,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> želi pristupiti jedinici <ph name="VOLUME_NAME" />. Ta aplikacija može izmijeniti ili izbrisati vaše datoteke.</translation> <translation id="1549966883323105187">Brže pristupite spremljenim zaporkama</translation> <translation id="1550656959113606473">Zadani Chrome</translation> +<translation id="1552065819535218588">Chrome će prestati označavati obavijesti s web-lokacije <ph name="URL" /> kao neželjenu poštu</translation> <translation id="1552301827267621511">Proširenje "<ph name="EXTENSION_NAME" />" prebacilo je pretraživanje na domenu <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Upravljanje proširenjem</translation> <translation id="1553538517812678578">neograničeno</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index db8f621..6ee7a23 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -7145,7 +7145,7 @@ <translation id="6077189836672154517">Suggerimenti e aggiornamenti relativi a <ph name="DEVICE_TYPE" /></translation> <translation id="6077476112742402730">Parlare per digitare</translation> <translation id="6078121669093215958">{0,plural, =1{Ospite}other{# finestre Ospite aperte}}</translation> -<translation id="6078323886959318429">Aggiungi scorciatoia</translation> +<translation id="6078323886959318429">Scorciatoia</translation> <translation id="6078752646384677957">Controlla i livelli audio e del microfono.</translation> <translation id="608029822688206592">Nessuna rete trovata. Inserisci la SIM e riprova.</translation> <translation id="6080689532560039067">Controlla l'ora del sistema</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index a29a13d..b5bcca5 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -793,6 +793,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> רוצה לגשת אל <ph name="VOLUME_NAME" />. ייתכן שהוא יישנה או ימחק את הקבצים.</translation> <translation id="1549966883323105187">אפשר לגשת מהר יותר לסיסמאות השמורות</translation> <translation id="1550656959113606473">ברירת המחדל של Chrome</translation> +<translation id="1552065819535218588">Chrome יפסיק לסמן את ההתראות מ-<ph name="URL" /> כספאם</translation> <translation id="1552301827267621511">התוסף "<ph name="EXTENSION_NAME" />" שינה את הגדרות החיפוש לשימוש ב-<ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">נהל תוספים</translation> <translation id="1553538517812678578">לא מוגבל</translation> @@ -1071,7 +1072,7 @@ <translation id="1726503915437308071">גופן נטוי</translation> <translation id="1729533290416704613">הגדרה זו גם קובעת איזה דף מוצג כשמחפשים מסרגל הכתובות.</translation> <translation id="1730666151302379551">שכחתי את הסיסמה הישנה</translation> -<translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />כדי להסיר אפליקציות, נכנסים אל 'הגדרות' > 'חנות Google Play' > 'ניהול העדפות Android' >'אפליקציות' או 'מנהל האפליקציות'. אחר כך מקישים על האפליקציה שרוצים להסיר (ייתכן שיהיה צורך להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לסיום, מקישים על 'הסרת התקנה' או 'השבתה'.<ph name="END_PARAGRAPH1" /></translation> +<translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />כדי להסיר אפליקציות, נכנסים אל 'הגדרות' > 'חנות Google Play' > 'ניהול העדפות Android' >'אפליקציות' או 'מנהל האפליקציות'. אחר כך לוחצים על האפליקציה שרוצים להסיר (ייתכן שיהיה צורך להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לסיום, לוחצים על 'הסרת התקנה' או 'השבתה'.<ph name="END_PARAGRAPH1" /></translation> <translation id="1730989807608739928">גלילה אל הכרטיסייה האחרונה</translation> <translation id="1731293480805103836">אני יצרתי את הקובץ הזה</translation> <translation id="1731520826054843792">תבנית לאישור של Microsoft</translation> @@ -1194,7 +1195,7 @@ <translation id="1818913467757368489">העלאת היומן מתבצעת.</translation> <translation id="1819377896744763509">ההגדרה עשויה להימשך זמן רב יותר…</translation> <translation id="1819443852740954262">פתיחת כל החלונות בחלון אנונימי</translation> -<translation id="1819721979226826163">מקישים על 'הודעות אפליקציה' > 'שירותי Google Play'.</translation> +<translation id="1819721979226826163">לוחצים על 'הודעות אפליקציה' > 'שירותי Google Play'.</translation> <translation id="1822517323280215012">אפור</translation> <translation id="1822635184853104396">הצגה של היסטוריית ההורדות המלאה בכרטיסייה חדשה</translation> <translation id="1823768272150895732">גופן</translation> @@ -3719,7 +3720,7 @@ <translation id="3615579745882581859">מתבצעת סריקה בקובץ <ph name="FILE_NAME" />.</translation> <translation id="3615596877979647433">המפתח חסר. יש להקיש על מקש מקלדת כלשהו כדי להתאים אישית</translation> <translation id="3616113530831147358">אודיו</translation> -<translation id="3617062258679844578">כדי להקליק, מקישים על לוח המגע במקום ללחוץ עליו</translation> +<translation id="3617062258679844578">כדי להקליק, לוחצים על לוח המגע במקום ללחוץ עליו</translation> <translation id="3617891479562106823">רקעים אינם זמינים. צריך לנסות שוב מאוחר יותר.</translation> <translation id="3618286417582819036">מצטערים, אירעה שגיאה</translation> <translation id="3618647122592024084">עכשיו <ph name="RECIPIENT_NAME" /> יכול/ה להשתמש בשם המשתמש ובסיסמה שלך במנהל הסיסמאות של Google. יהיה צורך לעבור אל <ph name="WEBSITE" /> כדי להיכנס.</translation> @@ -3925,7 +3926,7 @@ <translation id="3743842571276656710">צריך להזין קוד אימות כדי ליצור התאמה עם <ph name="DEVICE_NAME" /></translation> <translation id="3744219658596020825">הסיסמאות שלך לא יובאו</translation> <translation id="3745306754941902605">מטבח</translation> -<translation id="3747077776423672805">כדי להסיר אפליקציות, צריך לעבור אל 'הגדרות' > 'חנות Google Play' > 'ניהול העדפות Android' >'אפליקציות' או 'מנהל אפליקציות'. לאחר מכן צריך להקיש על האפליקציה שרוצים להסיר (ייתכן שיהיה צורך להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לסיום, יש להקיש על 'הסרת התקנה' או 'השבתה'.</translation> +<translation id="3747077776423672805">כדי להסיר אפליקציות, צריך לעבור אל 'הגדרות' > 'חנות Google Play' > 'ניהול העדפות Android' >'אפליקציות' או 'מנהל אפליקציות'. לאחר מכן צריך ללחוץ על האפליקציה שרוצים להסיר (ייתכן שיהיה צורך להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לסיום, יש ללחוץ על 'הסרת התקנה' או 'השבתה'.</translation> <translation id="3748424433435232460">כבר שמורה במכשיר הזה סיסמה לחשבון הזה</translation> <translation id="3748706263662799310">דיווח על באג</translation> <translation id="3749724428455457489">מידע נוסף על הצעות למודעות מאתרים</translation> @@ -4252,7 +4253,7 @@ <translation id="3955896417885489542">סקירת האפשרויות של Google Play אחרי ההגדרה</translation> <translation id="3957079323242030166">נתוני גיבוי אינם נחשבים כחלק ממכסת האחסון ב-Drive.</translation> <translation id="3957663711862465084">הגדרות ל-USB</translation> -<translation id="3957844511978444971">יש להקיש על "אישור" כדי לאשר את בחירת ההגדרות האלה של שירותי Google.</translation> +<translation id="3957844511978444971">יש ללחוץ על "אישור" כדי לאשר את בחירת ההגדרות האלה של שירותי Google.</translation> <translation id="3958088479270651626">ייבוא סימניות והגדרות</translation> <translation id="3958110062351175311">יש הרשאה להציג בקשות בסרגל הכלים</translation> <translation id="3958821725268247062">האפליקציה <ph name="APP_NAME" /> כבר מותקנת</translation> @@ -5870,7 +5871,7 @@ <translation id="512903556749061217">מחובר</translation> <translation id="5130080518784460891">Eten</translation> <translation id="5130675701626084557">לא ניתן היה להוריד את הפרופיל. יש לנסות שוב מאוחר יותר או לפנות לספק לקבלת עזרה.</translation> -<translation id="5131591206283983824">הקשה וגרירה בלוח מגע</translation> +<translation id="5131591206283983824">לחיצה וגרירה בלוח מגע</translation> <translation id="5133035646508467110">אם המכשיר הזה משותף עם אחרים, יש לך אפשרות להשתמש בטביעת האצבע כדי לאמת את זהותך בכל שימוש בסיסמה שמורה</translation> <translation id="5135533361271311778">לא ניתן ליצור פריט סימנייה.</translation> <translation id="513555878193063507">הוספה של APN חדש</translation> @@ -6138,12 +6139,12 @@ <translation id="5327248766486351172">שם</translation> <translation id="5327570636534774768">המכשיר הזה מסומן כמנוהל על ידי דומיין אחר. צריך לבטל את ניהול התצורה שלו מהדומיין הזה לפני ההגדרה של מצב ההדגמה.</translation> <translation id="5327912693242073631">תכונות שצריכות התראות לא יפעלו</translation> -<translation id="532943162177641444">יש להקיש על ההודעה בטלפון <ph name="PHONE_NAME" /> כדי להגדיר את הנקודה לשיתוף אינטרנט בנייד שבה המכשיר הזה יכול להשתמש.</translation> +<translation id="532943162177641444">יש ללחוץ על ההודעה בטלפון <ph name="PHONE_NAME" /> כדי להגדיר את הנקודה לשיתוף אינטרנט בנייד שבה המכשיר הזה יכול להשתמש.</translation> <translation id="5329858601952122676">&מחיקה</translation> <translation id="5331069282670671859">אין לך אישורים בקטגוריה הזו</translation> <translation id="5331568967879689647">אפליקציית מערכת של ChromeOS</translation> <translation id="5331975486040154427">מכשיר עם יציאת USB-C (יציאה שמאלית-אחורית)</translation> -<translation id="5333896723098573627">כדי להסיר אפליקציות, צריך לעבור אל 'הגדרות' > 'חנות Google Play' > 'ניהול העדפות Android' >'אפליקציות' או 'מנהל האפליקציות'. לאחר מכן מקישים על האפליקציה שרוצים להסיר את ההתקנה שלה (יכול להיות שצריך יהיה להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לבסוף, מקישים על 'הסרת התקנה' או 'השבתה'.</translation> +<translation id="5333896723098573627">כדי להסיר אפליקציות, צריך לעבור אל 'הגדרות' > 'חנות Google Play' > 'ניהול העדפות Android' >'אפליקציות' או 'מנהל האפליקציות'. לאחר מכן לוחצים על האפליקציה שרוצים להסיר את ההתקנה שלה (יכול להיות שצריך יהיה להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לבסוף, לוחצים על 'הסרת התקנה' או 'השבתה'.</translation> <translation id="5334113802138581043">גישה למיקרופון</translation> <translation id="5334142896108694079">מטמון של סקריפט</translation> <translation id="5336688142483283574">הדף הזה יוסר גם מההיסטוריה שלך ומהפעילות של <ph name="SEARCH_ENGINE" />.</translation> @@ -6520,7 +6521,7 @@ <translation id="5605758115928394442">הודעה נשלחה לטלפון שלך כדי לאשר את זהותך.</translation> <translation id="5606849116180480101">{NUM_EXTENSIONS,plural, =1{התוסף הזה נחסם}one{התוספים האלה נחסמו}two{התוספים האלה נחסמו}other{התוספים האלה נחסמו}}</translation> <translation id="560834977503641186">מידע נוסף על סנכרון Wi-Fi</translation> -<translation id="5608580678041221894">יש להקיש על המקשים הבאים כדי לשנות או להזיז את אזור החיתוך</translation> +<translation id="5608580678041221894">יש ללחוץ על המקשים הבאים כדי לשנות או להזיז את אזור החיתוך</translation> <translation id="560919433407466404">מתן הרשאה למכשירי USB באמצעות Parallels Desktop.</translation> <translation id="5609231933459083978">נראה שהיישום אינו חוקי.</translation> <translation id="5610867721023328944">אפשר לנסות שוב או לבחור מתוך העיצובים שמוצגים למטה.</translation> @@ -6758,7 +6759,7 @@ <translation id="5790085346892983794">הצלחה</translation> <translation id="5790651917470750848">היציאה המועברת כבר קיימת</translation> <translation id="5792295754950501287">עוד פעולות לגבי <ph name="CARD_DESCRIPTION" /></translation> -<translation id="5792728279623964091">יש להקיש על לחצן ההפעלה</translation> +<translation id="5792728279623964091">יש ללחוץ על כפתור ההפעלה</translation> <translation id="5792874008054171483">עוד פעולות לאתר <ph name="SITE_NAME" /></translation> <translation id="5793317771769868848">אמצעי התשלום הזה יימחק מהמכשיר הזה</translation> <translation id="5793339252089865437">אם הורדת העדכון מתבצעת ברשת סלולרית, ייתכן שהיא תהיה כרוכה בתשלום על חריגה.</translation> @@ -7000,7 +7001,7 @@ <translation id="5955304353782037793">app</translation> <translation id="5955721306465922729">אתר מסוים רוצה לפתוח את האפליקציה הזו.</translation> <translation id="5955809630138889698">ייתכן שהמכשיר הזה כשיר רק למצב הדגמה אונליין. אפשר לפנות לנציג התמיכה כדי לקבל פרטים נוספים.</translation> -<translation id="5957987129450536192">יש להקיש על סמל ההקראה לצד תמונת הפרופיל ואז לבחור בטקסט להקראה.</translation> +<translation id="5957987129450536192">יש ללחוץ על סמל ההקראה לצד תמונת הפרופיל ואז לבחור בטקסט להקראה.</translation> <translation id="5958836583172610505">הסנכרון מופעל</translation> <translation id="5959471481388474538">הרשת לא זמינה</translation> <translation id="5959982036207776176">זכוכית מגדלת עוקבת אחרי המילים שמוקראות באמצעות התכונה 'הקראה'</translation> @@ -7901,7 +7902,7 @@ <translation id="6620254580880484313">שם הקונטיינר</translation> <translation id="6621391692573306628">כדי לשלוח את הכרטיסייה הזו למכשיר אחר, צריך להיכנס ל-Chrome בשני המכשירים</translation> <translation id="6622980291894852883">המשך לחסום תמונות</translation> -<translation id="6624036901798307345">במצב טאבלט, מקישים על הלחצן בסרגל הכלים של מונה הכרטיסיות כדי לפתוח שורת כרטיסיות חדשה עם תצוגה המכילה תמונות ממוזערות של כל כרטיסייה.</translation> +<translation id="6624036901798307345">במצב טאבלט, לוחצים על הכפתור בסרגל הכלים של מונה הכרטיסיות כדי לפתוח שורת כרטיסיות חדשה עם תצוגה המכילה תמונות ממוזערות של כל כרטיסייה.</translation> <translation id="6624687053722465643">מתוקי</translation> <translation id="6626581113916585374">מצב האפקט</translation> <translation id="6627743754845412571">אין הרשאה לעקוב אחר תנועות הידיים שלך</translation> @@ -8715,7 +8716,7 @@ <translation id="7207457272187520234">שליחת מידע לגבי אופן השימוש בנתונים וניתוח הביצועים. המכשיר הזה שולח עכשיו אל Google באופן אוטומטי נתוני אבחון, נתוני מכשיר ונתוני שימוש באפליקציות. הנתונים האלה יעזרו לשמור על היציבות של המערכת ושל האפליקציות ולבצע שיפורים אחרים. חלק מהנתונים הנצברים יעזרו גם לשפר את האפליקציות של Google וכן יעזרו לשותפים של Google, כמו מפתחים של Android. ההגדרה הזו נאכפת על-ידי הבעלים. אם הופעלה ההגדרה 'פעילות באפליקציות ובאתרי אינטרנט נוספים', ייתכן שהנתונים יישמרו בחשבון Google שלך.</translation> <translation id="7207631048330366454">חיפוש אפליקציות</translation> <translation id="7210257969463271891">אפליקציות האינטרנט שמתקינים יופיעו כאן</translation> -<translation id="7210432570808024354">הקשה וגרירה כדי להזיז פריטים</translation> +<translation id="7210432570808024354">לחיצה וגרירה כדי להזיז פריטים</translation> <translation id="7210499381659830293">מדפסות בתוסף</translation> <translation id="7211783048245131419">עוד לא הוקצו מתגים.</translation> <translation id="7212097698621322584">צריך להזין את קוד האימות הנוכחי כדי לשנות אותו. אם קוד האימות לא ידוע לך, צריך לאפס את מפתח האבטחה ולאחר מכן ליצור קוד אימות חדש.</translation> @@ -9337,7 +9338,7 @@ <translation id="7660146600670077843">לוחצים לחיצה ימנית על הכרטיסייה ובוחרים באפשרות 'הוספת כרטיסייה לקבוצה חדשה'</translation> <translation id="7661259717474717992">לאפשר לאתרים לשמור ולקרוא נתונים של קובצי Cookie</translation> <translation id="7661451191293163002">לא ניתן להשיג אישור הרשמה.</translation> -<translation id="7662283695561029522">יש להקיש כדי להגדיר</translation> +<translation id="7662283695561029522">יש ללחוץ כדי להגדיר</translation> <translation id="7663719505383602579">מקבל: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="7663774460282684730">יש מקשי קיצור</translation> <translation id="7663859337051362114">הוספת פרופיל eSim</translation> @@ -10450,7 +10451,7 @@ <translation id="8428634594422941299">הבנתי</translation> <translation id="84297032718407999">בעוד <ph name="LOGOUT_TIME_LEFT" /> תבוצע יציאה מהחשבון</translation> <translation id="8429928917752180743">אפשרויות נוספות ל-<ph name="EXTENSION_NAME" /></translation> -<translation id="8431190899827883166">הצגת הקשות</translation> +<translation id="8431190899827883166">הצגת לחיצות</translation> <translation id="843173223122814223">יצירת רקעים באמצעות AI</translation> <translation id="8431977087510901105">הגדרות הסמן אופסו</translation> <translation id="8433186206711564395">הגדרות רשת</translation> @@ -11657,7 +11658,7 @@ <translation id="976499800099896273">תיבת הדו-שיח של התיקון האוטומטי עם הפעולה 'ביטול' מוצגת עבור המילה <ph name="TYPED_WORD" /> שתוקנה למילה <ph name="CORRECTED_WORD" />. יש ללחוץ על החצים למעלה כדי לגשת, לצאת או להתעלם.</translation> <translation id="976572010712028687">אימות היותך הורה</translation> <translation id="978146274692397928">רוחב סימן הפיסוק הראשוני הוא מלא</translation> -<translation id="978978324795544535">הקשה כפולה על פריט, לחיצה ארוכה בהקשה השנייה וגרירת הפריט כדי להזיז אותו</translation> +<translation id="978978324795544535">לחיצה כפולה על פריט, לחיצה ארוכה בלחיצה השנייה וגרירת הפריט כדי להזיז אותו</translation> <translation id="97905529126098460">החלון הזה ייסגר לאחר השלמת הביטול.</translation> <translation id="980731642137034229">לחצן תפריט פעולות</translation> <translation id="981121421437150478">לא מקוון</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index fd1ef03..61cb6bc 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -793,6 +793,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" />-ს <ph name="VOLUME_NAME" />-ზე წვდომა სურს. მას თქვენი ფაილების შეცვლა ან წაშლა შეუძლია.</translation> <translation id="1549966883323105187">ისარგებლეთ თქვენი შენახული პაროლებით უფრო სწრაფად</translation> <translation id="1550656959113606473">ნაგულისხმევი Chrome</translation> +<translation id="1552065819535218588">Chrome შეწყვეტს <ph name="URL" />-ისგან შეტყობინებების სპამად მონიშვნას</translation> <translation id="1552301827267621511">გაფართოებამ „<ph name="EXTENSION_NAME" />“ შეცვალა ძიების პროვაიდერი <ph name="SEARCH_PROVIDER_DOMAIN" />-ით</translation> <translation id="1552752544932680961">გაფართოების მართვა</translation> <translation id="1553538517812678578">შეუზღუდავo</translation> @@ -3085,6 +3086,7 @@ <translation id="3159978855457658359">მოწყობილობის სახელის რედაქტირება</translation> <translation id="3160928651883997588">VPN-ის პარამეტრები</translation> <translation id="3161522574479303604">ყველა ენა</translation> +<translation id="3162070126914310576">ამ მოწყობილობის ახლა რეგისტრაცია შეუძლებელია, რადგან თქვენმა ორგანიზაციულმა დანაყოფმა მიაღწია საწყისი რეგისტრაციის ლიმიტს. დახმარებისთვის დაუკავშირდით თქვენს ადმინისტრატორს.</translation> <translation id="3162766632262775911">ყოველთვის დაიშვას V8 ოპტიმიზატორის გამოყენება</translation> <translation id="3162853326462195145">სასწავლებლის ანგარიში</translation> <translation id="3162899666601560689">საიტები გამოიყენებს ქუქი-ჩანაწერებს დათვალიერების პროცესის გასაუმჯობესებლად, მაგალითად, სისტემაში შესული მდგომარეობის შესანარჩუნებლად ან საყიდლების კალათაში დამატებული ერთეულების დასამახსოვრებლად</translation> @@ -9057,6 +9059,7 @@ <translation id="746861123368584540">გაფართოება ჩაიტვირთა</translation> <translation id="7469612367552312334">ჩართულია • გამოიყენეთ სალაპარაკო ენა, რომ დათვალიერების ისტორიაში მოძებნოთ უკვე მონახულებული ვებსაიტები</translation> <translation id="7470131554696493512">Thunderbolt ან USB4 აქსესუარებისთვის დაიბლოკოს მეხსიერებაზე (RAM) წვდომისა და მისი გაზიარების შესაძლებლობა</translation> +<translation id="7470284766345262333">ეს ანგარიში არ არის დაკავშირებული Google-თან და ამიტომ მიუწვდომელია ფუნქციები, როგორიცაა Chrome სინქ</translation> <translation id="7470424110735398630">თქვენი გაცვლის ბუფერის ნახვა დაშვებულია</translation> <translation id="747114903913869239">შეცდომა: გაფართოება ვერ გაიშიფრა</translation> <translation id="7471520329163184433">უფრო ნელა</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 5326d63..fffd99dd 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -794,6 +794,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" /> ॲक्सेस करू इच्छित आहे. हे तुमच्या फायलीमध्ये फेरफार करू किंवा त्या हटवू शकते.</translation> <translation id="1549966883323105187">तुमचे सेव्ह केलेले पासवर्ड झटपट मिळवा</translation> <translation id="1550656959113606473">डीफॉल्ट Chrome</translation> +<translation id="1552065819535218588"><ph name="URL" /> वरील नोटिफिकेशनना स्पॅम म्हणून फ्लॅग करणे Chrome द्वारे थांबवले जाईल</translation> <translation id="1552301827267621511"><ph name="SEARCH_PROVIDER_DOMAIN" /> वापरण्यासाठी "<ph name="EXTENSION_NAME" />" एक्स्टेंशनने शोधामध्ये बदल केला आहे</translation> <translation id="1552752544932680961">विस्तार व्यवस्थापित करा</translation> <translation id="1553538517812678578">अमर्यादित</translation> @@ -3097,6 +3098,7 @@ <translation id="3159978855457658359">डिव्हाइसचे नाव संपादित करा</translation> <translation id="3160928651883997588">VPN प्राधान्ये</translation> <translation id="3161522574479303604">सर्व भाषा</translation> +<translation id="3162070126914310576">या वेळी या डिव्हाइसची नोंदणी केली जाऊ शकत नाही, कारण तुमच्या संस्थेच्या युनिटने त्याची सुरुवातीची नोंदणीची मर्यादा गाठली आहे. साहाय्यासाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation> <translation id="3162766632262775911">V8 ऑप्टिमायझर वापरण्यासाठी नेहमी अनुमती दिली आहे</translation> <translation id="3162853326462195145">शाळा खाते</translation> <translation id="3162899666601560689">तुमच्या ब्राउझिंग अनुभवात सुधारणा करण्यासाठी, उदाहरणार्थ, तुम्हाला साइन इन केलेले ठेवण्यासाठी किंवा तुमच्या शॉपिंग कार्टमधील आयटम लक्षात ठेवण्यासाठी साइट कुकी वापरू शकतात</translation> @@ -9072,6 +9074,7 @@ <translation id="746861123368584540">एक्स्टेंशन लोड केले</translation> <translation id="7469612367552312334">सुरू • तुमचा ब्राउझिंग इतिहास शोधण्यासाठी आणि तुम्ही भेट दिलेल्या साइट शोधण्यासाठी दररोजची भाषा वापरा</translation> <translation id="7470131554696493512">थंडरबोल्ट किंवा USB4 अॅक्सेसरीना मेमरी (RAM) अॅक्सेस आणि शेअर करण्यापासून ब्लॉक करा</translation> +<translation id="7470284766345262333">हे खाते Google शी संबंधित नसल्यामुळे, Chrome सिंकसारखी वैशिष्ट्ये उपलब्ध नाहीत</translation> <translation id="7470424110735398630">तुमचा क्लिपबोर्ड पाहण्याची अनुमती आहे</translation> <translation id="747114903913869239">एरर: एक्स्टेंशन डीकोड करता आले नाही</translation> <translation id="7471520329163184433">आणखी धीमी</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index e9f90da..f4735b9 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -794,6 +794,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> ingin mengakses <ph name="VOLUME_NAME" />. Apl mungkin mengubah suai atau memadamkan fail anda.</translation> <translation id="1549966883323105187">Akses kata laluan disimpan anda dengan lebih pantas</translation> <translation id="1550656959113606473">Chrome Lalai</translation> +<translation id="1552065819535218588">Chrome akan berhenti membenderakan pemberitahuan daripada <ph name="URL" /> sebagai spam</translation> <translation id="1552301827267621511">Sambungan "<ph name="EXTENSION_NAME" />" telah menukar carian agar menggunakan <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Uruskan sambungan</translation> <translation id="1553538517812678578">tidak terhad</translation> @@ -3098,6 +3099,7 @@ <translation id="3159978855457658359">Edit nama peranti</translation> <translation id="3160928651883997588">Pilihan VPN</translation> <translation id="3161522574479303604">Semua bahasa</translation> +<translation id="3162070126914310576">Peranti gagal didaftarkan pada masa ini kerana unit organisasi anda telah mencapai had pendaftaran permulaan. Hubungi pentadbir anda untuk mendapatkan bantuan.</translation> <translation id="3162766632262775911">Sentiasa dibenarkan untuk menggunakan pengoptimum V8</translation> <translation id="3162853326462195145">Akaun sekolah</translation> <translation id="3162899666601560689">Tapak boleh menggunakan kuki untuk memperbaik pengalaman penyemakan imbas anda, contohnya, untuk mengekalkan log masuk anda atau untuk mengingat item dalam troli beli-belah anda</translation> @@ -9072,6 +9074,7 @@ <translation id="746861123368584540">Sambungan dimuatkan</translation> <translation id="7469612367552312334">Dihidupkan • Gunakan bahasa harian untuk mencari sejarah penyemakan imbas anda dan temukan laman yang telah anda lawati</translation> <translation id="7470131554696493512">Sekat aksesori Thunderbolt atau USB4 daripada mengakses dan berkongsi memori (RAM)</translation> +<translation id="7470284766345262333">Akaun ini tidak dikaitkan dengan Google, maka ciri seperti penyegerakan Chrome tidak tersedia</translation> <translation id="7470424110735398630">Dibenarkan untuk melihat papan keratan anda</translation> <translation id="747114903913869239">Ralat: Tidak dapat menyahkod sambungan</translation> <translation id="7471520329163184433">Lebih perlahan</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index 9d2ced6..d700823 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -793,6 +793,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> wil toegang tot <ph name="VOLUME_NAME" />. Hierdoor worden je bestanden mogelijk aangepast of verwijderd.</translation> <translation id="1549966883323105187">Krijg sneller toegang tot je opgeslagen wachtwoorden</translation> <translation id="1550656959113606473">Chrome-standaard</translation> +<translation id="1552065819535218588">Chrome markeert meldingen van <ph name="URL" /> niet meer als spam</translation> <translation id="1552301827267621511">De extensie '<ph name="EXTENSION_NAME" />' heeft ingesteld dat <ph name="SEARCH_PROVIDER_DOMAIN" /> wordt gebruikt voor zoekopdrachten</translation> <translation id="1552752544932680961">Extensie beheren</translation> <translation id="1553538517812678578">onbeperkt</translation> @@ -3085,6 +3086,7 @@ <translation id="3159978855457658359">Apparaatnaam bewerken</translation> <translation id="3160928651883997588">VPN-voorkeuren</translation> <translation id="3161522574479303604">Alle talen</translation> +<translation id="3162070126914310576">Dit apparaat kan nu niet worden ingeschreven omdat je organisatie-eenheid de aanvankelijke inschrijvingslimiet heeft bereikt. Neem voor hulp contact op met de beheerder.</translation> <translation id="3162766632262775911">V8-optimalisatie mag altijd worden gebruikt</translation> <translation id="3162853326462195145">Schoolaccount</translation> <translation id="3162899666601560689">Sites mogen cookies gebruiken om de browsefunctionaliteit te verbeteren, bijvoorbeeld door je ingelogd te houden of door artikelen in je winkelwagen te onthouden</translation> @@ -9050,6 +9052,7 @@ <translation id="746861123368584540">Extensie geladen</translation> <translation id="7469612367552312334">Aan • Gebruik alledaagse taal om in je browsegeschiedenis te zoeken en sites te vinden die je hebt bezocht.</translation> <translation id="7470131554696493512">Voorkomen dat Thunderbolt- of USB4-accessoires toegang krijgen tot het geheugen (RAM) en het delen</translation> +<translation id="7470284766345262333">Dit account is niet gekoppeld aan Google, dus functies zoals Chrome-synchronisatie zijn niet beschikbaar</translation> <translation id="7470424110735398630">Toestemming om je klembord te bekijken</translation> <translation id="747114903913869239">Fout: kan extensie niet decoderen</translation> <translation id="7471520329163184433">Langzamer</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index aa68b0c..015d523 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -791,6 +791,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> vil ha tilgang til <ph name="VOLUME_NAME" />. Det kan føre til at filene dine endres eller slettes.</translation> <translation id="1549966883323105187">Få raskere tilgang til de lagrede passordene dine</translation> <translation id="1550656959113606473">Standard Chrome</translation> +<translation id="1552065819535218588">Chrome slutter å flagge varsler fra <ph name="URL" /> som søppelpost</translation> <translation id="1552301827267621511">Utvidelsen «<ph name="EXTENSION_NAME" />» endret søkemotoren til <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Administrer utvidelsen</translation> <translation id="1553538517812678578">ubegrenset</translation> @@ -3092,6 +3093,7 @@ <translation id="3159978855457658359">Rediger enhetsnavnet</translation> <translation id="3160928651883997588">VPN-innstillinger</translation> <translation id="3161522574479303604">Alle språk</translation> +<translation id="3162070126914310576">Denne enheten kan ikke registreres nå fordi organisasjonsenheten din har nådd grensen for initiell registrering. Kontakt administratoren din hvis du trenger hjelp.</translation> <translation id="3162766632262775911">Nettsteder som alltid har lov til å bruke V8-optimalisering</translation> <translation id="3162853326462195145">Skolekonto</translation> <translation id="3162899666601560689">Nettsteder kan bruke informasjonskapsler for å gi deg en bedre surfeopplevelse, for eksempel for å holde deg pålogget eller huske varene i handlekurven din</translation> @@ -9061,6 +9063,7 @@ <translation id="746861123368584540">Utvidelsen er lastet inn</translation> <translation id="7469612367552312334">På • Bruk dagligdags språk for å søke i nettleserloggen og finne nettsteder du har besøkt</translation> <translation id="7470131554696493512">Blokker Thunderbolt- eller USB4-tilbehør fra å bruke og dele minne (RAM)</translation> +<translation id="7470284766345262333">Denne kontoen er ikke tilknyttet Google, så funksjoner som Chrome-synkronisering er ikke tilgjengelige</translation> <translation id="7470424110735398630">Nettsteder som har lov til å se utklippstavlen din</translation> <translation id="747114903913869239">Feil: Kan ikke avkode etternavnet</translation> <translation id="7471520329163184433">Saktere</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index f9912d1..26bbc856 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -2976,7 +2976,7 @@ <translation id="3048589239114571785">ਚਲਾਓ (k)</translation> <translation id="3048742847101793553">ਸਕੈਨ ਅਸਫਲ ਹੋਣ ਦੇ ਕਾਰਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਨੇ ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਬਲਾਕ ਕਰ ਦਿੱਤਾ।</translation> <translation id="3048917188684939573">ਕਾਸਟ ਅਤੇ ਡੀਵਾਈਸ ਲੌਗ</translation> -<translation id="3051250416341590778">ਡਿਸਪਲੇ ਦਾ ਆਕਾਰ</translation> +<translation id="3051250416341590778">ਡਿਸਪਲੇ ਸਾਈਜ਼</translation> <translation id="3053013834507634016">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਕੁੰਜੀ ਵਰਤੋਂ</translation> <translation id="3053273573829329829">ਵਰਤੋਂਕਾਰ ਪਿੰਨ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="3053274730492362225">ਬਲਿੰਕ ਨਾ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index a32b740d..a41a20e6 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -793,6 +793,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> quer aceder a <ph name="VOLUME_NAME" />. Pode modificar ou eliminar os seus ficheiros.</translation> <translation id="1549966883323105187">Aceda mais rapidamente às suas palavras-passe guardadas</translation> <translation id="1550656959113606473">Chrome predefinido</translation> +<translation id="1552065819535218588">O Chrome vai deixar de sinalizar as notificações de <ph name="URL" /> como spam</translation> <translation id="1552301827267621511">A extensão "<ph name="EXTENSION_NAME" />" alterou a pesquisa para utilizar <ph name="SEARCH_PROVIDER_DOMAIN" />.</translation> <translation id="1552752544932680961">Gerir extensão</translation> <translation id="1553538517812678578">ilimitado</translation> @@ -3086,6 +3087,7 @@ <translation id="3159978855457658359">Edite o nome do dispositivo</translation> <translation id="3160928651883997588">Preferências da VPN</translation> <translation id="3161522574479303604">Todos os idiomas</translation> +<translation id="3162070126914310576">Não é possível inscrever este dispositivo neste momento porque a sua unidade organizacional atingiu o limite de inscrição inicial. Contacte o seu administrador para receber assistência.</translation> <translation id="3162766632262775911">Sempre com autorização para usar o otimizador do V8</translation> <translation id="3162853326462195145">Conta escolar</translation> <translation id="3162899666601560689">Os sites podem usar cookies para melhorar a experiência de navegação, por exemplo, para manter a sua sessão iniciada ou memorizar os artigos no seu carrinho de compras</translation> @@ -9061,6 +9063,7 @@ <translation id="746861123368584540">Extensão carregada.</translation> <translation id="7469612367552312334">Ativado • Use linguagem corrente para pesquisar o seu histórico de navegação e encontrar os sites que visitou</translation> <translation id="7470131554696493512">Impedir os acessórios Thunderbolt ou USB4 de acederem e partilharem a memória (RAM)</translation> +<translation id="7470284766345262333">Esta conta não está associada à Google. Por isso, certas funcionalidades, como a Sincronização do Chrome, não estão disponíveis</translation> <translation id="7470424110735398630">Com autorização para ver a sua área de transferência</translation> <translation id="747114903913869239">Erro: não foi possível descodificar a extensão</translation> <translation id="7471520329163184433">Mais lenta</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 8dc11f6f..07d346e 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -792,6 +792,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> želi da pristupa <ph name="VOLUME_NAME" />. Možda će da menja ili briše datoteke.</translation> <translation id="1549966883323105187">Brže pristupajte sačuvanim lozinkama</translation> <translation id="1550656959113606473">Podrazumevani Chrome</translation> +<translation id="1552065819535218588">Chrome će prestati da označava obaveštenja od <ph name="URL" /> kao nepoželjna</translation> <translation id="1552301827267621511">Dodatak „<ph name="EXTENSION_NAME" />“ je promenio pretragu tako da koristi <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Upravljajte dodatkom</translation> <translation id="1553538517812678578">neograničeno</translation> @@ -3083,6 +3084,7 @@ <translation id="3159978855457658359">Izmenite naziv uređaja</translation> <translation id="3160928651883997588">Podešavanja VPN-a</translation> <translation id="3161522574479303604">Svi jezici</translation> +<translation id="3162070126914310576">Ovaj uređaj trenutno ne može da se registruje jer je organizaciona jedinica dostigla početno ograničenje za registracije. Zatražite pomoć od administratora.</translation> <translation id="3162766632262775911">Korišćenje V8 optimizatora je uvek dozvoljeno</translation> <translation id="3162853326462195145">Školski nalog</translation> <translation id="3162899666601560689">Sajtovi mogu da koriste kolačiće za poboljšanje doživljaja pregledanja, na primer, da biste ostali prijavljeni ili da bi stavke u vašoj korpi za kupovinu ostale sačuvane</translation> @@ -9060,6 +9062,7 @@ <translation id="746861123368584540">Dodatak je učitan</translation> <translation id="7469612367552312334">Uključeno • Koristite svakodnevni jezik da biste pretraživali istoriju pregledanja i pronalazili sajtove koje ste posetili</translation> <translation id="7470131554696493512">Sprečite Thunderbolt ili USB4 dodatnu opremu da pristupa memoriji (RAM) i da je deli</translation> +<translation id="7470284766345262333">Ovaj nalog nije povezan sa Google-om, pa funkcije kao što je Chrome sinhronizacija nisu dostupne</translation> <translation id="7470424110735398630">Dozvoljeno im je da vide privremenu memoriju</translation> <translation id="747114903913869239">Greška: Nije moguće dešifrovati dodatak</translation> <translation id="7471520329163184433">Sporije</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 95104cb..ec150533 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -792,6 +792,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> жели да приступа <ph name="VOLUME_NAME" />. Можда ће да мења или брише датотеке.</translation> <translation id="1549966883323105187">Брже приступајте сачуваним лозинкама</translation> <translation id="1550656959113606473">Подразумевани Chrome</translation> +<translation id="1552065819535218588">Chrome ће престати да означава обавештења од <ph name="URL" /> као непожељна</translation> <translation id="1552301827267621511">Додатак „<ph name="EXTENSION_NAME" />“ је променио претрагу тако да користи <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Управљајте додатком</translation> <translation id="1553538517812678578">неограничено</translation> @@ -3083,6 +3084,7 @@ <translation id="3159978855457658359">Измените назив уређаја</translation> <translation id="3160928651883997588">Подешавања VPN-а</translation> <translation id="3161522574479303604">Сви језици</translation> +<translation id="3162070126914310576">Овај уређај тренутно не може да се региструје јер је организациона јединица достигла почетно ограничење за регистрације. Затражите помоћ од администратора.</translation> <translation id="3162766632262775911">Коришћење V8 оптимизатора је увек дозвољено</translation> <translation id="3162853326462195145">Школски налог</translation> <translation id="3162899666601560689">Сајтови могу да користе колачиће за побољшање доживљаја прегледања, на пример, да бисте остали пријављени или да би ставке у вашој корпи за куповину остале сачуване</translation> @@ -9060,6 +9062,7 @@ <translation id="746861123368584540">Додатак је учитан</translation> <translation id="7469612367552312334">Укључено • Користите свакодневни језик да бисте претраживали историју прегледања и проналазили сајтове које сте посетили</translation> <translation id="7470131554696493512">Спречите Thunderbolt или USB4 додатну опрему да приступа меморији (RAM) и да је дели</translation> +<translation id="7470284766345262333">Овај налог није повезан са Google-ом, па функције као што је Chrome синхронизација нису доступне</translation> <translation id="7470424110735398630">Дозвољено им је да виде привремену меморију</translation> <translation id="747114903913869239">Грешка: Није могуће дешифровати додатак</translation> <translation id="7471520329163184433">Спорије</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index b725e8c..02e22e84 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -794,6 +794,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> vill ha åtkomst till <ph name="VOLUME_NAME" />. Den kan ändra eller ta bort dina filer.</translation> <translation id="1549966883323105187">Kom åt dina sparade lösenord snabbare</translation> <translation id="1550656959113606473">Standardinställningar för Chrome</translation> +<translation id="1552065819535218588">Chrome slutar flagga aviseringar från <ph name="URL" /> som spam</translation> <translation id="1552301827267621511">Tillägget <ph name="EXTENSION_NAME" /> ändrade sökleverantören till <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Hantera tillägg</translation> <translation id="1553538517812678578">obegränsad</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 4e8be3b..35028d66 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -791,6 +791,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> inataka kufikia <ph name="VOLUME_NAME" />. Inaweza kurekebisha au kufuta faili zako.</translation> <translation id="1549966883323105187">Fikia kwa haraka manenosiri yako yaliyohifadhiwa</translation> <translation id="1550656959113606473">Chrome ya Chaguomsingi</translation> +<translation id="1552065819535218588">Chrome itaacha kutia alama arifa kutoka <ph name="URL" /> kuwa ni taka</translation> <translation id="1552301827267621511">Kiendelezi cha "<ph name="EXTENSION_NAME" />" kilibadilisha mtambo wa kutafuta ili kitumie <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Dhibiti kiendelezi</translation> <translation id="1553538517812678578">bila kikomo</translation> @@ -3095,6 +3096,7 @@ <translation id="3159978855457658359">Badilisha jina la kifaa</translation> <translation id="3160928651883997588">Mapendeleo ya VPN</translation> <translation id="3161522574479303604">Lugha zote</translation> +<translation id="3162070126914310576">Kifaa hiki hakiwezi kuandikishwa kwa sasa kwa sababu kitengo cha shirika lako kimefikia kikomo chake cha kwanza cha uandikishaji. Wasiliana na msimamizi wako ili upate usaidizi.</translation> <translation id="3162766632262775911">Zinazoruhusiwa kila wakati kutumia kiboreshaji cha V8</translation> <translation id="3162853326462195145">Akaunti ya shule</translation> <translation id="3162899666601560689">Tovuti zinaweza kutumia vidakuzi ili kuboresha hali yako ya kuvinjari, kwa mfano, ili kufanya ubaki ukiwa umeingia katika akaunti au kukumbuka bidhaa zilizo kwenye kikapu chako cha ununuzi</translation> @@ -9067,6 +9069,7 @@ <translation id="746861123368584540">Kiendelezi kimepakiwa</translation> <translation id="7469612367552312334">Imewashwa • Tumia lugha ya kawaida kutafuta historia yako ya kuvinjari na kupata tovuti ulizotembelea</translation> <translation id="7470131554696493512">Kuzuia vifuasi vya Thunderbolt au USB4 visifikie na kutuma hifadhi (RAM)</translation> +<translation id="7470284766345262333">Akaunti hii haijahusishwa na Google kwa hivyo vipengele kama vile usawazishaji wa Chrome havipatikani</translation> <translation id="7470424110735398630">Zinazoruhusiwa kuona ubao wako wa kunakili</translation> <translation id="747114903913869239">Hitilafu: Haikuweza kufumbua kiendelezi</translation> <translation id="7471520329163184433">Polepole</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 3f8b86a1..5b82f589 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -794,6 +794,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" />ని యాక్సెస్ చేయాలనుకుంటోంది. దీని వలన మీ ఫైళ్లు మారవచ్చు లేదా తొలగించబడవచ్చు.</translation> <translation id="1549966883323105187">మీరు సేవ్ చేసిన పాస్వర్డ్లను క్విక్గా పొందండి</translation> <translation id="1550656959113606473">ఆటోమేటిక్ Chrome</translation> +<translation id="1552065819535218588"><ph name="URL" /> నుండి వచ్చే నోటిఫికేషన్లను స్పామ్గా ఫ్లాగ్ చేయడాన్ని Chrome ఆపివేస్తుంది</translation> <translation id="1552301827267621511"><ph name="SEARCH_PROVIDER_DOMAIN" />ను ఉపయోగించడానికి "<ph name="EXTENSION_NAME" />" ఎక్స్టెన్షన్ సెర్చ్ను మార్చింది</translation> <translation id="1552752544932680961">ఎక్స్టెన్షన్ను నిర్వహించండి</translation> <translation id="1553538517812678578">అపరిమిత</translation> @@ -3096,6 +3097,7 @@ <translation id="3159978855457658359">పరికరం పేరును ఎడిట్ చేయండి</translation> <translation id="3160928651883997588">VPN ప్రాధాన్యతలు</translation> <translation id="3161522574479303604">అన్ని భాషలు</translation> +<translation id="3162070126914310576">మీ సంస్థ యూనిట్ దాని ప్రారంభ ఎన్రోల్మెంట్ పరిమితిని చేరుకున్నందున ఈ పరికరాన్ని ప్రస్తుతం ఎన్రోల్ చేయడం సాధ్యం కాదు. సహాయం కోసం మీ అడ్మినిస్ట్రేటర్ను సంప్రదించండి.</translation> <translation id="3162766632262775911">V8 ఆప్టిమైజర్ను ఉపయోగించడానికి ఎల్లవేళలా అనుమతించబడుతుంది</translation> <translation id="3162853326462195145">పాఠశాల ఖాతా</translation> <translation id="3162899666601560689">మిమ్మల్ని సైన్ ఇన్ చేసి ఉంచడం లేదా మీ షాపింగ్ కార్ట్లోని ఐటెమ్లను సేవ్ చేయడం మొదలైన చర్యల ద్వారా మీ బ్రౌజింగ్ ఎక్స్పీరియన్స్ను మెరుగుపరచడానికి, వెబ్సైట్లు కుక్కీలను ఉపయోగించవచ్చు</translation> @@ -9069,6 +9071,7 @@ <translation id="746861123368584540">ఎక్స్టెన్షన్ లోడ్ అయ్యింది</translation> <translation id="7469612367552312334">ఆన్లో ఉంది • మీ బ్రౌజింగ్ హిస్టరీని సెర్చ్ చేయడానికి, మీరు బ్రౌజ్ చేసిన సైట్లను కనుగొనడానికి రోజువారీ భాషను ఉపయోగించండి</translation> <translation id="7470131554696493512">Thunderbolt లేదా USB4 యాక్సెసరీలను యాక్సెస్ చేయకుండా, మెమరీని (RAM) షేర్ చేయకుండా బ్లాక్ చేయండి</translation> +<translation id="7470284766345262333">ఈ ఖాతా Googleతో లింక్ చేయాలి కాబట్టి, 'Chrome సింక్' వంటి ఫీచర్లు అందుబాటులో లేవు</translation> <translation id="7470424110735398630">మీ క్లిప్బోర్డ్ చూడటానికి అనుమతించబడింది</translation> <translation id="747114903913869239">ఎర్రర్: ఎక్స్టెన్షన్లను డీకోడ్ చేయడం సాధ్యం కాలేదు</translation> <translation id="7471520329163184433">నెమ్మదిగా</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 9e885130..0e7e2bc 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -793,6 +793,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> ต้องการเข้าถึง <ph name="VOLUME_NAME" /> แอปอาจแก้ไขหรือลบไฟล์ของคุณได้</translation> <translation id="1549966883323105187">ดูรหัสผ่านที่บันทึกไว้ได้เร็วขึ้น</translation> <translation id="1550656959113606473">Chrome ซึ่งเป็นค่าเริ่มต้น</translation> +<translation id="1552065819535218588">Chrome จะหยุดแจ้งว่าการแจ้งเตือนจาก <ph name="URL" /> เป็นสแปม</translation> <translation id="1552301827267621511">ส่วนขยาย "<ph name="EXTENSION_NAME" />" เปลี่ยนไปใช้การค้นหาโดย <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">จัดการส่วนขยาย</translation> <translation id="1553538517812678578">ไม่จำกัด</translation> @@ -3085,6 +3086,7 @@ <translation id="3159978855457658359">แก้ไขชื่ออุปกรณ์</translation> <translation id="3160928651883997588">ค่ากำหนดของ VPN</translation> <translation id="3161522574479303604">ทุกภาษา</translation> +<translation id="3162070126914310576">ลงทะเบียนอุปกรณ์นี้ไม่ได้ในตอนนี้เนื่องจากหน่วยขององค์กรถึงขีดจำกัดการลงทะเบียนเริ่มต้นแล้ว โปรดติดต่อผู้ดูแลระบบเพื่อขอความช่วยเหลือ</translation> <translation id="3162766632262775911">ได้รับอนุญาตให้ใช้เครื่องมือเพิ่มประสิทธิภาพ V8 เสมอ</translation> <translation id="3162853326462195145">บัญชีโรงเรียน</translation> <translation id="3162899666601560689">เว็บไซต์สามารถใช้คุกกี้เพื่อปรับปรุงประสบการณ์การท่องเว็บ เช่น คงสถานะลงชื่อเข้าใช้ไว้ให้คุณ หรือจดจำสินค้าที่คุณใส่ไว้ในรถเข็นช็อปปิ้ง</translation> @@ -9051,6 +9053,7 @@ <translation id="746861123368584540">โหลดส่วนขยายแล้ว</translation> <translation id="7469612367552312334">เปิดอยู่ • ใช้ภาษาที่ใช้ในชีวิตประจำวันเพื่อค้นหาประวัติการท่องเว็บและหาเว็บไซต์ที่เคยเข้าชม</translation> <translation id="7470131554696493512">บล็อกอุปกรณ์เสริม Thunderbolt หรือ USB4 ไม่ให้เข้าถึงและแชร์หน่วยความจำ (RAM)</translation> +<translation id="7470284766345262333">บัญชีนี้ไม่ได้เชื่อมโยงกับ Google ดังนั้นฟีเจอร์ต่างๆ เช่น การซิงค์ของ Chrome จึงใช้ไม่ได้</translation> <translation id="7470424110735398630">ได้รับอนุญาตให้ดูคลิปบอร์ด</translation> <translation id="747114903913869239">ข้อผิดพลาด: ไม่สามารถถอดรหัสส่วนขยาย</translation> <translation id="7471520329163184433">ช้าลง</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 3b60cbd..7350234 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -794,6 +794,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" /> muốn truy cập <ph name="VOLUME_NAME" />. Ứng dụng này có thể sửa đổi hoặc xóa các tệp của bạn.</translation> <translation id="1549966883323105187">Truy cập mật khẩu bạn đã lưu nhanh chóng hơn</translation> <translation id="1550656959113606473">Chrome mặc định</translation> +<translation id="1552065819535218588">Chrome sẽ ngừng đánh dấu thông báo của <ph name="URL" /> là nội dung rác</translation> <translation id="1552301827267621511">Tiện ích "<ph name="EXTENSION_NAME" />" đã thay đổi công cụ tìm kiếm thành <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">Quản lý tiện ích</translation> <translation id="1553538517812678578">không giới hạn</translation> @@ -3098,6 +3099,7 @@ <translation id="3159978855457658359">Chỉnh sửa tên thiết bị</translation> <translation id="3160928651883997588">Lựa chọn ưu tiên về VPN</translation> <translation id="3161522574479303604">Tất cả ngôn ngữ</translation> +<translation id="3162070126914310576">Hiện không thể đăng ký thiết bị này vì đơn vị tổ chức của bạn đã đạt đến giới hạn đăng ký ban đầu. Hãy liên hệ với quản trị viên để được trợ giúp.</translation> <translation id="3162766632262775911">Luôn được phép sử dụng trình tối ưu hoá V8</translation> <translation id="3162853326462195145">Tài khoản trường học</translation> <translation id="3162899666601560689">Các trang web có thể dùng cookie để cải thiện trải nghiệm duyệt web của bạn, chẳng hạn như để duy trì trạng thái đăng nhập hoặc ghi nhớ các mặt hàng có trong giỏ hàng</translation> @@ -9074,6 +9076,7 @@ <translation id="746861123368584540">Đã tải tiện ích</translation> <translation id="7469612367552312334">Bật • Dùng ngôn ngữ giao tiếp thường ngày để tìm nhật ký duyệt web và tìm các trang web bạn đã truy cập</translation> <translation id="7470131554696493512">Không cho phép các phụ kiện Thunderbolt hoặc USB4 truy cập và chia sẻ bộ nhớ (RAM)</translation> +<translation id="7470284766345262333">Tài khoản này chưa được liên kết với Google nên bạn không thể sử dụng các tính năng như đồng bộ hoá Chrome</translation> <translation id="7470424110735398630">Được phép xem bảng nhớ tạm của bạn</translation> <translation id="747114903913869239">Lỗi: Không thể giải mã tiện ích</translation> <translation id="7471520329163184433">Chậm hơn</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 82e43d6..412b01d 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -2079,7 +2079,7 @@ <translation id="2442916515643169563">文字阴影</translation> <translation id="2443487764245141020">网站可能还需要使用标识符来识别您的设备</translation> <translation id="244475495405467108">关闭左侧标签页</translation> -<translation id="2444874983932528148">轻松地从上次停下的地方继续</translation> +<translation id="2444874983932528148">无缝延续浏览体验</translation> <translation id="2445081178310039857">必须指定扩展程序根目录。</translation> <translation id="2445484935443597917">创建新的个人资料</translation> <translation id="2445726032315793326">局部放大镜</translation> @@ -7875,7 +7875,7 @@ <translation id="6628316682330029452">客户端证书是用于向其他服务器标识您身份的证书。</translation> <translation id="6628328486509726751">上传时间:<ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> <translation id="6629951648264770593"><ph name="MODIFIER" />+<ph name="KEY" /></translation> -<translation id="6630117778953264026">更高的安全性</translation> +<translation id="6630117778953264026">安全再升级</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" />希望获得某个证书的永久访问权限,以便代表您进行自我身份验证。</translation> <translation id="6634220840123396409">我信任该网站,单选按钮分组,第 2 个,共 3 个</translation> <translation id="6635362468090274700">任何人都无法与您分享内容,除非您将自己设为可见。<ph name="BR" /><ph name="BR" />若要将自己设为暂时可见,请打开状态区,然后开启“附近分享”的高可见度模式。</translation> @@ -9841,7 +9841,7 @@ <translation id="8024161440284949905">继续使用这些标签页</translation> <translation id="8025151549289123443">锁定屏幕和登录</translation> <translation id="8025291188699172126">更新简介</translation> -<translation id="8026471514777758216">在您的所有设备上保持同步</translation> +<translation id="8026471514777758216">跨设备同步</translation> <translation id="8026784703228858744">借助同步功能保存书签和其他数据</translation> <translation id="8027325966409484573">{NUM_DAYS,plural, =0{0 天前访问过}=1{1 天前访问过}other{# 天前访问过}}</translation> <translation id="8028060951694135607">Microsoft 密钥恢复</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 476679b..13be088 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -794,6 +794,7 @@ <translation id="1549788673239553762">「<ph name="APP_NAME" />」想要存取「<ph name="VOLUME_NAME" />」。它可以修改或刪除您的檔案。</translation> <translation id="1549966883323105187">快速查看已儲存的密碼</translation> <translation id="1550656959113606473">預設的 Chrome</translation> +<translation id="1552065819535218588">Chrome 會停止將 <ph name="URL" /> 的通知標記為垃圾內容</translation> <translation id="1552301827267621511">「<ph name="EXTENSION_NAME" />」擴充程式已變更搜尋引擎,改為使用 <ph name="SEARCH_PROVIDER_DOMAIN" /></translation> <translation id="1552752544932680961">管理擴充功能</translation> <translation id="1553538517812678578">無限制</translation> @@ -3097,6 +3098,7 @@ <translation id="3159978855457658359">編輯裝置名稱</translation> <translation id="3160928651883997588">VPN 偏好設定</translation> <translation id="3161522574479303604">所有語言</translation> +<translation id="3162070126914310576">你的機構單位達到初始註冊限制,因此這部裝置目前無法註冊。請聯絡管理員尋求協助。</translation> <translation id="3162766632262775911">一律允許使用 V8 優化工具</translation> <translation id="3162853326462195145">學校帳戶</translation> <translation id="3162899666601560689">網站可使用 Cookie 來改善瀏覽體驗,例如讓您保持登入狀態或記住購物車中的商品</translation> @@ -9056,6 +9058,7 @@ <translation id="746861123368584540">已載入擴充程式</translation> <translation id="7469612367552312334">開啟 • 利用日常用語搜尋瀏覽記錄,搜尋你瀏覽過的網站</translation> <translation id="7470131554696493512">禁止 Thunderbolt 或 USB4 配件存取並分享記憶體 (RAM)</translation> +<translation id="7470284766345262333">此帳戶未與 Google 建立關聯,因此無法使用 Chrome 同步等功能</translation> <translation id="7470424110735398630">已允許查看剪貼簿</translation> <translation id="747114903913869239">錯誤:無法為擴充功能解碼</translation> <translation id="7471520329163184433">減速</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index 14430d6..24ce153 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -1816,11 +1816,6 @@ <message name="IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_ALLOW_AGAIN_LABEL" desc="'Unused Site Permissions' shows unused websites for which permissions have been revoked. This label is for the action to undo the revokation and allow the site permissions again."> Allow again </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_HEADER_LABEL" desc="'Unused Site Permissions' shows the revoked permissions of unused websites. This label is the header of the module in the site settings page. The number represents the number of sites for which permissions were revoked."> - {NUM_SITES, plural, - =1 {Permissions removed from <ph name="BEGIN_BOLD"><b></ph>1 site<ph name="END_BOLD"></b></ph> you haven’t visited in a while} - other {Permissions removed from <ph name="BEGIN_BOLD"><b></ph>{NUM_SITES} sites<ph name="END_BOLD"></b></ph> you haven’t visited in a while}} - </message> <message name="IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_ONE_PERMISSION_LABEL" desc="'Unused Site Permissions' shows the revoked permissions of unused websites. This text describes which permission was removed and is shown if there is exactly one permission."> Removed <ph name="PERMISSION">$1<ex>location</ex></ph> </message> @@ -1903,16 +1898,6 @@ =1 {Review 1 extension that may be unsafe} other {Review {NUM_EXTENSIONS} extensions that may be unsafe}} </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_PRIMARY_LABEL" desc="'Review Notification Permissions' shows the websites that send a lot of notifications. This label is the header of the module in the site settings notification page. The number represents the number of notification permissions to be reviewed."> - {NUM_SITES, plural, - =1 {Review 1 site that sent a lot of notifications} - other {Review {NUM_SITES} sites that sent a lot of notifications}} - </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_SECONDARY_LABEL" desc="'Review Notification Permissions' shows the websites that send a lot of notifications. This label is the description of the module in site settings notification page."> - {NUM_SITES, plural, - =1 {This site sent a lot of notifications recently. You can stop it from sending future notifications.} - other {These sites sent a lot of notifications recently. You can stop them from sending future notifications.}} - </message> <message name="IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_IGNORED_TOAST_LABEL" desc="'Review Notification Permissions' shows the websites that send a lot of notifications. This label is to indicate for which site the user has explicitly allowed permissions."> Notifications allowed for <ph name="SITE">$1<ex>www.example.com</ex></ph> </message> @@ -1948,11 +1933,6 @@ <message name="IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_MORE_ACTIONS_ARIA_LABEL" desc="'Review Notification Permissions' shows the websites that send a lot of notifications. This ARIA (accessibility) label is to show more actions for a notification permissions item."> More actions for <ph name="WEBSITE">$1<ex>website.com</ex></ph> </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_HEADER_LABEL" desc="'Review Notification Permissions' shows the websites that send a lot of notifications. This label is for the header in Privacy and Security Settings page that surface an entry point to the module itself. The integer input represents the number of notification permissions to be reviewed."> - {NUM_SITES, plural, - =1 {Review <ph name="BEGIN_BOLD"><b></ph>1 site<ph name="END_BOLD"></b></ph> that recently sent a lot of notifications} - other {Review <ph name="BEGIN_BOLD"><b></ph>{NUM_SITES} sites<ph name="END_BOLD"></b></ph> that recently sent a lot of notifications}} - </message> <message name="IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_BLOCK_ALL_LABEL" desc="'Review Notification Permissions' shows the websites that send a lot of notifications. This label is for a button that allows the user to block notifications for all selected sites."> Block all </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_HEADER_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_HEADER_LABEL.png.sha1 deleted file mode 100644 index f73c498..0000000 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_HEADER_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cb5069a64c188dbeec6578d34594021603c02144 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_PRIMARY_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_PRIMARY_LABEL.png.sha1 deleted file mode 100644 index 07877ba9..0000000 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_PRIMARY_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8b5b7c8d959bea2a8bf7d31243aba0d0466da239 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_SECONDARY_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_SECONDARY_LABEL.png.sha1 deleted file mode 100644 index 0a1f8f8..0000000 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_SECONDARY_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -31d9b8d63ca573006b132cf2992dc31ba0ddc376 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_HEADER_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_HEADER_LABEL.png.sha1 deleted file mode 100644 index 5a70a83..0000000 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_HEADER_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -66ce8d1d52adbdeb2b152e45252716188bfbc770 \ No newline at end of file
diff --git a/chrome/browser/apps/guest_view/app_view_browsertest.cc b/chrome/browser/apps/guest_view/app_view_browsertest.cc index f1a2be1..f987b5f 100644 --- a/chrome/browser/apps/guest_view/app_view_browsertest.cc +++ b/chrome/browser/apps/guest_view/app_view_browsertest.cc
@@ -7,6 +7,7 @@ #include "base/memory/raw_ptr.h" #include "base/strings/stringprintf.h" #include "base/test/run_until.h" +#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "chrome/browser/apps/platform_apps/app_browsertest_util.h" #include "chrome/browser/profiles/profile.h" @@ -42,9 +43,19 @@ using guest_view::GuestViewManager; using guest_view::TestGuestViewManagerFactory; -class AppViewTest : public extensions::PlatformAppBrowserTest { +class AppViewTest : public extensions::PlatformAppBrowserTest, + public testing::WithParamInterface<bool> { public: - AppViewTest() = default; + static std::string DescribeParams( + const testing::TestParamInfo<ParamType>& info) { + return info.param ? "MPArch" : "InnerWebContents"; + } + + AppViewTest() { + scoped_feature_list_.InitWithFeatureState(features::kGuestViewMPArch, + GetParam()); + } + AppViewTest(const AppViewTest&) = delete; AppViewTest& operator=(const AppViewTest&) = delete; @@ -127,18 +138,29 @@ TestGuestViewManagerFactory factory_; raw_ptr<guest_view::TestGuestViewManager> test_guest_view_manager_ = nullptr; + base::test::ScopedFeatureList scoped_feature_list_; }; +INSTANTIATE_TEST_SUITE_P(/* no prefix */, + AppViewTest, + testing::Bool(), + AppViewTest::DescribeParams); + // Tests that <appview> is able to navigate to another installed app. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewWithUndefinedDataShouldSucceed) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewWithUndefinedDataShouldSucceed) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testAppViewWithUndefinedDataShouldSucceed", "app_view/shim", skeleton_app->id(), NO_TEST_SERVER); + // Note that the callback of the appview connect method runs after guest + // creation, but not necessarily after attachment. So we now ensure that the + // guest successfully attaches and loads. + EXPECT_TRUE(test_guest_view_manager()->WaitUntilAttachedAndLoaded( + test_guest_view_manager()->WaitForSingleGuestViewCreated())); } // Tests that <appview> correctly processes parameters passed on connect. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewRefusedDataShouldFail) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewRefusedDataShouldFail) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testAppViewRefusedDataShouldFail", "app_view/shim", @@ -146,40 +168,46 @@ } // Tests that <appview> correctly processes parameters passed on connect. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewGoodDataShouldSucceed) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewGoodDataShouldSucceed) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testAppViewGoodDataShouldSucceed", "app_view/shim", skeleton_app->id(), NO_TEST_SERVER); + EXPECT_TRUE(test_guest_view_manager()->WaitUntilAttachedAndLoaded( + test_guest_view_manager()->WaitForSingleGuestViewCreated())); } // Tests that <appview> correctly handles multiple successive connects. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewMultipleConnects) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewMultipleConnects) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testAppViewMultipleConnects", "app_view/shim", skeleton_app->id(), NO_TEST_SERVER); + EXPECT_TRUE(test_guest_view_manager()->WaitUntilAttachedAndLoaded( + test_guest_view_manager()->WaitForSingleGuestViewCreated())); } // Tests that <appview> correctly handles connects that occur after the // completion of a previous connect. -IN_PROC_BROWSER_TEST_F(AppViewTest, +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewConnectFollowingPreviousConnect) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testAppViewConnectFollowingPreviousConnect", "app_view/shim", skeleton_app->id(), NO_TEST_SERVER); + EXPECT_TRUE(test_guest_view_manager()->WaitUntilAttachedAndLoaded( + test_guest_view_manager()->WaitForSingleGuestViewCreated())); } // Tests that <appview> does not embed self (the app which owns appview). -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewEmbedSelfShouldFail) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewEmbedSelfShouldFail) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testAppViewEmbedSelfShouldFail", "app_view/shim", skeleton_app->id(), NO_TEST_SERVER); } -IN_PROC_BROWSER_TEST_F(AppViewTest, TestCloseWithPendingEmbedRequestDeny) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestCloseWithPendingEmbedRequestDeny) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testCloseWithPendingEmbedRequest", "app_view/shim", @@ -188,7 +216,7 @@ ContinueEmbedding(skeleton_app, false); } -IN_PROC_BROWSER_TEST_F(AppViewTest, TestCloseWithPendingEmbedRequestAllow) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestCloseWithPendingEmbedRequestAllow) { const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testCloseWithPendingEmbedRequest", "app_view/shim", @@ -197,7 +225,7 @@ ContinueEmbedding(skeleton_app, true); } -IN_PROC_BROWSER_TEST_F(AppViewTest, KillGuestWithInvalidInstanceID) { +IN_PROC_BROWSER_TEST_P(AppViewTest, KillGuestWithInvalidInstanceID) { const extensions::Extension* bad_app = LoadAndLaunchPlatformApp("app_view/bad_app", "AppViewTest.LAUNCHED"); @@ -233,7 +261,7 @@ #define MAYBE_KillGuestCommunicatingWithWrongAppView \ KillGuestCommunicatingWithWrongAppView #endif -IN_PROC_BROWSER_TEST_F(AppViewTest, +IN_PROC_BROWSER_TEST_P(AppViewTest, MAYBE_KillGuestCommunicatingWithWrongAppView) { const extensions::Extension* host_app = LoadAndLaunchPlatformApp("app_view/host_app", "AppViewTest.LAUNCHED"); @@ -275,7 +303,12 @@ // calls `focus()` on the AppView. The AppView calls `focus()` on the WebView. // This should be enough to focus the content of the WebView without further // user input like needing to click on the WebView. -IN_PROC_BROWSER_TEST_F(AppViewTest, FocusWebViewInAppView) { +IN_PROC_BROWSER_TEST_P(AppViewTest, FocusWebViewInAppView) { + // TODO(crbug.com/40202416): Fix focus under MPArch. + if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) { + GTEST_SKIP() << "MPArch implementation skipped. https://crbug.com/40202416"; + } + const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testFocusWebViewInAppView", "app_view/shim", skeleton_app->id(), @@ -297,7 +330,12 @@ content::ExecJs(webview_guest->GetGuestMainFrame(), "waitForInput();")); } -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewCannotOpenNewWindow) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewCannotOpenNewWindow) { + // TODO(crbug.com/40202416): Fix new window blocking under MPArch. + if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) { + GTEST_SKIP() << "MPArch implementation skipped. https://crbug.com/40202416"; + } + const extensions::Extension* skeleton_app = InstallPlatformApp("app_view/shim/skeleton"); TestHelper("testBasicConnect", "app_view/shim", skeleton_app->id(),
diff --git a/chrome/browser/ash/login/screens/reset_screen.cc b/chrome/browser/ash/login/screens/reset_screen.cc index e38c4f5b..b10186b 100644 --- a/chrome/browser/ash/login/screens/reset_screen.cc +++ b/chrome/browser/ash/login/screens/reset_screen.cc
@@ -122,41 +122,34 @@ void ResetScreen::CheckIfPowerwashAllowed( base::OnceCallback<void(bool, std::optional<tpm_firmware_update::Mode>)> callback) { - if (InstallAttributes::Get()->IsDeviceLocked()) { - if (!InstallAttributes::Get()->IsEnterpriseManaged()) { - // The consumer owned device is always allowed to powerwash. - std::move(callback).Run(/*is_reset_allowed=*/true, std::nullopt); - return; - } - - // Powerwash is allowed by default, if the policy is loaded. Admin can - // explicitly forbid powerwash. If the policy is not loaded yet, we - // consider by default that the device is not allowed to powerwash. - bool is_powerwash_allowed = false; - CrosSettings::Get()->GetBoolean(kDevicePowerwashAllowed, - &is_powerwash_allowed); - if (is_powerwash_allowed) { - std::move(callback).Run(/*is_reset_allowed=*/true, std::nullopt); - return; - } - - // Check if powerwash is only allowed by the admin specifically for the - // purpose of installing a TPM firmware update. - tpm_firmware_update::GetAvailableUpdateModes( - base::BindOnce(&OnUpdateModesAvailable, std::move(callback)), - base::TimeDelta()); + // Always allow powerwash in OOBE, i.e. before device ownership is taken. + if (!InstallAttributes::Get()->IsDeviceLocked()) { + std::move(callback).Run(true, std::nullopt); return; } - // Devices that are still in OOBE may be subject to forced re-enrollment (FRE) - // and thus pending for enterprise management. These should not be allowed to - // powerwash either. Note that taking consumer device ownership has the side - // effect of dropping the FRE requirement if it was previously in effect. - const auto is_reset_allowed = - policy::AutoEnrollmentTypeChecker::GetFRERequirementAccordingToVPD( - system::StatisticsProvider::GetInstance()) != - policy::AutoEnrollmentTypeChecker::FRERequirement::kExplicitlyRequired; - std::move(callback).Run(is_reset_allowed, std::nullopt); + if (!InstallAttributes::Get()->IsEnterpriseManaged()) { + // The consumer owned device is always allowed to powerwash. + std::move(callback).Run(/*is_reset_allowed=*/true, std::nullopt); + return; + } + + // Powerwash is allowed by default, if the policy is loaded. Admin can + // explicitly forbid powerwash. If the policy is not loaded yet, we + // consider by default that the device is not allowed to powerwash. + bool is_powerwash_allowed = false; + CrosSettings::Get()->GetBoolean(kDevicePowerwashAllowed, + &is_powerwash_allowed); + if (is_powerwash_allowed) { + std::move(callback).Run(/*is_reset_allowed=*/true, std::nullopt); + return; + } + + // Check if powerwash is only allowed by the admin specifically for the + // purpose of installing a TPM firmware update. + tpm_firmware_update::GetAvailableUpdateModes( + base::BindOnce(&OnUpdateModesAvailable, std::move(callback)), + base::TimeDelta()); } ResetScreen::ResetScreen(base::WeakPtr<ResetView> view,
diff --git a/chrome/browser/ash/login/screens/reset_screen_unittest.cc b/chrome/browser/ash/login/screens/reset_screen_unittest.cc index ca98c29..6b209185 100644 --- a/chrome/browser/ash/login/screens/reset_screen_unittest.cc +++ b/chrome/browser/ash/login/screens/reset_screen_unittest.cc
@@ -5,7 +5,6 @@ #include "chrome/browser/ash/login/screens/reset_screen.h" #include "ash/constants/ash_switches.h" -#include "base/test/scoped_command_line.h" #include "base/test/test_future.h" #include "chrome/browser/ash/policy/enrollment/auto_enrollment_type_checker.h" #include "chrome/browser/ash/settings/scoped_cros_settings_test_helper.h" @@ -47,10 +46,6 @@ // Configure policy void SetPowerwashAllowedByPolicy(bool allowed); - // Configure VPD values - void SetFreOn(); - void SetFreOff(); - private: ScopedCrosSettingsTestHelper cros_settings_test_helper_; system::ScopedFakeStatisticsProvider fake_statistics_provider_; @@ -79,16 +74,6 @@ cros_settings_test_helper_.Set(kDevicePowerwashAllowed, base::Value(allowed)); } -void ResetScreenTest::SetFreOn() { - fake_statistics_provider_.SetMachineStatistic( - ash::system::kCheckEnrollmentKey, "1"); -} - -void ResetScreenTest::SetFreOff() { - fake_statistics_provider_.SetMachineStatistic( - ash::system::kCheckEnrollmentKey, "0"); -} - TEST_F(ResetScreenTest, CheckPowerwashAllowedConsumerOwned) { SetConsumerOwned(); ExpectPowerwashAllowed(true); @@ -104,18 +89,8 @@ ExpectPowerwashAllowed(false); } -// TODO(b/353731379): Remove when removing legacy state determination code. TEST_F(ResetScreenTest, CheckPowerwashAllowedNotOwned) { - base::test::ScopedCommandLine command_line; - command_line.GetProcessCommandLine()->AppendSwitchASCII( - ash::switches::kEnterpriseEnableUnifiedStateDetermination, - policy::AutoEnrollmentTypeChecker::kUnifiedStateDeterminationNever); SetUnowned(); - - SetFreOn(); - ExpectPowerwashAllowed(false); - - SetFreOff(); ExpectPowerwashAllowed(true); }
diff --git a/chrome/browser/data_sharing/desktop/data_sharing_sdk_delegate_desktop.cc b/chrome/browser/data_sharing/desktop/data_sharing_sdk_delegate_desktop.cc index e2264d637..570bf55a 100644 --- a/chrome/browser/data_sharing/desktop/data_sharing_sdk_delegate_desktop.cc +++ b/chrome/browser/data_sharing/desktop/data_sharing_sdk_delegate_desktop.cc
@@ -39,12 +39,15 @@ web_contents->GetWebUI()->GetController()) ->page_handler(); CHECK(handler); - std::vector<std::string> group_ids; - for (auto group_id : params.group_ids()) { - group_ids.push_back(group_id); + auto mojom_params = data_sharing::mojom::ReadGroupsParams::New(); + for (auto group_param : params.group_params()) { + auto param = data_sharing::mojom::ReadGroupParams::New(); + param->group_id = group_param.group_id(); + param->consistency_token = group_param.consistency_token(); + mojom_params->params.push_back(std::move(param)); } handler->ReadGroups( - group_ids, + std::move(mojom_params), base::BindOnce(&DataSharingSDKDelegateDesktop::OnReadGroups, base::Unretained(delegate), std::move(callback))); },
diff --git a/chrome/browser/download/insecure_download_blocking.cc b/chrome/browser/download/insecure_download_blocking.cc index 38da429..e6179d7 100644 --- a/chrome/browser/download/insecure_download_blocking.cc +++ b/chrome/browser/download/insecure_download_blocking.cc
@@ -225,6 +225,14 @@ // Extract extension. #if BUILDFLAG(IS_WIN) extension_ = base::WideToUTF8(path.FinalExtension()); +#elif BUILDFLAG(IS_ANDROID) + // If the file path is a content URI, extension should come from the file + // name. + if (path.IsContentUri()) { + extension_ = item->GetFileNameToReportUser().FinalExtension(); + } else { + extension_ = path.FinalExtension(); + } #else extension_ = path.FinalExtension(); #endif
diff --git a/chrome/browser/enterprise/identifiers/profile_id_delegate_impl.cc b/chrome/browser/enterprise/identifiers/profile_id_delegate_impl.cc index 45589ad7c..3f5091307 100644 --- a/chrome/browser/enterprise/identifiers/profile_id_delegate_impl.cc +++ b/chrome/browser/enterprise/identifiers/profile_id_delegate_impl.cc
@@ -12,17 +12,17 @@ #include "chrome/browser/profiles/profile_manager.h" #include "components/enterprise/browser/identifiers/identifiers_prefs.h" #include "components/prefs/pref_service.h" -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_ANDROID) + +#if !BUILDFLAG(IS_CHROMEOS) #include "components/enterprise/browser/controller/browser_dm_token_storage.h" +#else +#include "components/policy/core/common/cloud/cloud_policy_util.h" +#endif // !BUILDFLAG(IS_CHROMEOS) + #if BUILDFLAG(IS_WIN) #include "base/strings/utf_string_conversions.h" #include "base/win/wmi.h" #endif // BUILDFLAG(IS_WIN) -#else -#include "components/policy/core/common/cloud/cloud_policy_util.h" -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || - // BUILDFLAG(IS_ANDROID) namespace enterprise { @@ -93,8 +93,7 @@ return ProfileIdDelegateImpl::GetId(); } -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_ANDROID) +#if !BUILDFLAG(IS_CHROMEOS) // Gets the device ID from the BrowserDMTokenStorage. std::string ProfileIdDelegateImpl::GetId() { std::string device_id = @@ -103,11 +102,11 @@ // On Windows, the combination of the client ID and device serial // number are used to form the device ID. #if BUILDFLAG(IS_WIN) - std::string serial_number = - base::WideToUTF8(base::win::WmiComputerSystemInfo::Get().serial_number()); - if (serial_number.empty()) - return std::string(); - device_id += serial_number; + // Serial number could be empty for various reasons. However, we should still + // generate a profile ID with whatever we have. Devices without serial number + // will have higher chance of twin issue but it is still better than no ID at + // all. + device_id += base::WideToUTF8(base::win::WmiComputerSystemInfo::Get().serial_number()); #endif // BUILDFLAG(IS_WIN) return device_id; @@ -117,16 +116,8 @@ std::string ProfileIdDelegateImpl::GetId() { std::string device_id = policy::GetDeviceName(); -// On LACROS, the GetDeviceName method returns the host name when the device -// serial number could not be found. -#if BUILDFLAG(IS_CHROMEOS_LACROS) - if (device_id == policy::GetMachineName()) - return std::string(); -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - return device_id; } -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || - // BUILDFLAG(IS_ANDROID) +#endif // !BUILDFLAG(IS_CHROMEOS) } // namespace enterprise
diff --git a/chrome/browser/enterprise/identifiers/profile_id_service_factory_unittest.cc b/chrome/browser/enterprise/identifiers/profile_id_service_factory_unittest.cc index 8a4ad2c..aeac73a 100644 --- a/chrome/browser/enterprise/identifiers/profile_id_service_factory_unittest.cc +++ b/chrome/browser/enterprise/identifiers/profile_id_service_factory_unittest.cc
@@ -55,29 +55,16 @@ public: ProfileIdServiceFactoryTest() : profile_manager_(TestingBrowserProcess::GetGlobal()) { -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) && \ - !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_CHROMEOS_LACROS) +#if !BUILDFLAG(IS_CHROMEOS) policy::BrowserDMTokenStorage::SetForTesting(&storage_); storage_.SetClientId(kFakeDeviceID); #else auto policy_data = std::make_unique<enterprise_management::PolicyData>(); policy_data->set_machine_name(kFakeDeviceID); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - auto init_params = crosapi::mojom::BrowserInitParams::New(); - init_params->device_properties = crosapi::mojom::DeviceProperties::New(); - init_params->device_properties->serial_number = kFakeDeviceID; - chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params)); -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) store_.set_policy_data_for_testing(std::move(policy_data)); -#if BUILDFLAG(IS_CHROMEOS_ASH) fake_statistics_provider_.SetMachineStatistic(ash::system::kSerialNumberKey, kFakeDeviceID); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || - // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) && - // !BUILDFLAG(IS_CHROMEOS_ASH) && - // !BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // !BUILDFLAG(IS_CHROMEOS) EXPECT_TRUE(profile_manager_.SetUp()); profile_ = profile_manager_.CreateTestingProfile("test-user");
diff --git a/chrome/browser/feedback/system_logs/log_sources/family_info_log_source.cc b/chrome/browser/feedback/system_logs/log_sources/family_info_log_source.cc index fb9a808..7d55f9ac 100644 --- a/chrome/browser/feedback/system_logs/log_sources/family_info_log_source.cc +++ b/chrome/browser/feedback/system_logs/log_sources/family_info_log_source.cc
@@ -39,9 +39,7 @@ return; } - if (base::FeatureList::IsEnabled( - supervised_user::kUseFamilyMemberRolePrefsForFeedback) && - !user_prefs_->GetString(prefs::kFamilyLinkUserMemberRole).empty()) { + if (!user_prefs_->GetString(prefs::kFamilyLinkUserMemberRole).empty()) { auto logs_response = std::make_unique<SystemLogsResponse>(); const std::string& family_link_role = user_prefs_->GetString(prefs::kFamilyLinkUserMemberRole);
diff --git a/chrome/browser/feedback/system_logs/log_sources/family_info_log_source_unittest.cc b/chrome/browser/feedback/system_logs/log_sources/family_info_log_source_unittest.cc index 7f40aa0..e939eb72 100644 --- a/chrome/browser/feedback/system_logs/log_sources/family_info_log_source_unittest.cc +++ b/chrome/browser/feedback/system_logs/log_sources/family_info_log_source_unittest.cc
@@ -112,10 +112,6 @@ TEST_F(FamilyInfoLogSourceTest, FetchMemberSignedInBeforeDeadlineWithFamilyMemberPref) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - supervised_user::kUseFamilyMemberRolePrefsForFeedback); - AccountInfo primary_account = identity_test_env_.MakePrimaryAccountAvailable( "user_child@gmail.com", signin::ConsentLevel::kSignin);
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc index 814027d..a153ac89 100644 --- a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc
@@ -116,6 +116,7 @@ bool IsExtensionUrl(const GURL& url) override; bool IsNonTabWebUI(const GURL& url) override; bool ShouldObserveScheme(std::string_view scheme) override; + bool IsIncognito(content::WebContents* web_contents) override; page_load_metrics::PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext( content::BrowserContext* browser_context) override; @@ -193,7 +194,8 @@ tracker->GetWebContents(), HeavyAdServiceFactory::GetForBrowserContext( tracker->GetWebContents()->GetBrowserContext()), - base::BindRepeating(&GetApplicationLocale)); + base::BindRepeating(&GetApplicationLocale), + IsIncognito(tracker->GetWebContents())); if (ads_observer) tracker->AddObserver(std::move(ads_observer)); @@ -283,6 +285,14 @@ return scheme == chrome::kIsolatedAppScheme; } +bool PageLoadMetricsEmbedder::IsIncognito(content::WebContents* web_contents) { + if (Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext())) { + return profile->IsIncognitoProfile(); + } + return false; +} + page_load_metrics::PageLoadMetricsMemoryTracker* PageLoadMetricsEmbedder::GetMemoryTrackerForBrowserContext( content::BrowserContext* browser_context) {
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc index 02629e99..3537e020 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -1020,7 +1020,7 @@ return profile_metrics::GetBrowserProfileType(browser_context); } -const password_manager::PasswordManager* +const password_manager::PasswordManagerInterface* ChromePasswordManagerClient::GetPasswordManager() const { return &password_manager_; }
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h index a027dd6..7013b999 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.h +++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -229,7 +229,8 @@ void PromptUserToEnableAutosignin() override; bool IsOffTheRecord() const override; profile_metrics::BrowserProfileType GetProfileType() const override; - const password_manager::PasswordManager* GetPasswordManager() const override; + const password_manager::PasswordManagerInterface* GetPasswordManager() + const override; using password_manager::PasswordManagerClient::GetPasswordFeatureManager; const password_manager::PasswordFeatureManager* GetPasswordFeatureManager() const override;
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc index 021b494..629b9ce1 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
@@ -628,9 +628,10 @@ &Observer::OnFieldTypesDetermined, form.global_id(), Observer::FieldTypeSource::kAutofillServer); - EXPECT_THAT( - GetClient()->GetPasswordManager()->GetServerPredictionsForTesting(), - UnorderedElementsAre(Key(CalculateFormSignature(form)))); + EXPECT_THAT(static_cast<const password_manager::PasswordManager*>( + GetClient()->GetPasswordManager()) + ->GetServerPredictionsForTesting(), + UnorderedElementsAre(Key(CalculateFormSignature(form)))); } TEST_F(ChromePasswordManagerClientTest, @@ -664,9 +665,10 @@ &Observer::OnFieldTypesDetermined, form.global_id(), Observer::FieldTypeSource::kHeuristicsOrAutocomplete); - auto received_predictions = GetClient() - ->GetPasswordManager() - ->GetClassifierModelPredictionsForTesting(); + auto received_predictions = + static_cast<const password_manager::PasswordManager*>( + GetClient()->GetPasswordManager()) + ->GetClassifierModelPredictionsForTesting(); // Check that predictions are available for the form. auto form_key = std::make_pair(password_driver, form.renderer_id()); ASSERT_THAT(received_predictions, UnorderedElementsAre(Key(form_key)));
diff --git a/chrome/browser/password_manager/password_manager_interactive_uitest.cc b/chrome/browser/password_manager/password_manager_interactive_uitest.cc index e04e14a8..8cb40eba 100644 --- a/chrome/browser/password_manager/password_manager_interactive_uitest.cc +++ b/chrome/browser/password_manager/password_manager_interactive_uitest.cc
@@ -693,7 +693,7 @@ FillElementWithValue("password_field", "new", "pwnew"); // Wait until the form change is picked up by the password manager. - const PasswordManager* password_manager = + const PasswordManagerInterface* password_manager = ChromePasswordManagerClient::FromWebContents(WebContents()) ->GetPasswordManager(); EXPECT_TRUE(base::test::RunUntil([&]() {
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.cc b/chrome/browser/profiles/profile_avatar_icon_util.cc index 938db05..e58b019 100644 --- a/chrome/browser/profiles/profile_avatar_icon_util.cc +++ b/chrome/browser/profiles/profile_avatar_icon_util.cc
@@ -557,8 +557,10 @@ // Get a higher res than 16px so it looks good after cropping to a circle. gfx::Image icon = entry->GetAvatarIcon( kAvatarIconSize, /*download_high_res=*/false, icon_params); - return profiles::GetSizedAvatarIcon( - icon, kMenuAvatarIconSize, kMenuAvatarIconSize, profiles::SHAPE_CIRCLE); + constexpr int kMenuAvatarIconSizeForNSMenu = 20; + return profiles::GetSizedAvatarIcon(icon, kMenuAvatarIconSizeForNSMenu, + kMenuAvatarIconSizeForNSMenu, + profiles::SHAPE_CIRCLE); } #endif
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.h b/chrome/browser/profiles/profile_avatar_icon_util.h index e8572ea..f79c7cd 100644 --- a/chrome/browser/profiles/profile_avatar_icon_util.h +++ b/chrome/browser/profiles/profile_avatar_icon_util.h
@@ -55,9 +55,6 @@ const int kProfileAvatarBadgeSizeWin = kShortcutIconSizeWin / 2; #endif // BUILDFLAG(IS_WIN) -// Size of the small identity images for list of profiles to switch to. -constexpr int kMenuAvatarIconSize = 20; - // Avatar access. extern const base::FilePath::CharType kGAIAPictureFileName[]; extern const base::FilePath::CharType kHighResAvatarFolderName[];
diff --git a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_iw.xtb b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_iw.xtb index b5035a4..378414c 100644 --- a/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_iw.xtb +++ b/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_iw.xtb
@@ -39,7 +39,7 @@ <translation id="6846298663435243399">הטעינה מתבצעת...</translation> <translation id="6889157801232138307">הנגן 'האזנה לדף הזה'</translation> <translation id="7051308646573997571">אלמוג</translation> -<translation id="7112750136794557642">אפשר להקיש כדי להגדיל את הנגן ולראות אפשרויות נוספות.</translation> +<translation id="7112750136794557642">אפשר ללחוץ כדי להגדיל את הנגן ולראות אפשרויות נוספות.</translation> <translation id="7221920857098237570">עדין</translation> <translation id="7237590978482584900">קליל</translation> <translation id="7282547042039404307">חלקה</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb index c05029cc..24bb26a 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
@@ -58,10 +58,10 @@ <translation id="1264956950255940376">מצמצמים את העין השמאלית</translation> <translation id="1268366246392928616">אין ביטוי מתמטי קודם</translation> <translation id="1275718070701477396">נבחר</translation> -<translation id="1284576163386164372">אפשר להציג את המדריכים בכל שלב. פשוט מקישים בעזרת ארבע אצבעות כדי לפתוח את התפריטים. לאחר מכן, מפעילים את המדריך שבקטע ChromeVox.</translation> +<translation id="1284576163386164372">אפשר להציג את המדריכים בכל שלב. פשוט לוחצים בעזרת ארבע אצבעות כדי לפתוח את התפריטים. לאחר מכן, מפעילים את המדריך שבקטע ChromeVox.</translation> <translation id="1291286136605998134">לחצן החלפת מצב</translation> <translation id="1299774449519412690">כחול שמיים בהיר</translation> -<translation id="1303806948938513162">מקישים עם 4 אצבעות כדי לעבור אל התפריטים של ChromeVox</translation> +<translation id="1303806948938513162">לוחצים עם 4 אצבעות כדי לעבור אל התפריטים של ChromeVox</translation> <translation id="1304162325618937178">לחיצה על מקש הרווח</translation> <translation id="1313373992684326101">חזרה לקטע הקודם. הדוגמאות כוללות את מגש הסטטוס ואת מרכז האפליקציות.</translation> <translation id="1315077335264761176">הדרכה להפעלה באמצעות מגע</translation> @@ -145,7 +145,7 @@ <translation id="1829244130665387512">חיפוש בדף</translation> <translation id="1834891354138622109">עמודה</translation> <translation id="1846771122725914429">צג ברייל תואם Bluetooth</translation> -<translation id="1852018405765032699">כדי לפתוח ולסגור את התפריטים של ChromeVox, מקישים על המסך בעזרת ארבע אצבעות. התפריטים האלה כוללים מידע שימושי לגבי פקודות ומקשי קיצור. אחרי שפותחים את התפריטים, אפשר להחליק בעזרת אצבע אחת כדי לעבור בין פריטים וללחוץ פעמיים כדי להפעיל פריטים. כדי להמשיך יש להקיש על המסך בעזרת ארבע אצבעות.</translation> +<translation id="1852018405765032699">כדי לפתוח ולסגור את התפריטים של ChromeVox, לוחצים על המסך בעזרת ארבע אצבעות. התפריטים האלה כוללים מידע שימושי לגבי פקודות ומקשי קיצור. אחרי שפותחים את התפריטים, אפשר להחליק בעזרת אצבע אחת כדי לעבור בין פריטים וללחוץ פעמיים כדי להפעיל פריטים. כדי להמשיך יש ללחוץ על המסך בעזרת ארבע אצבעות.</translation> <translation id="1864430479908918647">יש להקיש על מקש החיפוש ועל מקש הרווח</translation> <translation id="1865601187525349519">סוף הטקסט</translation> <translation id="1876229593313240038">doc</translation> @@ -238,7 +238,7 @@ <translation id="2523609930580546572">מדריך של ChromeVox</translation> <translation id="2525706221823668172">מקשי קיצור ב-Chromebook</translation> <translation id="2553108862507765288">grammatical mistake</translation> -<translation id="2556326187583116255">מקישים בעזרת שתי אצבעות כדי להפסיק את הדיבור המופעל</translation> +<translation id="2556326187583116255">לוחצים בעזרת שתי אצבעות כדי להפסיק את הדיבור המופעל</translation> <translation id="2573256689920773241">ניווט בסיסי</translation> <translation id="257674075312929031">קבוצה</translation> <translation id="2577127557293415225">עוצמים את שתי העיניים לרגע</translation> @@ -577,7 +577,7 @@ <translation id="4617384941327705512">התכונה 'הפעלה חכמה של ההקשה ביד אחת' מושבתת</translation> <translation id="4623097797855662355">קולופון</translation> <translation id="4624970070706497034">אין יותר ב-TalkBack אפשרויות להתאמה אישית במכשירי Chromebook. עדיין אפשר להשתמש ב-TalkBack, אבל רק עם מקשי קיצור המוגדרים כברירת מחדל. כדי לראות את מקשי הקיצור הזמינים, מקישים על מקש החיפוש + A ואז על K. אם רוצים להמשיך להשתמש ב-TalkBack, מקישים שוב על הפקודה.</translation> -<translation id="4649220074413114917">מקישים על המסך בעזרת שתי אצבעות כדי להפסיק את הדיבור המופעל. אפשר לעשות זאת כשלא רוצים ש-ChromeVox יקריא טקסט. כדי להמשיך יש להקיש על המסך בעזרת שתי אצבעות.</translation> +<translation id="4649220074413114917">לוחצים על המסך בעזרת שתי אצבעות כדי להפסיק את הדיבור המופעל. אפשר לעשות זאת כשלא רוצים ש-ChromeVox יקריא טקסט. כדי להמשיך יש ללחוץ על המסך בעזרת שתי אצבעות.</translation> <translation id="4661075872484491155">tree</translation> <translation id="4668929960204016307">,</translation> <translation id="4677535310137735442">מעבר לעמודה הבאה</translation> @@ -602,7 +602,7 @@ <translation id="4826415162591436065">ניווט קדימה</translation> <translation id="4827410568042294688">בחירה בוטלה</translation> <translation id="4835598628985424375">מצמידים ומכווצים את השפתיים</translation> -<translation id="4838490795649708173">הקשה עם ארבע אצבעות</translation> +<translation id="4838490795649708173">לחיצה עם ארבע אצבעות</translation> <translation id="4839925464551908214">מעבר לשורה הקודמת</translation> <translation id="4841614409681890122">ורוד עמוק</translation> <translation id="4844625982113518938">יש להקיש על מקש כדי לשמוע את שמו. הקשה על Ctrl+W תסגור את מצב הלמידה.</translation> @@ -659,7 +659,7 @@ <translation id="5142101052131610456">כל השיעורים</translation> <translation id="514387318601895731">מביטים למטה</translation> <translation id="5158275234811857234">שער</translation> -<translation id="516076699907426116">צריך להשתמש בתכונה 'גילוי באמצעות מגע' כדי למצוא את הלחצן לפתיחת השיעור הבא. לאחר מכן, יש ללחוץ פעמיים כדי להמשיך.</translation> +<translation id="516076699907426116">צריך להשתמש בתכונה 'גילוי באמצעות מגע' כדי למצוא את הכפתור לפתיחת השיעור הבא. לאחר מכן, יש ללחוץ פעמיים כדי להמשיך.</translation> <translation id="5170206230005240598">הכתוביות בכתב ברייל מופעלות</translation> <translation id="5183440668879371625">השורה הקודמת בברייל</translation> <translation id="5189244881767082992">שורה</translation> @@ -755,7 +755,7 @@ <translation id="5761219715606611783">כל הכבוד! למדת את המידע הבסיסי לשימוש ב-ChromeVox באמצעות מגע. אפשר לעבור שוב על המידע במדריך, או לצאת ממנו על ידי לחיצה על הלחצנים שלמטה.</translation> <translation id="5776001898637896684">תוסף המרת טקסט לדיבור (TTS) של Google Enhanced Network</translation> <translation id="5783252477644995371">התכונה 'שליטה באמצעות תנועות הפנים' מאפשרת לשלוט בסמן באמצעות הבעות פנים, ולבצע פעולות כמו לחיצה שמאלית בעזרת תנועות פנים, כמו חיוך.</translation> -<translation id="5805940204952508776">הקשה עם שתי אצבעות</translation> +<translation id="5805940204952508776">לחיצה עם שתי אצבעות</translation> <translation id="5807774529265708172">הצגה או הסתרה של המקלדת שמופיעה במסך</translation> <translation id="5819072574982403430">פריט עץ</translation> <translation id="5822819874379903994">טורקיז כהה</translation> @@ -824,7 +824,7 @@ <translation id="6236061028292614533">הכותרת הבאה</translation> <translation id="6254901459154107917">האזור הבא בטקסט הניתן לעריכה</translation> <translation id="6259464875943891919">יצאת מ-<ph name="TYPE" />.</translation> -<translation id="6280088282605782512">הקשה כפולה</translation> +<translation id="6280088282605782512">לחיצה כפולה</translation> <translation id="6282062888058716985">nav</translation> <translation id="6295699829709583154">מקשים חיוניים: חיפוש</translation> <translation id="6305702903308659374">הפעלה בעוצמת שמע רגילה גם אם מכשיר ה-ChromeVox מקריא</translation> @@ -886,7 +886,7 @@ <translation id="6759710362319508545">מקורות מידע</translation> <translation id="67862343314499040">סגול סיגלית</translation> <translation id="6786800275320335305">סעיף</translation> -<translation id="6790781785997195160">אפשר להתאמן קצת על התנועות ולאחר מכן למצוא את הלחצן לשיעור הבא. לאחר מכן, יש ללחוץ פעמיים כדי להמשיך.</translation> +<translation id="6790781785997195160">אפשר להתאמן קצת על התנועות ולאחר מכן למצוא את הכפתור לשיעור הבא. לאחר מכן, יש ללחוץ פעמיים כדי להמשיך.</translation> <translation id="6793101435925451627">lstbx</translation> <translation id="6815255864998354418">לימון שיפון</translation> <translation id="6816066673340002913">מטה-זהב חיוור</translation> @@ -913,7 +913,7 @@ <translation id="6994042831499278539">הפניה למילון מונחים</translation> <translation id="6996566555547746822">התיבה המשולבת הבאה</translation> <translation id="6997224546856374593">בעת הקראת אותיות רישיות:</translation> -<translation id="6999752561504308105">ברוך בואך למדריך ChromeVox. כדי לצאת מהמדריך בכל שלב, יש להחליק משמאל לימין בעזרת שתי אצבעות. כדי להפעיל או לכבות את ChromeVox בכל שלב, יש ללחוץ על שני הלחצנים של עוצמת הקול למשך חמש שניות. כשמוכנים, יש ללחוץ פעמיים על המסך בעזרת אצבע אחת כדי לעבור לשיעור הבא.</translation> +<translation id="6999752561504308105">ברוך בואך למדריך ChromeVox. כדי לצאת מהמדריך בכל שלב, יש להחליק משמאל לימין בעזרת שתי אצבעות. כדי להפעיל או לכבות את ChromeVox בכל שלב, יש ללחוץ על שני הכפתורים של עוצמת הקול למשך חמש שניות. כשמוכנים, יש ללחוץ פעמיים על המסך בעזרת אצבע אחת כדי לעבור לשיעור הבא.</translation> <translation id="700202842116345659">ערך ביבליוגרפי</translation> <translation id="7005146664810010831">לא נמצאה כתובת אתר</translation> <translation id="7026338066939101231">הפחתה</translation> @@ -925,7 +925,7 @@ <translation id="7051308646573997571">אלמוג</translation> <translation id="7062635574500127092">כחול-ירקרק</translation> <translation id="7086377898680121060">הגברת הבהירות</translation> -<translation id="7088743565397416204">מקישים פעמיים כדי להפעיל את הפריט שמתמקדים בו</translation> +<translation id="7088743565397416204">לוחצים פעמיים כדי להפעיל את הפריט שמתמקדים בו</translation> <translation id="7088960765736518739">גישה באמצעות מתג</translation> <translation id="7090715360595433170">השימוש בתכונה הזו יכול להיות יעיל יותר מהחלקה שמאלה או ימינה באמצעות אצבע אחת.</translation> <translation id="7091296112653361280">לבן נבאחו</translation>
diff --git a/chrome/browser/resources/data_sharing/data_sharing_api.ts b/chrome/browser/resources/data_sharing/data_sharing_api.ts index 07361ce..9346077 100644 --- a/chrome/browser/resources/data_sharing/data_sharing_api.ts +++ b/chrome/browser/resources/data_sharing/data_sharing_api.ts
@@ -15,7 +15,8 @@ import type {BrowserProxy} from './browser_proxy.js'; import {BrowserProxyImpl} from './browser_proxy.js'; -import type {DataSharingSdk} from './data_sharing_sdk_types.js'; +import type {ReadGroupsParams as MojomReadGroupsParams} from './data_sharing.mojom-webui.js'; +import type {DataSharingSdk, ReadGroupParams} from './data_sharing_sdk_types.js'; import type {GroupData} from './group_data.mojom-webui.js'; import {toMojomGroupData} from './mojom_conversion_utils.js'; @@ -37,17 +38,23 @@ }, ); -browserProxy.callbackRouter.readGroups.addListener((groupIds: string[]) => { - return new Promise((resolve) => { - dataSharingSdk.readGroups({groupIds}) - .then( - ({result, status}) => { - const groupData: GroupData[] = - result?.groupData.map(toMojomGroupData) ?? []; - resolve({result: {groups: groupData, statusCode: status}}); - }); - }); -}); +browserProxy.callbackRouter.readGroups.addListener( + (mojomParams: MojomReadGroupsParams) => { + const params: ReadGroupParams[] = []; + for (const mojomParam of mojomParams.params) { + params.push({ + groupId: mojomParam.groupId, + consistencyToken: mojomParam.consistencyToken, + }); + } + return new Promise((resolve) => { + dataSharingSdk.readGroups({params}).then(({result, status}) => { + const groupData: GroupData[] = + result?.groupData.map(toMojomGroupData) ?? []; + resolve({result: {groups: groupData, statusCode: status}}); + }); + }); + }); browserProxy.callbackRouter.leaveGroup.addListener((groupId: string) => { return new Promise((resolve) => {
diff --git a/chrome/browser/resources/data_sharing/data_sharing_sdk_types.ts b/chrome/browser/resources/data_sharing/data_sharing_sdk_types.ts index 54e0616..1b0d992 100644 --- a/chrome/browser/resources/data_sharing/data_sharing_sdk_types.ts +++ b/chrome/browser/resources/data_sharing/data_sharing_sdk_types.ts
@@ -154,6 +154,7 @@ members: DataSharingSdkGroupMember[]; displayName?: string; accessToken?: string; + consistencyToken?: string; } export declare type DataSharingMemberRole = | 'unknown' | 'member' | 'owner' | 'invitee'; @@ -177,8 +178,12 @@ export declare interface CreateGroupResult { groupData: DataSharingSdkGroupData; } +export declare interface ReadGroupParams { + groupId: string; + consistencyToken?: string; +} export declare interface ReadGroupsParams { - groupIds: string[]; + params: ReadGroupParams[]; } export declare interface ReadGroupsResult { groupData: DataSharingSdkGroupData[];
diff --git a/chrome/browser/resources/data_sharing/dummy_data_sharing_sdk.ts b/chrome/browser/resources/data_sharing/dummy_data_sharing_sdk.ts index 22e841e..903983d 100644 --- a/chrome/browser/resources/data_sharing/dummy_data_sharing_sdk.ts +++ b/chrome/browser/resources/data_sharing/dummy_data_sharing_sdk.ts
@@ -35,21 +35,20 @@ resolve({ status: Code.OK, result: { - groupData: - _params.groupIds!.map(groupId => ({ - groupId, - displayName: 'GROUP_NAME', - members: [ - { - focusObfuscatedGaiaId: 'GAIA_ID', - displayName: 'MEMBER_NAME', - email: 'test@gmail.com', - role: 'member', - avatarUrl: 'http://example.com', - givenName: 'MEMBER_NAME', - }, - ], - })), + groupData: _params.params!.map(param => ({ + groupId: param.groupId, + displayName: 'GROUP_NAME', + members: [ + { + focusObfuscatedGaiaId: 'GAIA_ID', + displayName: 'MEMBER_NAME', + email: 'test@gmail.com', + role: 'member', + avatarUrl: 'http://example.com', + givenName: 'MEMBER_NAME', + }, + ], + })), }, }); });
diff --git a/chrome/browser/resources/settings/basic_page/basic_page.html b/chrome/browser/resources/settings/basic_page/basic_page.html index d79fef3c..f78b7ae 100644 --- a/chrome/browser/resources/settings/basic_page/basic_page.html +++ b/chrome/browser/resources/settings/basic_page/basic_page.html
@@ -64,8 +64,7 @@ <!-- TODO(crbug.com/40267370): Add a test to basic_page_test.ts to check that settings-safety-hub-entry-point is not visible in the guest mode. --> - <template is="dom-if" - if="[[showSafetyHubEntryPointPage_(pageVisibility.safetyHub)]]" + <template is="dom-if" if="[[showPage_(pageVisibility.safetyHub)]]" restamp> <settings-section page-title="$i18n{safetyHub}" section="safetyHubEntryPoint" nest-under-section="privacy"
diff --git a/chrome/browser/resources/settings/basic_page/basic_page.ts b/chrome/browser/resources/settings/basic_page/basic_page.ts index 14dd4f5..cfa44fe 100644 --- a/chrome/browser/resources/settings/basic_page/basic_page.ts +++ b/chrome/browser/resources/settings/basic_page/basic_page.ts
@@ -358,11 +358,6 @@ return this.showPage_(visibility); } - private showSafetyHubEntryPointPage_(visibility?: boolean): boolean { - return loadTimeData.getBoolean('enableSafetyHub') && - this.showPage_(visibility); - } - private showAiInfoCard_(visibility?: boolean): boolean { return loadTimeData.getBoolean('enableAiSettingsPageRefresh') && this.showExperimentalAdvancedPage_(visibility);
diff --git a/chrome/browser/resources/settings/page_visibility.ts b/chrome/browser/resources/settings/page_visibility.ts index e68a2a2..1cec714 100644 --- a/chrome/browser/resources/settings/page_visibility.ts +++ b/chrome/browser/resources/settings/page_visibility.ts
@@ -36,6 +36,8 @@ sidePanel: boolean; } +// TODO(crbug.com/362659905): Merge pageVisibility.safetyHub with +// PrivacyPageVisibility when the crash is fixed. export interface PrivacyPageVisibility { networkPrediction: boolean; searchPrediction: boolean;
diff --git a/chrome/browser/resources/settings/people_page/sync_account_control.html b/chrome/browser/resources/settings/people_page/sync_account_control.html index ef979f9a..1607f81 100644 --- a/chrome/browser/resources/settings/people_page/sync_account_control.html +++ b/chrome/browser/resources/settings/people_page/sync_account_control.html
@@ -250,7 +250,9 @@ hidden="[[!shouldShowSigninPausedButtons_( syncStatus.signinPaused)]]"> <cr-button class="cr-button-gap" on-click="onSignoutClick_"> - $i18n{peopleSignOut} + [[getSigninPausedLabel_( + '$i18n{peopleSignOut}', + '$i18nPolymer{pendingSecondaryButton}')]] </cr-button> <cr-button class="action-button cr-button-gap" on-click="onSigninClick_">
diff --git a/chrome/browser/resources/settings/people_page/sync_account_control.ts b/chrome/browser/resources/settings/people_page/sync_account_control.ts index 41fc4a3..c8bd58c 100644 --- a/chrome/browser/resources/settings/people_page/sync_account_control.ts +++ b/chrome/browser/resources/settings/people_page/sync_account_control.ts
@@ -508,6 +508,15 @@ return turnOffSync; } + private getSigninPausedLabel_(peopleSignOut: string, removeAccount: string): + string { + if (loadTimeData.getBoolean('isImprovedSettingsUIOnDesktopEnabled')) { + return removeAccount; + } + + return peopleSignOut; + } + private shouldShowErrorActionButton_(): boolean { if (this.embeddedInSubpage && this.syncStatus.statusAction === StatusAction.ENTER_PASSPHRASE) { @@ -634,6 +643,11 @@ private onTurnOffButtonClick_() { /* This will route to people_page's disconnect dialog. */ + if (loadTimeData.getBoolean('isImprovedSettingsUIOnDesktopEnabled') && + !this.isSyncing_() && + this.syncStatus.statusAction !== StatusAction.NO_ACTION) { + this.onSignoutClick_(); + } const router = Router.getInstance(); router.navigateTo(router.getRoutes().SIGN_OUT); }
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html index b257737..02a5c0f 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -167,7 +167,7 @@ </settings-subpage> </template> - <template is="dom-if" if="[[enableSafetyHub_]]"> + <template is="dom-if" if="[[shouldShowSafetyHub_]]"> <template is="dom-if" route-path="/safetyCheck"> <!-- TODO(crbug.com/40267370): Make the page searchable.--> <settings-subpage id="safetyHub" page-title="$i18n{safetyHub}" @@ -687,7 +687,7 @@ search-term="{{searchFilter_}}"> <div id="notificationRadioGroup" class="radio-group"> <template is="dom-if" if="[[showNotificationPermissionsReview_]]"> - <template is="dom-if" if="[[enableSafetyHub_]]"> + <template is="dom-if" if="[[shouldShowSafetyHub_]]"> <h2>$i18n{safetyHub}</h2> <settings-safety-hub-module id="safetyHubEntryPoint" header="[[notificationPermissionsReviewHeader_]]"
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/chrome/browser/resources/settings/privacy_page/privacy_page.ts index e09c5bd..a092200 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.ts +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.ts
@@ -313,11 +313,10 @@ value: ChooserType, }, - enableSafetyHub_: { + shouldShowSafetyHub_: { type: Boolean, value() { - return loadTimeData.getBoolean('enableSafetyHub') && - !loadTimeData.getBoolean('isGuest'); + return !loadTimeData.getBoolean('isGuest'); }, }, @@ -375,7 +374,7 @@ private capturedSurfaceControlEnabled_: boolean; private enableAiSettingsPageRefresh_: boolean; private enableComposeProactiveNudge_: boolean; - private enableSafetyHub_: boolean; + private shouldShowSafetyHub_: boolean; private enableWebAppInstallation_: boolean; private focusConfig_: FocusConfig; private searchFilter_: string;
diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts index ce2f533..366e5dc 100644 --- a/chrome/browser/resources/settings/route.ts +++ b/chrome/browser/resources/settings/route.ts
@@ -18,7 +18,9 @@ r.CLEAR_BROWSER_DATA = r.PRIVACY.createChild('/clearBrowserData'); r.CLEAR_BROWSER_DATA.isNavigableDialog = true; - if (loadTimeData.getBoolean('enableSafetyHub')) { + const visibility = pageVisibility || {}; + + if (visibility.safetyHub !== false) { r.SAFETY_HUB = r.PRIVACY.createChild('/safetyCheck'); }
diff --git a/chrome/browser/resources/settings/safety_hub/extensions_module.html b/chrome/browser/resources/settings/safety_hub/extensions_module.html index b1408ab..afa35df 100644 --- a/chrome/browser/resources/settings/safety_hub/extensions_module.html +++ b/chrome/browser/resources/settings/safety_hub/extensions_module.html
@@ -18,7 +18,7 @@ header-icon="settings20:my_extensions"> <div slot="button-container"> <cr-button id="reviewButton" on-click="onButtonClick_"> - $i18n{safetyCheckReview} + $i18n{safetyHubReview} <cr-icon icon="cr:open-in-new" class="icon-blue" slot="suffix-icon"> </cr-icon> </cr-button>
diff --git a/chrome/browser/resources/settings/safety_hub/extensions_module.ts b/chrome/browser/resources/settings/safety_hub/extensions_module.ts index 3310c67..d9edfc4 100644 --- a/chrome/browser/resources/settings/safety_hub/extensions_module.ts +++ b/chrome/browser/resources/settings/safety_hub/extensions_module.ts
@@ -65,7 +65,7 @@ private async onSafetyCheckExtensionsChanged_(numExtensions: number) { this.headerString_ = await PluralStringProxyImpl.getInstance().getPluralString( - 'safetyCheckExtensionsReviewLabel', numExtensions); + 'safetyHubExtensionsReviewLabel', numExtensions); } private onButtonClick_() {
diff --git a/chrome/browser/resources/settings/safety_hub/notification_permissions_module.html b/chrome/browser/resources/settings/safety_hub/notification_permissions_module.html index 544333a..9cef04a 100644 --- a/chrome/browser/resources/settings/safety_hub/notification_permissions_module.html +++ b/chrome/browser/resources/settings/safety_hub/notification_permissions_module.html
@@ -11,16 +11,16 @@ header="[[headerString_]]" subheader="[[subheaderString_]]" header-icon="[[headerIconString_]]" - button-aria-label-id="safetyCheckNotificationPermissionReviewDontAllowAriaLabel" + button-aria-label-id="safetyHubNotificationPermissionReviewDontAllowAriaLabel" button-icon="cr20:block" - button-tooltip-text="$i18n{safetyCheckNotificationPermissionReviewDontAllowLabel}" + button-tooltip-text="$i18n{safetyHubNotificationPermissionReviewDontAllowLabel}" more-action-visible - more-button-aria-label-id="safetyCheckNotificationPermissionReviewMoreActionsAriaLabel" + more-button-aria-label-id="safetyHubNotificationPermissionReviewMoreActionsAriaLabel" sites="[[sites_]]"> <div slot="button-container"> <cr-button id="blockAllButton" on-click="onBlockAllClick_" hidden$="[[shouldShowCompletionInfo_]]"> - $i18n{safetyCheckNotificationPermissionReviewBlockAllLabel} + $i18n{safetyHubNotificationPermissionReviewBlockAllLabel} </cr-button> <cr-icon-button id="moreActionButton" class="icon-more-vert" on-click="onHeaderMoreActionClick_" @@ -29,18 +29,18 @@ <cr-icon-button id="bulkUndoButton" iron-icon="settings20:undo" on-click="onUndoClick_" hidden$="[[!shouldShowCompletionInfo_]]" on-focus="showUndoTooltip_" on-mouseenter="showUndoTooltip_" - aria-label$="$i18n{safetyCheckNotificationPermissionReviewUndo}">> + aria-label$="$i18n{safetyHubNotificationPermissionReviewUndo}">> </cr-icon-button> </div> </settings-safety-hub-module> <cr-action-menu id="actionMenu" role-description="$i18n{menu}"> <button class="dropdown-item" id="ignore" on-click="onIgnoreClick_" aria-label$="[[getIgnoreAriaLabelForOrigins(lastOrigins_)]]"> - $i18n{safetyCheckNotificationPermissionReviewIgnoreLabel} + $i18n{safetyHubNotificationPermissionReviewIgnoreLabel} </button> <button class="dropdown-item" id="reset" on-click="onResetClick_" aria-label$="[[getResetAriaLabelForOrigins(lastOrigins_)]]"> - $i18n{safetyCheckNotificationPermissionReviewResetLabel} + $i18n{safetyHubNotificationPermissionReviewResetLabel} </button> </cr-action-menu> <cr-action-menu id="headerActionMenu" role-description="$i18n{menu}"> @@ -52,10 +52,10 @@ <cr-toast id="undoToast" duration="5000"> <div id="undoNotification">[[toastText_]]</div> <cr-button id="toastUndoButton" on-click="onUndoClick_" - aria-label="$i18n{safetyCheckNotificationPermissionReviewUndo}"> - $i18n{safetyCheckNotificationPermissionReviewUndo} + aria-label="$i18n{safetyHubNotificationPermissionReviewUndo}"> + $i18n{safetyHubNotificationPermissionReviewUndo} </cr-button> </cr-toast> <cr-tooltip fit-to-visible-bounds manual-mode position="top" offset="3"> - $i18n{safetyCheckNotificationPermissionReviewUndo} + $i18n{safetyHubNotificationPermissionReviewUndo} </cr-tooltip>
diff --git a/chrome/browser/resources/settings/safety_hub/notification_permissions_module.ts b/chrome/browser/resources/settings/safety_hub/notification_permissions_module.ts index ca31fb0..cf5d923 100644 --- a/chrome/browser/resources/settings/safety_hub/notification_permissions_module.ts +++ b/chrome/browser/resources/settings/safety_hub/notification_permissions_module.ts
@@ -353,23 +353,23 @@ switch (this.lastUserAction_) { case Actions.BLOCK: this.toastText_ = this.i18n( - 'safetyCheckNotificationPermissionReviewBlockedToastLabel', + 'safetyHubNotificationPermissionReviewBlockedToastLabel', this.lastOrigins_[0]); break; case Actions.BLOCK_ALL: this.toastText_ = await PluralStringProxyImpl.getInstance().getPluralString( - 'safetyCheckNotificationPermissionReviewBlockAllToastLabel', + 'safetyHubNotificationPermissionReviewBlockAllToastLabel', this.lastOrigins_.length); break; case Actions.IGNORE: this.toastText_ = this.i18n( - 'safetyCheckNotificationPermissionReviewIgnoredToastLabel', + 'safetyHubNotificationPermissionReviewIgnoredToastLabel', this.lastOrigins_[0]); break; case Actions.RESET: this.toastText_ = this.i18n( - 'safetyCheckNotificationPermissionReviewResetToastLabel', + 'safetyHubNotificationPermissionReviewResetToastLabel', this.lastOrigins_[0]); break; default: @@ -447,7 +447,7 @@ return ''; } return this.i18n( - 'safetyCheckNotificationPermissionReviewIgnoreAriaLabel', origins[0]); + 'safetyHubNotificationPermissionReviewIgnoreAriaLabel', origins[0]); } private getResetAriaLabelForOrigins(origins: string[]): string { @@ -456,7 +456,7 @@ return ''; } return this.i18n( - 'safetyCheckNotificationPermissionReviewResetAriaLabel', origins[0]); + 'safetyHubNotificationPermissionReviewResetAriaLabel', origins[0]); } private showUndoTooltip_(e: Event) {
diff --git a/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.html b/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.html index 7c6987d7..2cee65f 100644 --- a/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.html +++ b/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.html
@@ -10,14 +10,14 @@ header="[[headerString_]]" subheader="[[subheaderString_]]" header-icon="[[headerIconString_]]" - button-aria-label-id="safetyCheckUnusedSitePermissionsAllowAgainAriaLabel" + button-aria-label-id="safetyHubUnusedSitePermissionsAllowAgainAriaLabel" button-icon="settings20:undo" - button-tooltip-text="$i18n{safetyCheckUnusedSitePermissionsAllowAgainLabel}" + button-tooltip-text="$i18n{safetyHubUnusedSitePermissionsAllowAgainLabel}" sites="[[sites_]]"> <div slot="button-container"> <cr-button id="gotItButton" on-click="onGotItClick_" hidden$="[[shouldShowCompletionInfo_]]"> - $i18n{safetyCheckUnusedSitePermissionsGotItLabel} + $i18n{safetyHubUnusedSitePermissionsGotItLabel} </cr-button> <cr-icon-button id="moreActionButton" class="icon-more-vert" on-click="onMoreActionClick_" hidden$="[[shouldShowCompletionInfo_]]" @@ -26,14 +26,14 @@ <cr-icon-button id="bulkUndoButton" iron-icon="settings20:undo" on-click="onUndoClick_" hidden$="[[!shouldShowCompletionInfo_]]" on-focus="showUndoTooltip_" on-mouseenter="showUndoTooltip_" - aria-label$="$i18n{safetyCheckUnusedSitePermissionsUndoLabel}"> + aria-label$="$i18n{safetyHubUnusedSitePermissionsUndoLabel}"> </cr-icon-button> </div> </settings-safety-hub-module> <cr-toast id="undoToast" duration="5000"> <div>[[toastText_]]</div> <cr-button id="toastUndoButton" on-click="onUndoClick_"> - $i18n{safetyCheckUnusedSitePermissionsUndoLabel} + $i18n{safetyHubUnusedSitePermissionsUndoLabel} </cr-button> </cr-toast> <cr-action-menu id="headerActionMenu" role-description="$i18n{menu}"> @@ -43,5 +43,5 @@ </button> </cr-action-menu> <cr-tooltip fit-to-visible-bounds manual-mode position="top" offset="3"> - $i18n{safetyCheckUnusedSitePermissionsUndoLabel} + $i18n{safetyHubUnusedSitePermissionsUndoLabel} </cr-tooltip>
diff --git a/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.ts b/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.ts index be3e0128..c64531b 100644 --- a/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.ts +++ b/chrome/browser/resources/settings/safety_hub/unused_site_permissions_module.ts
@@ -274,7 +274,7 @@ // Update the toastText_ that isused both as an undo toast text and as a // header text. this.toastText_ = - this.i18n('safetyCheckUnusedSitePermissionsToastLabel', item.origin); + this.i18n('safetyHubUnusedSitePermissionsToastLabel', item.origin); // Only show Undo toast if there are multiple sites to review. Otherwise, // once the single site is reviewed, the completion state with a permanent // Undo button in the header will be shown. @@ -309,7 +309,7 @@ // Update the toastText_ that is also used as a header text. this.toastText_ = await PluralStringProxyImpl.getInstance().getPluralString( - 'safetyCheckUnusedSitePermissionsToastBulkLabel', this.sites_.length); + 'safetyHubUnusedSitePermissionsToastBulkLabel', this.sites_.length); this.$.module.animateHide( /* all origins */ null, @@ -387,12 +387,12 @@ this.headerString_ = await PluralStringProxyImpl.getInstance().getPluralString( - 'safetyCheckUnusedSitePermissionsPrimaryLabel', this.sites_.length); + 'safetyHubUnusedSitePermissionsPrimaryLabel', this.sites_.length); this.subheaderString_ = await PluralStringProxyImpl.getInstance().getPluralString( this.safetyHubAbusiveNotificationRevocationEnabled_ ? 'safetyHubRevokedPermissionsSecondaryLabel' : - 'safetyCheckUnusedSitePermissionsSecondaryLabel', + 'safetyHubUnusedSitePermissionsSecondaryLabel', this.sites_.length); this.headerIconString_ = 'privacy:page-info'; }
diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.html b/chrome/browser/resources/settings/site_settings_page/site_settings_page.html index 98c2249..146e093 100644 --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.html +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.html
@@ -8,20 +8,18 @@ } </style> <template is="dom-if" if="[[showUnusedSitePermissions_]]"> - <template is="dom-if" if="[[enableSafetyHub_]]"> - <div class="cr-row first"> - <h2>$i18n{safetyHub}</h2> - </div> - <settings-safety-hub-module id="safetyHubModule" - header="[[unusedSitePermissionsHeader_]]" - subheader="[[unusedSitePermissionsSubheader_]]" - header-icon="cr:security" header-icon-color="blue"> - <cr-button id="safetyHubButton" slot="button-container" - class="action-button" on-click="onSafetyHubButtonClick_"> - $i18n{safetyHubEntryPointButtonLabel} - </cr-button> - </settings-safety-hub-module> - </template> + <div class="cr-row first"> + <h2>$i18n{safetyHub}</h2> + </div> + <settings-safety-hub-module id="safetyHubModule" + header="[[unusedSitePermissionsHeader_]]" + subheader="[[unusedSitePermissionsSubheader_]]" + header-icon="cr:security" header-icon-color="blue"> + <cr-button id="safetyHubButton" slot="button-container" + class="action-button" on-click="onSafetyHubButtonClick_"> + $i18n{safetyHubEntryPointButtonLabel} + </cr-button> + </settings-safety-hub-module> </template> <div class="cr-row first"> <h2>$i18n{siteSettingsRecentPermissionsSectionLabel}</h2> @@ -72,13 +70,11 @@ focus-config="[[focusConfig]]"> </settings-site-settings-list> </cr-collapse> - <template is="dom-if" if="[[enableSafetyHub_]]"> - <settings-toggle-button - id="unusedSitePermissionsRevocationToggle" - pref="{{ - prefs.safety_hub.unused_site_permissions_revocation.enabled}}" - label="$i18n{safetyCheckUnusedSitePermissionsSettingLabel}" - sub-label= - "$i18n{safetyCheckUnusedSitePermissionsSettingSublabel}"> - </settings-toggle-button> - </template> + <settings-toggle-button + id="unusedSitePermissionsRevocationToggle" + pref="{{ + prefs.safety_hub.unused_site_permissions_revocation.enabled}}" + label="$i18n{safetyHubUnusedSitePermissionsSettingLabel}" + sub-label= + "$i18n{safetyHubUnusedSitePermissionsSettingSublabel}"> + </settings-toggle-button>
diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts index ed942aa9..dc52d74 100644 --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts
@@ -582,13 +582,6 @@ 'safetyHubAbusiveNotificationRevocationEnabled'), }, - enableSafetyHub_: { - type: Boolean, - value() { - return loadTimeData.getBoolean('enableSafetyHub'); - }, - }, - unusedSitePermissionsHeader_: String, unusedSitePermissionsSubeader_: String, }; @@ -669,13 +662,13 @@ permissions.length > 0 && !loadTimeData.getBoolean('isGuest'); this.unusedSitePermissionsHeader_ = await PluralStringProxyImpl.getInstance().getPluralString( - 'safetyCheckUnusedSitePermissionsPrimaryLabel', permissions.length); + 'safetyHubUnusedSitePermissionsPrimaryLabel', permissions.length); // TODO(crbug/342210522): Add test for this. this.unusedSitePermissionsSubheader_ = await PluralStringProxyImpl.getInstance().getPluralString( this.safetyHubAbusiveNotificationRevocationEnabled_ ? 'safetyHubRevokedPermissionsSecondaryLabel' : - 'safetyCheckUnusedSitePermissionsSecondaryLabel', + 'safetyHubUnusedSitePermissionsSecondaryLabel', permissions.length); }
diff --git a/chrome/browser/resources/signin/profile_picker/profile_card_menu.ts b/chrome/browser/resources/signin/profile_picker/profile_card_menu.ts index 24830835..2d2ca1150 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_card_menu.ts +++ b/chrome/browser/resources/signin/profile_picker/profile_card_menu.ts
@@ -52,7 +52,6 @@ actionMenu: CrActionMenuElement, moreActionsButton: HTMLElement, removeConfirmationDialog: CrDialogElement, - removePrimaryLacrosProfileDialog: CrDialogElement, }; }
diff --git a/chrome/browser/resources/signin/profile_picker/profile_picker_app.css b/chrome/browser/resources/signin/profile_picker/profile_picker_app.css index 38600f82..4836623 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_picker_app.css +++ b/chrome/browser/resources/signin/profile_picker/profile_picker_app.css
@@ -23,12 +23,12 @@ } .tangible-sync-style-left-banner { - content: url(images/left_banner.svg); + content: url(left_banner.svg); left: 0; } .tangible-sync-style-right-banner { - content: url(images/right_banner.svg); + content: url(right_banner.svg); right: 0; } @@ -41,19 +41,11 @@ } @media (prefers-color-scheme: dark) { - .left-banner { - content: url(images/dark_mode_left_banner_image.svg); - } - - .right-banner { - content: url(images/dark_mode_right_banner_image.svg); - } - .tangible-sync-style-left-banner { - content: url(images/left_banner_dark.svg); + content: url(left_banner_dark.svg); } .tangible-sync-style-right-banner { - content: url(images/right_banner_dark.svg); + content: url(right_banner_dark.svg); } }
diff --git a/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.html.ts b/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.html.ts index 9fc2c17..93088f10 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.html.ts +++ b/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.html.ts
@@ -27,6 +27,7 @@ `)} <cr-button id="addProfile" class="profile-item" @click="${this.onAddProfileClick_}" + ?hidden="${!this.profileCreationAllowed_}" aria-labelledby="addProfileButtonLabel"> <div id="addProfileButtonLabel" class="profile-card-info prominent-text"> @@ -39,7 +40,8 @@ </div> <div class="footer"> <cr-button id="browseAsGuestButton" - @click="${this.onLaunchGuestProfileClick_}"> + @click="${this.onLaunchGuestProfileClick_}" + ?hidden="${!this.guestModeEnabled_}"> <cr-icon icon="profiles:account-circle" slot="prefix-icon"></cr-icon> $i18n{browseAsGuestButton} </cr-button>
diff --git a/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.ts b/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.ts index 906e9b5..0a43bbd1 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.ts +++ b/chrome/browser/resources/signin/profile_picker/profile_picker_main_view.ts
@@ -67,6 +67,7 @@ hideAskOnStartup_: {type: Boolean}, askOnStartup_: {type: Boolean}, guestModeEnabled_: {type: Boolean}, + profileCreationAllowed_: {type: Boolean}, forceSigninErrorDialogTitle_: {type: String}, forceSigninErrorDialogBody_: {type: String}, forceSigninErrorProfilePath_: {type: String}, @@ -82,6 +83,7 @@ // Potentially updated on profile addition/removal/sign-in. protected guestModeEnabled_: boolean = loadTimeData.getBoolean('isGuestModeEnabled'); + protected profileCreationAllowed_: boolean = isProfileCreationAllowed(); private manageProfilesBrowserProxy_: ManageProfilesBrowserProxy = ManageProfilesBrowserProxyImpl.getInstance(); private resizeObserver_: ResizeObserver|null = null; @@ -99,14 +101,6 @@ protected shouldShownSigninButton_: boolean = false; override firstUpdated() { - if (!this.guestModeEnabled_) { - this.$.browseAsGuestButton.style.display = 'none'; - } - - if (!isProfileCreationAllowed()) { - this.$.addProfile.style.display = 'none'; - } - this.addEventListener('view-enter-finish', this.onViewEnterFinish_); this.addEventListener('toggle-drag', this.toggleDrag_);
diff --git a/chrome/browser/signin/signin_ui_util.cc b/chrome/browser/signin/signin_ui_util.cc index 2e58878..d4fa33b 100644 --- a/chrome/browser/signin/signin_ui_util.cc +++ b/chrome/browser/signin/signin_ui_util.cc
@@ -65,10 +65,6 @@ #include "chrome/browser/signin/signin_ui_delegate_impl_dice.h" #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chrome/browser/signin/signin_ui_delegate_impl_lacros.h" -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - namespace signin_ui_util { namespace { @@ -125,7 +121,7 @@ base::TimeTicks animated_identity_last_shown_; }; -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) SigninUiDelegate* g_signin_ui_delegate_for_testing = nullptr; @@ -133,15 +129,11 @@ if (g_signin_ui_delegate_for_testing) return g_signin_ui_delegate_for_testing; -#if BUILDFLAG(IS_CHROMEOS_LACROS) - static SigninUiDelegateImplLacros delegate; -#else static SigninUiDelegateImplDice delegate; -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) return &delegate; } -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) } // namespace @@ -197,7 +189,7 @@ ->ShowReauthAccountDialog( GetAccountReauthSourceFromAccessPoint(access_point), email, base::DoNothing()); -#elif BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#elif BUILDFLAG(ENABLE_DICE_SUPPORT) // Pass `false` for `enable_sync`, as this function is not expected to start a // sync setup flow after the reauth. GetSigninUiDelegate()->ShowReauthUI( @@ -212,7 +204,7 @@ const std::string& email_hint) { #if BUILDFLAG(IS_CHROMEOS_ASH) NOTREACHED(); -#elif BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#elif BUILDFLAG(ENABLE_DICE_SUPPORT) // There is no sign-in flow for guest or system profile. if (profile->IsGuestSession() || profile->IsSystemProfile()) return; @@ -249,7 +241,7 @@ signin_metrics::AccessPoint access_point) { #if BUILDFLAG(IS_CHROMEOS_ASH) NOTREACHED(); -#elif BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#elif BUILDFLAG(ENABLE_DICE_SUPPORT) CHECK_NE(signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN, access_point); CHECK(!profile->IsOffTheRecord()); @@ -270,7 +262,7 @@ void SignInFromSingleAccountPromo(Profile* profile, const CoreAccountInfo& account, signin_metrics::AccessPoint access_point) { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) DCHECK_NE(signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN, access_point); DCHECK(!profile->IsOffTheRecord()); @@ -325,7 +317,7 @@ access_point); #else NOTREACHED(); -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) } void EnableSyncFromSingleAccountPromo( @@ -340,7 +332,7 @@ const CoreAccountInfo& account, signin_metrics::AccessPoint access_point, bool is_default_promo_account) { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) DCHECK_NE(signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN, access_point); DCHECK(!profile->IsOffTheRecord()); @@ -418,7 +410,7 @@ signin_aborted_mode, is_sync_promo); #else DUMP_WILL_BE_NOTREACHED(); -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) } std::vector<AccountInfo> GetOrderedAccountsForDisplay( @@ -580,13 +572,13 @@ return identity_manager->GetAccountsWithRefreshTokens().size() > 1; } -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) base::AutoReset<SigninUiDelegate*> SetSigninUiDelegateForTesting( // IN-TEST SigninUiDelegate* delegate) { return base::AutoReset<SigninUiDelegate*>(&g_signin_ui_delegate_for_testing, delegate); } -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) void RecordAnimatedIdentityTriggered(Profile* profile) { AvatarButtonUserData::SetAnimatedIdentityLastShown(profile,
diff --git a/chrome/browser/signin/signin_ui_util.h b/chrome/browser/signin/signin_ui_util.h index 2dd03d3..be93e85 100644 --- a/chrome/browser/signin/signin_ui_util.h +++ b/chrome/browser/signin/signin_ui_util.h
@@ -139,10 +139,10 @@ const ProfileAttributesStorage& profile_attributes_storage, Profile* profile); -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) base::AutoReset<SigninUiDelegate*> SetSigninUiDelegateForTesting( SigninUiDelegate* delegate); -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) // Records that the animated identity was shown for the given profile. This is // used for metrics and to decide whether/when the animation can be shown again.
diff --git a/chrome/browser/signin/signin_ui_util_unittest.cc b/chrome/browser/signin/signin_ui_util_unittest.cc index 0e25af6..a0ca4822 100644 --- a/chrome/browser/signin/signin_ui_util_unittest.cc +++ b/chrome/browser/signin/signin_ui_util_unittest.cc
@@ -44,6 +44,7 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) #include "chrome/browser/signin/signin_ui_delegate_impl_dice.h" #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) + namespace signin_ui_util { namespace { @@ -78,39 +79,10 @@ EXPECT_EQ("example-1.com", GetAllowedDomain("email@example-1.com")); } -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) namespace { -#if BUILDFLAG(IS_CHROMEOS_LACROS) -class MockSigninUiDelegate : public SigninUiDelegate { - public: - MOCK_METHOD(void, - ShowSigninUI, - (Profile * profile, - bool enable_sync, - signin_metrics::AccessPoint access_point, - signin_metrics::PromoAction promo_action), - ()); - MOCK_METHOD(void, - ShowReauthUI, - (Profile * profile, - const std::string& email, - bool enable_sync, - signin_metrics::AccessPoint access_point, - signin_metrics::PromoAction promo_action), - ()); - MOCK_METHOD(void, - ShowTurnSyncOnUI, - (Profile * profile, - signin_metrics::AccessPoint access_point, - signin_metrics::PromoAction promo_action, - const CoreAccountId& account_id, - TurnSyncOnHelper::SigninAbortedMode signin_aborted_mode, - bool is_sync_promo), - ()); -}; -#elif BUILDFLAG(ENABLE_DICE_SUPPORT) // TODO(crbug.com/40834209): move out testing of SigninUiDelegateImplDice // in a separate file. class MockSigninUiDelegate : public SigninUiDelegateImplDice { @@ -125,13 +97,9 @@ bool is_sync_promo), ()); }; -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) } // namespace -// TODO(crbug.com/40834209): merge SigninUiUtilTest with -// MirrorSigninUiUtilTest. -#if !BUILDFLAG(IS_CHROMEOS_LACROS) class SigninUiUtilTest : public BrowserWithTestWindowTest { public: SigninUiUtilTest() @@ -756,9 +724,6 @@ ShowSigninPromptFromPromo(profile, access_point_); EXPECT_EQ(0, tab_strip->count()); } -#endif // !BUILDFLAG(IS_CHROMEOS_LACROS) - -#if BUILDFLAG(ENABLE_DICE_SUPPORT) TEST_F(SigninUiUtilTest, GetSignInTabWithAccessPoint) { signin::MakePrimaryAccountAvailable(GetIdentityManager(), "foo@example.com", @@ -804,9 +769,6 @@ sign_in_tab->GetVisibleURL()); } -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) - -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) class SigninUiUtilWithUnoDesktopTest : public SigninUiUtilTest { private: base::test::ScopedFeatureList feature_list_{ @@ -935,200 +897,8 @@ GaiaUrls::GetInstance()->add_account_url().spec(), base::CompareCase::INSENSITIVE_ASCII)); } -#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) - -#if BUILDFLAG(IS_CHROMEOS_LACROS) -class MirrorSigninUiUtilTest : public BrowserWithTestWindowTest { - public: - MirrorSigninUiUtilTest() - : delegate_auto_reset_(SetSigninUiDelegateForTesting(&mock_delegate_)) {} - ~MirrorSigninUiUtilTest() override = default; - - // BrowserWithTestWindowTest: - TestingProfile::TestingFactories GetTestingFactories() override { - return IdentityTestEnvironmentProfileAdaptor:: - GetIdentityTestEnvironmentFactories(); - } - - void ExpectReauth(const std::string& email, - bool enable_sync, - signin_metrics::AccessPoint access_point, - signin_metrics::PromoAction promo_action) { - EXPECT_CALL(mock_delegate_, ShowReauthUI(profile(), email, enable_sync, - access_point, promo_action)); - } - - void ExpectAddAccount(bool enable_sync, - signin_metrics::AccessPoint access_point, - signin_metrics::PromoAction promo_action) { - EXPECT_CALL(mock_delegate_, ShowSigninUI(profile(), enable_sync, - access_point, promo_action)); - } - - void ExpectTurnSyncOn( - signin_metrics::AccessPoint access_point, - signin_metrics::PromoAction promo_action, - const CoreAccountId& account_id, - TurnSyncOnHelper::SigninAbortedMode signin_aborted_mode) { - EXPECT_CALL( - mock_delegate_, - ShowTurnSyncOnUI(profile(), access_point, promo_action, account_id, - signin_aborted_mode, /*is_sync_promo=*/false)); - } - - protected: - Profile* profile() { return browser()->profile(); } - - private: - testing::StrictMock<MockSigninUiDelegate> mock_delegate_; - base::AutoReset<SigninUiDelegate*> delegate_auto_reset_; -}; - -TEST_F(MirrorSigninUiUtilTest, EnableSyncWithExistingAccount) { - signin::IdentityManager* identity_manager = - IdentityManagerFactory::GetForProfile(profile()); - AccountInfo account_info = signin::MakePrimaryAccountAvailable( - identity_manager, kMainEmail, signin::ConsentLevel::kSignin); - - for (bool is_default_promo_account : {true, false}) { - signin_metrics::PromoAction expected_promo_action = - is_default_promo_account - ? signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT - : signin_metrics::PromoAction::PROMO_ACTION_NOT_DEFAULT; - - ExpectTurnSyncOn( - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - expected_promo_action, account_info.account_id, - TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); - EnableSyncFromMultiAccountPromo( - profile(), account_info, - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - is_default_promo_account); - } -} - -TEST_F(MirrorSigninUiUtilTest, EnableSyncWithAccountThatNeedsReauth) { - signin::IdentityManager* identity_manager = - IdentityManagerFactory::GetForProfile(profile()); - AccountInfo account_info = signin::MakePrimaryAccountAvailable( - identity_manager, kMainEmail, signin::ConsentLevel::kSignin); - - // Add an account and then put its refresh token into an error state to - // require a reauth before enabling sync. - signin::UpdatePersistentErrorOfRefreshTokenForAccount( - identity_manager, account_info.account_id, - GoogleServiceAuthError(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); - - ExpectReauth(kMainEmail, /*enable_sync=*/true, - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT); - EnableSyncFromSingleAccountPromo( - profile(), account_info, - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN); -} - -TEST_F(MirrorSigninUiUtilTest, EnableSyncForNewAccount) { - ExpectAddAccount( - /*enable_sync=*/true, - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - signin_metrics::PromoAction:: - PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT); - EnableSyncFromMultiAccountPromo( - profile(), CoreAccountInfo(), - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - /*is_default_promo_account=*/false); -} - -TEST_F(MirrorSigninUiUtilTest, EnableSyncForNewAccountExisting) { - signin::IdentityManager* identity_manager = - IdentityManagerFactory::GetForProfile(profile()); - AccountInfo account_info = signin::MakePrimaryAccountAvailable( - identity_manager, kMainEmail, signin::ConsentLevel::kSignin); - - ExpectAddAccount( - /*enable_sync=*/true, - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT); - EnableSyncFromMultiAccountPromo( - profile(), CoreAccountInfo(), - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - /*is_default_promo_account=*/false); -} - -TEST_F(MirrorSigninUiUtilTest, ShowReauthDialog) { - signin::IdentityManager* identity_manager = - IdentityManagerFactory::GetForProfile(profile()); - AccountInfo account_info = signin::MakePrimaryAccountAvailable( - identity_manager, kMainEmail, signin::ConsentLevel::kSync); - - // Add an account and then put its refresh token into an error state to - // require a reauth before enabling sync. - signin::UpdatePersistentErrorOfRefreshTokenForAccount( - identity_manager, account_info.account_id, - GoogleServiceAuthError(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); - - ExpectReauth(kMainEmail, /*enable_sync=*/false, - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, - signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO); - ShowReauthForPrimaryAccountWithAuthError( - profile(), - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN); -} - -TEST_F(MirrorSigninUiUtilTest, ShowExtensionSigninPrompt_Signin) { - for (bool enable_sync : {true, false}) { - ExpectAddAccount(enable_sync, - signin_metrics::AccessPoint::ACCESS_POINT_EXTENSIONS, - signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO); - ShowExtensionSigninPrompt(profile(), enable_sync, - /*email_hint=*/std::string()); - } -} - -TEST_F(MirrorSigninUiUtilTest, ShowExtensionSigninPrompt_Reauth) { - for (bool enable_sync : {true, false}) { - ExpectReauth(kMainEmail, enable_sync, - signin_metrics::AccessPoint::ACCESS_POINT_EXTENSIONS, - signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO); - ShowExtensionSigninPrompt(profile(), enable_sync, kMainEmail); - } -} - -TEST_F(MirrorSigninUiUtilTest, - ShowExtensionSigninPrompt_Reauth_AsLockedProfile) { - signin_util::ScopedForceSigninSetterForTesting force_signin_setter(true); - ProfileAttributesEntry* entry = - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile()->GetPath()); - ASSERT_NE(entry, nullptr); - entry->LockForceSigninProfile(true); - - ShowExtensionSigninPrompt(profile(), /*enable_sync=*/true, kMainEmail); -} - -TEST_F(MirrorSigninUiUtilTest, ShowSigninPromptFromPromo) { - signin_metrics::AccessPoint kAccessPoint = - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN; - ExpectAddAccount( - /*enable_sync=*/false, kAccessPoint, - signin_metrics::PromoAction:: - PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT); - ShowSigninPromptFromPromo(profile(), kAccessPoint); -} - -TEST_F(MirrorSigninUiUtilTest, ShowSigninPromptFromPromoWithExistingAccount) { - signin::MakePrimaryAccountAvailable( - IdentityManagerFactory::GetForProfile(profile()), "foo@example.com", - signin::ConsentLevel::kSignin); - ShowSigninPromptFromPromo( - profile(), - signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN); -} - -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) // This test does not use the SigninUiUtilTest test fixture, because it // needs a mock time environment, and BrowserWithTestWindowTest may be flaky
diff --git a/chrome/browser/signin/signin_util.cc b/chrome/browser/signin/signin_util.cc index dff70fd..7704aa0 100644 --- a/chrome/browser/signin/signin_util.cc +++ b/chrome/browser/signin/signin_util.cc
@@ -156,13 +156,11 @@ } bool IsProfileDeletionAllowed(Profile* profile) { -#if BUILDFLAG(IS_CHROMEOS_LACROS) - return !profile->IsMainProfile(); -#elif BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(IS_ANDROID) return false; #else return true; -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) +#endif } #if !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/signin/signin_util_unittest.cc b/chrome/browser/signin/signin_util_unittest.cc index c04f508b..1b2007a 100644 --- a/chrome/browser/signin/signin_util_unittest.cc +++ b/chrome/browser/signin/signin_util_unittest.cc
@@ -123,7 +123,6 @@ EXPECT_FALSE(signin_util::IsForceSigninEnabled()); } -#if !BUILDFLAG(IS_CHROMEOS_LACROS) TEST_F(SigninUtilTest, IsProfileSeparationEnforcedByProfile) { std::unique_ptr<TestingProfile> profile = TestingProfile::Builder().Build(); for (const auto& local_policy : all_policies) { @@ -441,5 +440,3 @@ } } #endif // !BUILDFLAG(ENABLE_DICE_SUPPORT) - -#endif
diff --git a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserver.java b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserver.java index c66effa..74e9343 100644 --- a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserver.java +++ b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserver.java
@@ -175,14 +175,13 @@ } @Override - public void didMergeTabToGroup(Tab movedTab, int selectedTabIdInGroup) { + public void didMergeTabToGroup(Tab movedTab) { if (!mIsObserving) return; - LogUtils.log( - TAG, "didMergeTabToGroup, selectedTabIdInGroup = " + selectedTabIdInGroup); + int rootId = movedTab.getRootId(); + LogUtils.log(TAG, "didMergeTabToGroup, rootId = " + rootId); LocalTabGroupId tabGroupRootId = - TabGroupSyncUtils.getLocalTabGroupId( - mTabGroupModelFilter, movedTab.getRootId()); + TabGroupSyncUtils.getLocalTabGroupId(mTabGroupModelFilter, rootId); if (groupExistsInSync(tabGroupRootId)) { int positionInGroup = mTabGroupModelFilter.getIndexOfTabInGroup(movedTab); mRemoteTabGroupMutationHelper.addTab(tabGroupRootId, movedTab, positionInGroup);
diff --git a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserverUnitTest.java b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserverUnitTest.java index 1ca2207..93b8362b 100644 --- a/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserverUnitTest.java +++ b/chrome/browser/tab_group_sync/android/java/src/org/chromium/chrome/browser/tab_group_sync/TabGroupSyncLocalObserverUnitTest.java
@@ -319,7 +319,7 @@ @Test public void testDidMergeTabToGroup() { - mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab1, 1); + mTabGroupModelFilterObserverCaptor.getValue().didMergeTabToGroup(mTab1); verify(mTabGroupSyncService, times(1)).createGroup(eq(LOCAL_TAB_GROUP_ID_1)); verify(mTabGroupModelFilter, never()).getRelatedTabList(anyInt()); verify(mTabGroupModelFilter, times(1)).getRelatedTabListForRootId(1);
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImpl.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImpl.java index 1571f653..c3bdc32 100644 --- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImpl.java +++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImpl.java
@@ -256,7 +256,7 @@ } for (TabGroupModelFilterObserver observer : mGroupFilterObserver) { - observer.didMergeTabToGroup(tab, tab.getId()); + observer.didMergeTabToGroup(tab); } if (notify) { @@ -351,12 +351,10 @@ } resetFilterState(); - Tab lastMergedTab = tabsToMerge.get(tabsToMerge.size() - 1); - TabGroup group = mRootIdToGroupMap.get(lastMergedTab.getRootId()); for (int i = 0; i < tabsToMerge.size(); i++) { Tab tab = tabsToMerge.get(i); for (TabGroupModelFilterObserver observer : mGroupFilterObserver) { - observer.didMergeTabToGroup(tab, group.getLastShownTabId()); + observer.didMergeTabToGroup(tab); } } @@ -694,10 +692,9 @@ // If undoing results in restoring a tab into a different group then notify observers it was // added. if (isChangingGroups && isTabInTabGroup(tab)) { - TabGroup group = mRootIdToGroupMap.get(originalRootId); // Last shown tab IDs are not preserved across an undo. for (TabGroupModelFilterObserver observer : mGroupFilterObserver) { - observer.didMergeTabToGroup(tab, group.getLastShownTabId()); + observer.didMergeTabToGroup(tab); } } } @@ -1266,9 +1263,8 @@ } else if (isMergeTabToGroup) { resetFilterState(); - TabGroup group = mRootIdToGroupMap.get(tab.getRootId()); for (TabGroupModelFilterObserver observer : mGroupFilterObserver) { - observer.didMergeTabToGroup(tab, group.getLastShownTabId()); + observer.didMergeTabToGroup(tab); } } else { reorder();
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImplUnitTest.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImplUnitTest.java index 559f822..aba24167 100644 --- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImplUnitTest.java +++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterImplUnitTest.java
@@ -1001,7 +1001,7 @@ assertEquals(mTab1.getTabGroupId(), tabGroupId); verify(mTabGroupModelFilterObserver).didCreateNewGroup(mTab1, mTabGroupModelFilter); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1, mTab1.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1); verify(mTabGroupModelFilterObserver, never()) .didCreateGroup( anyList(), @@ -1173,7 +1173,7 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(mTab4, TAB1_ROOT_ID); verify(mTabModel).moveTab(mTab4.getId(), ++startIndex); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4, mTab1.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4); verify(mTabGroupModelFilterObserver).didCreateNewGroup(mTab1, mTabGroupModelFilter); assertArrayEquals( mTabGroupModelFilter.getRelatedTabList(mTab4.getId()).toArray(), @@ -1197,8 +1197,8 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(mTab6, TAB1_ROOT_ID); verify(mTabModel).moveTab(mTab5.getId(), ++startIndex); verify(mTabModel).moveTab(mTab6.getId(), ++startIndex); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5, TAB1_ROOT_ID); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6, TAB1_ROOT_ID); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6); verify(mTabGroupModelFilterObserver, never()) .didCreateNewGroup(mTab6, mTabGroupModelFilter); verify(mTabGroupModelFilterObserver) @@ -1233,8 +1233,8 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(mTab6, TAB2_ROOT_ID); verify(mTabModel).moveTab(mTab5.getId(), ++startIndex); verify(mTabModel).moveTab(mTab6.getId(), ++startIndex); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5, mTab2.getId()); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6, mTab2.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6); verify(mTabGroupModelFilterObserver, never()) .didCreateNewGroup(mTab6, mTabGroupModelFilter); verify(mTabGroupModelFilterObserver) @@ -1265,7 +1265,7 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(mTab1, TAB4_ROOT_ID); verify(mTabModel).moveTab(mTab1.getId(), startIndex + 1); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1, mTab4.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1); verify(mTabGroupModelFilterObserver).didCreateNewGroup(mTab4, mTabGroupModelFilter); assertArrayEquals( mTabGroupModelFilter.getRelatedTabList(mTab1.getId()).toArray(), @@ -1289,8 +1289,8 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(mTab3, TAB4_ROOT_ID); verify(mTabModel).moveTab(mTab2.getId(), startIndex + 1); verify(mTabModel).moveTab(mTab3.getId(), startIndex + 1); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab2, mTab4.getId()); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab3, mTab4.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab2); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab3); verify(mTabGroupModelFilterObserver, never()) .didCreateNewGroup(mTab2, mTabGroupModelFilter); verify(mTabGroupModelFilterObserver) @@ -1350,8 +1350,8 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(mTab4, TAB5_ROOT_ID); verify(mTabModel).moveTab(mTab1.getId(), POSITION6 + 1); verify(mTabModel).moveTab(mTab4.getId(), POSITION6 + 1); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1, mTab5.getId()); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4, mTab5.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4); assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); // Attempt to merge single tabs with group tabs. @@ -1383,8 +1383,8 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(newTab, TAB1_ROOT_ID); verify(mTabModel).moveTab(mTab4.getId(), POSITION1 + 1); verify(mTabModel).moveTab(newTab.getId(), POSITION1 + 2); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4, mTab1.getId()); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab, mTab1.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab); assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); // Attempt to merge all single tabs, resulting in a new group creation. @@ -1412,8 +1412,8 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(newTab, TAB4_ROOT_ID); verify(mTabModel).moveTab(mTab1.getId(), POSITION4 + 1); verify(mTabModel).moveTab(newTab.getId(), POSITION4 + 1); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1, mTab4.getId()); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab, mTab4.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab1); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab); assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); // Attempt to merge all single tabs, resulting in a new group creation. @@ -1448,8 +1448,8 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(newTab1, newTab0.getId()); verify(mTabGroupModelFilterObserver).willMergeTabToGroup(newTab2, newTab0.getId()); verify(mTabModel, never()).moveTab(anyInt(), anyInt()); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab1, newTab0.getId()); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab2, newTab0.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab1); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab2); assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); // Attempt to merge all single tabs, resulting in a new group creation. @@ -1485,7 +1485,7 @@ verify(mTabModel).moveTab(newTab0.getId(), 9); // Skip newTab1 verify(mTabGroupModelFilterObserver).didMoveWithinGroup(newTab2, 8, 8); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab0, newTab1.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(newTab0); assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); // Attempt to merge a single tab with group tabs. @@ -1575,7 +1575,7 @@ verify(mTabGroupModelFilterObserver).willMergeTabToGroup(mTab4, TAB1_ROOT_ID); verify(mTabModel).moveTab(mTab4.getId(), ++startIndex); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4, mTab1.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4); verify(mTabGroupModelFilterObserver).didCreateNewGroup(mTab1, mTabGroupModelFilter); verify(mTabGroupModelFilterObserver, never()).didRemoveTabGroup(anyInt(), any(), anyInt()); assertArrayEquals( @@ -1646,7 +1646,7 @@ // No call should be made here. verify(mTabGroupModelFilterObserver, never()) .didMoveTabOutOfGroup(any(Tab.class), anyInt()); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(any(Tab.class), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(any(Tab.class)); verify(mTabGroupModelFilterObserver, never()) .didMoveWithinGroup(any(Tab.class), anyInt(), anyInt()); verify(mTabGroupModelFilterObserver, never()) @@ -1661,7 +1661,7 @@ // No call should be made here. verify(mTabGroupModelFilterObserver, never()) .didMoveTabOutOfGroup(any(Tab.class), anyInt()); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(any(Tab.class), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(any(Tab.class)); verify(mTabGroupModelFilterObserver, never()) .didMoveWithinGroup(any(Tab.class), anyInt(), anyInt()); verify(mTabGroupModelFilterObserver, never()) @@ -1694,7 +1694,7 @@ verifyNoMoreInteractions(mAttributesObserver); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab4, TAB4_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab4, POSITION2); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab4), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab4)); } @Test @@ -1709,7 +1709,7 @@ mTabGroupModelFilter.createSingleTabGroup(mTab4, false); assertThat(mTabGroupModelFilter.getTabGroupCount(), equalTo(3)); verify(mTabGroupModelFilterObserver).didCreateNewGroup(mTab4, mTabGroupModelFilter); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4, mTab4.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab4); verify(mTabGroupModelFilterObserver, never()) .didCreateGroup(any(), any(), any(), any(), any(), anyInt(), anyBoolean()); @@ -1736,7 +1736,7 @@ assertThat(mTabGroupModelFilter.getTabGroupCount(), equalTo(3)); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab1, TAB1_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab1, POSITION3); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab1), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab1)); } @Test @@ -1774,7 +1774,7 @@ assertThat(mTabGroupModelFilter.getTabGroupCount(), equalTo(3)); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab4, TAB4_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab4, POSITION1); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab4), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab4)); } @Test @@ -1806,15 +1806,15 @@ mTabGroupModelFilter.undoGroupedTab(mTab6, POSITION6, TAB5_ROOT_ID, TAB5_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab6, TAB5_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab6, POSITION2); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6, mTab6.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6); mTabGroupModelFilter.undoGroupedTab(mTab5, POSITION5, TAB5_ROOT_ID, TAB5_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab5, TAB5_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab5, POSITION2); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5, mTab6.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5); mTabGroupModelFilter.undoGroupedTab(mTab4, POSITION4, TAB4_ROOT_ID, TAB4_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab4, TAB4_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab4, POSITION2); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab4), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab4)); assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); assertThat(mTab4.getRootId(), equalTo(TAB4_ROOT_ID)); @@ -1856,15 +1856,15 @@ mTabGroupModelFilter.undoGroupedTab(mTab3, POSITION2, TAB2_ROOT_ID, TAB2_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab3, TAB2_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab3, POSITION1); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab3, mTab3.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab3); mTabGroupModelFilter.undoGroupedTab(mTab2, POSITION2, TAB2_ROOT_ID, TAB2_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab2, TAB2_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab2, POSITION1); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab2, mTab3.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab2); mTabGroupModelFilter.undoGroupedTab(mTab1, POSITION1, TAB1_ROOT_ID, null); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab1, TAB1_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab1, POSITION1); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab1), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab1)); assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); assertThat(mTab1.getRootId(), equalTo(TAB1_ROOT_ID)); @@ -1900,15 +1900,16 @@ assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); // Undo the grouped action in reverse order so indexes are correct. + reset(mTabGroupModelFilterObserver); expectedTabModel = new ArrayList<>(Arrays.asList(mTab1, mTab2, mTab3, mTab4, mTab5, mTab6)); mTabGroupModelFilter.undoGroupedTab(mTab6, POSITION6, TAB5_ROOT_ID, TAB5_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab6, TAB5_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab6, POSITION2); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6, mTab6.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6); mTabGroupModelFilter.undoGroupedTab(mTab5, POSITION5, TAB5_ROOT_ID, TAB5_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab5, TAB5_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab5, POSITION2); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5, mTab6.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5); assertThat(mTab5.getRootId(), equalTo(TAB5_ROOT_ID)); assertThat(mTab6.getRootId(), equalTo(TAB5_ROOT_ID)); @@ -1941,23 +1942,24 @@ assertArrayEquals(mTabs.toArray(), expectedTabModel.toArray()); // Undo the grouped action in reverse order so indexes are correct. + reset(mTabGroupModelFilterObserver); expectedTabModel = new ArrayList<>(Arrays.asList(mTab1, mTab2, mTab3, mTab4, mTab5, mTab6)); mTabGroupModelFilter.undoGroupedTab(mTab6, POSITION6, TAB5_ROOT_ID, TAB5_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab6, TAB5_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab6, POSITION2); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6, mTab6.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab6); mTabGroupModelFilter.undoGroupedTab(mTab5, POSITION5, TAB5_ROOT_ID, TAB5_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab5, TAB5_ROOT_ID); verify(mTabGroupModelFilterObserver).didMoveTabOutOfGroup(mTab5, POSITION2); - verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5, mTab6.getId()); + verify(mTabGroupModelFilterObserver).didMergeTabToGroup(mTab5); mTabGroupModelFilter.undoGroupedTab(mTab3, POSITION3, TAB2_ROOT_ID, TAB2_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab3, TAB2_ROOT_ID); verify(mTabGroupModelFilterObserver, never()).didMoveTabOutOfGroup(eq(mTab3), anyInt()); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab3), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab3)); mTabGroupModelFilter.undoGroupedTab(mTab2, POSITION2, TAB2_ROOT_ID, TAB2_TAB_GROUP_ID); verify(mTabGroupModelFilterObserver).willMoveTabOutOfGroup(mTab2, TAB2_ROOT_ID); verify(mTabGroupModelFilterObserver, never()).didMoveTabOutOfGroup(eq(mTab2), anyInt()); - verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab2), anyInt()); + verify(mTabGroupModelFilterObserver, never()).didMergeTabToGroup(eq(mTab2)); assertThat(mTab5.getRootId(), equalTo(TAB5_ROOT_ID)); assertThat(mTab6.getRootId(), equalTo(TAB5_ROOT_ID));
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterObserver.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterObserver.java index 50f0915..946d762 100644 --- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterObserver.java +++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabGroupModelFilterObserver.java
@@ -68,9 +68,8 @@ * * @param movedTab The {@link Tab} which has been moved. If a group is merged to a tab or * another group, this is the last tab of the merged group. - * @param selectedTabIdInGroup The id of the selected {@link Tab} in group. */ - default void didMergeTabToGroup(Tab movedTab, int selectedTabIdInGroup) {} + default void didMergeTabToGroup(Tab movedTab) {} /** * This method is called after a group is moved.
diff --git a/chrome/browser/themes/theme_syncable_service.cc b/chrome/browser/themes/theme_syncable_service.cc index 6dc27c8..03a6769 100644 --- a/chrome/browser/themes/theme_syncable_service.cc +++ b/chrome/browser/themes/theme_syncable_service.cc
@@ -83,8 +83,13 @@ ThemeService::BrowserColorScheme::kSystem; } -base::Value::Dict SpecificsNtpBackgroundToDict( - const sync_pb::ThemeSpecifics::NtpCustomBackground& ntp_background) { +std::optional<base::Value::Dict> NtpBackgroundDictFromSpecifics( + const sync_pb::ThemeSpecifics& theme_specifics) { + if (!theme_specifics.has_ntp_background()) { + return std::nullopt; + } + const sync_pb::ThemeSpecifics::NtpCustomBackground& ntp_background = + theme_specifics.ntp_background(); base::Value::Dict dict; if (ntp_background.has_url()) { dict.Set(kNtpCustomBackgroundURL, ntp_background.url()); @@ -517,8 +522,6 @@ base::AutoReset<bool> processing_changes(&processing_syncer_changes_, true); if (new_specs.use_custom_theme()) { - // TODO(akalin): Figure out what to do about third-party themes - // (i.e., those not on either Google gallery). string id(new_specs.custom_theme_id()); GURL update_url(new_specs.custom_theme_update_url()); DVLOG(1) << "Applying theme " << id << " with update_url " << update_url; @@ -595,17 +598,21 @@ } if (use_new_fields) { + PrefService* prefs = profile_->GetPrefs(); // NTP background can exist along with the other (non-extension) themes. - if (new_specs.has_ntp_background() && profile_->GetPrefs()) { - DVLOG(1) << "Applying custom NTP background"; - - if (base::Value::Dict dict = - SpecificsNtpBackgroundToDict(new_specs.ntp_background()); - !dict.empty()) { + if (prefs) { + if (std::optional<base::Value::Dict> dict = + NtpBackgroundDictFromSpecifics(new_specs); + dict && !dict->empty()) { + DVLOG(1) << "Applying custom NTP background"; // TODO(crbug.com/356148174): Set via NtpCustomBackgroundService instead // of setting the pref directly. - profile_->GetPrefs()->SetDict( - prefs::kNonSyncingNtpCustomBackgroundDictDoNotUse, std::move(dict)); + prefs->SetDict(prefs::kNonSyncingNtpCustomBackgroundDictDoNotUse, + std::move(*dict)); + } else { + // Clear the current ntp background if none received from remote. + DVLOG(1) << "Removing custom NTP background"; + prefs->ClearPref(prefs::kNonSyncingNtpCustomBackgroundDictDoNotUse); } } @@ -622,7 +629,7 @@ // another client has already uploaded the latest theme with the new // fields. Thus, there's no point in reading the syncing theme prefs // anymore. - if (PrefService* prefs = profile_->GetPrefs()) { + if (prefs) { prefs->SetBoolean(prefs::kShouldReadIncomingSyncingThemePrefs, false); pref_service_syncable_observer_.reset(); }
diff --git a/chrome/browser/themes/theme_syncable_service_unittest.cc b/chrome/browser/themes/theme_syncable_service_unittest.cc index 626ca2d..14e70d3 100644 --- a/chrome/browser/themes/theme_syncable_service_unittest.cc +++ b/chrome/browser/themes/theme_syncable_service_unittest.cc
@@ -2263,6 +2263,45 @@ EXPECT_EQ(theme_service()->GetUserColor(), std::nullopt); } +// Regression test for crbug.com/389026436. +TEST_F(ThemeSyncableServiceWithMigrationFlagEnabledTest, + ClearLocalNtpBackgroundIfRemoteEmpty) { + // Set local ntp background. + base::Value::Dict new_value = + base::Value::Dict() + .Set(kNtpCustomBackgroundURL, kTestUrl) + .Set(kNtpCustomBackgroundAttributionLine1, "attribution_line_1") + .Set(kNtpCustomBackgroundAttributionLine2, "attribution_line_2") + .Set(kNtpCustomBackgroundAttributionActionURL, + "attribution_action_url") + .Set(kNtpCustomBackgroundCollectionId, "collection_id") + .Set(kNtpCustomBackgroundResumeToken, "resume_token") + .Set(kNtpCustomBackgroundRefreshTimestamp, 1234567890) + .Set(kNtpCustomBackgroundMainColor, static_cast<int>(SK_ColorRED)); + + profile()->GetPrefs()->Set(prefs::kNonSyncingNtpCustomBackgroundDictDoNotUse, + base::Value(new_value.Clone())); + + // Remote theme. + sync_pb::ThemeSpecifics theme_specifics; + theme_specifics.set_use_custom_theme(false); + theme_specifics.set_browser_color_scheme( + ::sync_pb::ThemeSpecifics_BrowserColorScheme_SYSTEM); + theme_specifics.mutable_autogenerated_color_theme()->set_color(SK_ColorBLUE); + + // Start syncing. + std::optional<syncer::ModelError> error = + theme_sync_service()->MergeDataAndStartSyncing( + syncer::THEMES, MakeThemeDataList(theme_specifics), + std::make_unique<syncer::SyncChangeProcessorWrapperForTest>( + fake_change_processor())); + ASSERT_FALSE(error.has_value()) << error.value().message(); + + // Local ntp background is cleared. + EXPECT_FALSE(profile()->GetPrefs()->GetUserPrefValue( + prefs::kNonSyncingNtpCustomBackgroundDictDoNotUse)); +} + class ThemeSyncableServiceTestWithoutAccountThemesSeparation : public ThemeSyncableServiceWithMigrationFlagEnabledTest { public:
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb index 9fd029c..97e05e6a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -70,7 +70,7 @@ <translation id="1263231323834454256">רשימת קריאה</translation> <translation id="1269129608791067105">ההיסטוריה תופיע כאן</translation> <translation id="1273937721055267968">חסימה של <ph name="DOMAIN" /></translation> -<translation id="1283039547216852943">יש להקיש כדי להרחיב</translation> +<translation id="1283039547216852943">יש ללחוץ כדי להרחיב</translation> <translation id="1289059016768036948">תוצג בקשה להיכנס לחשבון Google.</translation> <translation id="129553762522093515">נסגרו לאחרונה</translation> <translation id="1298077576058087471">קראת חדשות היום? אפשר לחסוך עד 60% בניצול חבילת הגלישה</translation> @@ -134,7 +134,7 @@ <translation id="1543379346429265919">{BOOKMARKS_COUNT,plural, =1{סימנייה אחת שמורה רק במכשיר הזה. כדי להשתמש בה במכשירים אחרים, עליך לשמור אותה בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}one{# סימניות שמורות רק במכשיר הזה. כדי להשתמש בהן במכשירים אחרים, צריך לשמור אותן בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}two{# סימניות שמורות רק במכשיר הזה. כדי להשתמש בהן במכשירים אחרים, צריך לשמור אותן בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}other{# סימניות שמורות רק במכשיר הזה. כדי להשתמש בהן במכשירים אחרים, צריך לשמור אותן בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}}</translation> <translation id="1544084554881119930">אמצעי תשלום וכתובות לא יוצפנו. היסטוריית הגלישה ב-Chrome לא תסונכרן. רק מי שיודע את ביטוי הסיסמה יכול לקרוא את הנתונים המוצפנים. ביטוי הסיסמה לא נשלח אל Google ולא מאוחסן ב-Google. אם שכחת את ביטוי הסיסמה או שברצונך לשנות את ההגדרה הזו, <ph name="BEGIN_LINK" />עליך לנקות את נתוני Chrome בחשבון<ph name="END_LINK" />.</translation> -<translation id="1544826120773021464">כדי לנהל את חשבון Google, יש להקיש על הלחצן "ניהול החשבון"</translation> +<translation id="1544826120773021464">כדי לנהל את חשבון Google, יש ללחוץ על הכפתור "ניהול החשבון"</translation> <translation id="154513667535157406">אם סימנת 'אהבתי', יישלח אלינו משוב שאהבת את הסיכום הזה</translation> <translation id="1549000191223877751">העברה לחלון האחר</translation> <translation id="1553358976309200471">כדאי לעדכן את Chrome</translation> @@ -278,7 +278,7 @@ <translation id="2287421207599770907">{NUMBER_OF_TABS,plural, =1{הצגת כרטיסייה אחת (<ph name="TABS_COUNT_ONE" />)}one{הצגת <ph name="TABS_COUNT_MANY" /> כרטיסיות}two{הצגת <ph name="TABS_COUNT_MANY" /> כרטיסיות}other{הצגת <ph name="TABS_COUNT_MANY" /> כרטיסיות}}</translation> <translation id="2297822946037605517">שתף דף זה</translation> <translation id="230115972905494466">לא נמצאו מכשירים תואמים</translation> -<translation id="2318045970523081853">יש להקיש כדי להתקשר</translation> +<translation id="2318045970523081853">יש ללחוץ כדי להתקשר</translation> <translation id="2321086116217818302">המערכת מכינה את הסיסמאות…</translation> <translation id="2323763861024343754">נתוני אתר מאוחסנים</translation> <translation id="2328474416100889417">כולם יאבדו באופן מיידי את הגישה לקבוצת הכרטיסיות '<ph name="GROUP_NAME" />' וכל הקישורים להזמנה יושבתו</translation> @@ -901,7 +901,7 @@ <translation id="510275257476243843">נותרה שעה אחת</translation> <translation id="5114895953710637392">גיליון הסינון לפי אפליקציות סגור.</translation> <translation id="5115811374190515607">אל <ph name="PRODUCT_NAME" /></translation> -<translation id="5116239826668864748">אפשר להשתמש ב-Chrome בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="5116239826668864748">אפשר להשתמש ב-Chrome בכל פעם שלוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="5122378528687922675">אם צריך עזרה, אפשר לבקש עזרה מהורה (<ph name="PARENT_NAME_1" /> או <ph name="PARENT_NAME_2" />)</translation> <translation id="5123685120097942451">כרטיסייה אנונימית</translation> <translation id="5139940364318403933">איך משתמשים ב-Google Drive</translation> @@ -911,7 +911,7 @@ <translation id="5161254044473106830">יש להזין כותרת</translation> <translation id="5161262286013276579">גיליון האישור של מפתח הגישה פתוח</translation> <translation id="5163361352003913350">החשבון הנוכחי: <ph name="NAME" />. עליך לבחור חשבון.</translation> -<translation id="5167637873777016814">כדי לצאת מהמצב הפרטי, מקישים הקשה כפולה ולוחצים לחיצה ארוכה</translation> +<translation id="5167637873777016814">כדי לצאת מהמצב הפרטי, לוחצים לחיצה כפולה ולוחצים לחיצה ארוכה</translation> <translation id="5170568018924773124">הצגה בתיקייה</translation> <translation id="5171045022955879922">טקסט או כתובת אתר לחיפוש</translation> <translation id="5174700554036517242">הכרטיסייה חזרה לגובה ההתחלתי</translation> @@ -925,7 +925,7 @@ <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="5227554086496586518">יש ללחוץ כדי להציג את תוצאות החיפוש</translation> <translation id="5233638681132016545">כרטיסייה חדשה</translation> <translation id="5235196193381275927">משהו השתבש במהלך הכניסה לחשבון</translation> <translation id="5246093389635966745">עריכת קיצור הדרך בסרגל הכלים</translation> @@ -967,7 +967,7 @@ <translation id="5441466871879044658">תרגום לשפה הזו</translation> <translation id="5441522332038954058">מעבר לשורת כתובת האתר</translation> <translation id="5444999712122199445">חזרה לאתר</translation> -<translation id="544776284582297024">כדי לפתוח כרטיסיות ולהיכנס לדפים שונים בו-זמנית, יש להקיש על לחצן הכרטיסיות הפתוחות</translation> +<translation id="544776284582297024">כדי לפתוח כרטיסיות ולהיכנס לדפים שונים בו-זמנית, יש ללחוץ על כפתור הכרטיסיות הפתוחות</translation> <translation id="5454166040603940656">עם <ph name="PROVIDER" /></translation> <translation id="5454215368971121976">כשהמכשיר מקופל, אפשר לבחור מהאפשרויות למטה או ללחוץ לחיצה ארוכה על סרגל הכתובות כדי לשנות את המיקום שלו.</translation> <translation id="5458366071038729214">כאן יוצגו האתרים שיתווספו למעקב</translation> @@ -1023,14 +1023,14 @@ <translation id="572328651809341494">כרטיסיות אחרונות</translation> <translation id="5726692708398506830">הגדלת כל מה שמופיע בדף</translation> <translation id="5728072125198221967">שירותי Google מקושרים</translation> -<translation id="5744751019568455640">אלה הקולות שאפשר לבחור להקראה של דפי האינטרנט. אם הקול הזה מוצא חן בעיניך וברצונך שאמשיך להשתמש בו, פשוט צריך להקיש על שם הקול.</translation> +<translation id="5744751019568455640">אלה הקולות שאפשר לבחור להקראה של דפי האינטרנט. אם הקול הזה מוצא חן בעיניך וברצונך שאמשיך להשתמש בו, פשוט צריך ללחוץ על שם הקול.</translation> <translation id="574845902699630049">שיתוף בתור <ph name="OWNER_FULL_NAME" /></translation> <translation id="5749068826913805084">לצורך הורדת קבצים, Chrome זקוק לגישה לאחסון.</translation> <translation id="5749237766298580851">כבויה <ph name="SEPARATOR" /> לא מומלץ</translation> <translation id="5752232708629533680">שיתוף קובץ GIF בלבד</translation> <translation id="5754350196967618083">לא ניתן לרענן את Discover</translation> <translation id="5763382633136178763">כרטיסיות אנונימיות</translation> -<translation id="5763514718066511291">הקשה מעתיקה את כתובת האתר של האפליקציה הזו</translation> +<translation id="5763514718066511291">לחיצה מעתיקה את כתובת האתר של האפליקציה הזו</translation> <translation id="5765517223145864268">נשמח לשמוע על החוויה שלך. אפשר גם <ph name="BEGIN_LINK" />לשנות את ההגדרות<ph name="END_LINK" />.</translation> <translation id="5765780083710877561">תיאור:</translation> <translation id="5776970333778123608">נתונים לא חשובים</translation> @@ -1059,7 +1059,7 @@ <translation id="5864419784173784555">בהמתנה להורדה נוספת…</translation> <translation id="5865733239029070421">שליחת דוחות קריסה וסטטיסטיקת שימוש אל Google באופן אוטומטי</translation> <translation id="5869522115854928033">סיסמאות שמורות</translation> -<translation id="587735546353481577">כדי לעקוב אחר אתר כלשהו, עוברים אליו, פותחים את תפריט Chrome ומקישים על 'מעקב'.</translation> +<translation id="587735546353481577">כדי לעקוב אחר אתר כלשהו, עוברים אליו, פותחים את תפריט Chrome ולוחצים על 'מעקב'.</translation> <translation id="5883855034004058011">האימות הביומטרי נכשל יותר מדי פעמים. צריך לנעול את המכשיר ולבטל את הנעילה שלו כדי לנסות שוב.</translation> <translation id="5885378508678660271">התראות <ph name="SEPARATOR" /> Chrome הסיר את ההרשאות האלה כי האתר הזה מסוכן</translation> <translation id="5895834791314695851">יכול להיות שהסיסמאות יפסיקו לפעול במכשיר הזה בקרוב. כדי להמשיך להשתמש בסיסמאות, צריך לעדכן את Google Play Services. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> @@ -1075,7 +1075,7 @@ <translation id="59577092665511740">בחירת חשבון.</translation> <translation id="5958275228015807058">הקבצים והדפים שלך נמצאים ב'הורדות'</translation> <translation id="5958994127112619898">דף פשוט יותר</translation> -<translation id="5962718611393537961">יש להקיש כדי לכווץ</translation> +<translation id="5962718611393537961">יש ללחוץ כדי לכווץ</translation> <translation id="5964180026566797835">לא ניתן לבדוק את הסיסמאות</translation> <translation id="5964869237734432770">הפסקה של תיאורי התמונות</translation> <translation id="5977976211062815271">במכשיר הזה</translation> @@ -1322,7 +1322,7 @@ <translation id="6937524809504266803">התאמה אישית וקישור</translation> <translation id="6937876069006524083">כינוי (אופציונלי)</translation> <translation id="6942665639005891494">ניתן תמיד לשנות את מיקום ברירת המחדל להורדות דרך האפשרות 'הגדרות' בתפריט</translation> -<translation id="694267552845942083">מתבצעת עכשיו התאמה אישית של הגדרות הסנכרון. כדי להשלים את הפעלת הסנכרון יש להקיש על הלחצן 'אישור', קרוב לתחתית המסך. ניווט למעלה</translation> +<translation id="694267552845942083">מתבצעת עכשיו התאמה אישית של הגדרות הסנכרון. כדי להשלים את הפעלת הסנכרון יש ללחוץ על הכפתור 'אישור', קרוב לתחתית המסך. ניווט למעלה</translation> <translation id="6945221475159498467">בחירה</translation> <translation id="6955535239952325894">ההגדרה הזו מושבתת בדפדפנים מנוהלים</translation> <translation id="6963766334940102469">מחיקת סימניות</translation> @@ -1401,7 +1401,7 @@ <translation id="7304072650267745798">במכשיר Android עשויה להופיע הגדרה דומה. אם ההגדרה הזו מופעלת ב-Chrome ובמכשיר Android, חברות עשויות לקבל הרשאות למדוד את רמת האפקטיביות של המודעות שלהן באתרים שבהם מבקרים ובאפליקציות שבהן משתמשים.</translation> <translation id="7304806746406660416">{PASSWORDS_COUNT,plural, =1{סיסמה אחת שמורה רק במכשיר הזה. כדי להשתמש בה במכשירים אחרים, עליך לשמור אותה בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}one{# סיסמאות שמורות רק במכשיר הזה. כדי להשתמש בהן במכשירים אחרים, צריך לשמור אותן בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}two{# סיסמאות שמורות רק במכשיר הזה. כדי להשתמש בהן במכשירים אחרים, צריך לשמור אותן בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}other{# סיסמאות שמורות רק במכשיר הזה. כדי להשתמש בהן במכשירים אחרים, צריך לשמור אותן בחשבון Google עם הכתובת <ph name="ACCOUNT_EMAIL" />.}}</translation> <translation id="7304873321153398381">אין חיבור לאינטרנט. ל-Chrome אין אפשרות לבדוק את הסיסמאות שלך.</translation> -<translation id="7313188324932846546">יש להקיש כדי להגדיר סנכרון</translation> +<translation id="7313188324932846546">יש ללחוץ כדי להגדיר סנכרון</translation> <translation id="7324354302972299151">שליחה של בקשת Do Not Track</translation> <translation id="7333041109965360609">ביטלת את ההרשמה לקבלת התראות</translation> <translation id="7336259382292148213">נראה שהכול בסדר בהתראות</translation> @@ -1650,7 +1650,7 @@ <translation id="8378850197701296741">יש לך סימניות, היסטוריה והגדרות אחרות מהחשבון <ph name="FROM_ACCOUNT" />.</translation> <translation id="8387617938027387193">אימות הזהות שלך</translation> <translation id="8393700583063109961">שליחת הודעה</translation> -<translation id="8398389123831319859">כדי לעבור למצב פרטי, מקישים הקשה כפולה ולוחצים לחיצה ארוכה</translation> +<translation id="8398389123831319859">כדי לעבור למצב פרטי, לוחצים לחיצה כפולה ולוחצים לחיצה ארוכה</translation> <translation id="8402673309244746971">מעבר אל הפיד 'במעקב'</translation> <translation id="8413126021676339697">להצגת ההיסטוריה המלאה</translation> <translation id="8413795581997394485">הגנה מפני אתרים, הורדות ותוספים שידועים כמסוכנים. כשמבקרים באתר מסוים, Chrome שולח ל-Google קטע קוד מעורפל מכתובת ה-URL דרך שרת פרטיות שמסתיר את כתובת ה-IP. אם האתר פועל באופן שמעורר חשד, נשלחות גם כתובות URL מלאות וקטעי תוכן מדפים.</translation> @@ -1741,7 +1741,7 @@ <translation id="8766529642647037772">רוצה ליצור קישור מודגש כמו זה שמופיע כאן?</translation> <translation id="8788265440806329501">היסטוריית הניווט סגורה</translation> <translation id="8788968922598763114">פתיחה מחדש של הכרטיסייה האחרונה שנסגרה</translation> -<translation id="8790193082819560975">צריך להקיש כדי לחפש אפשרויות קנייה של המוצר בכרטיסייה חדשה.</translation> +<translation id="8790193082819560975">צריך ללחוץ כדי לחפש אפשרויות קנייה של המוצר בכרטיסייה חדשה.</translation> <translation id="879027982257117598">לדוגמה, אם ביקרת באתר למכירת נעלי ריצה למרחקים ארוכים, האתר עשוי להעריך שריצות מרתון מעניינות אותך. לאחר מכן, יכול להיות שבביקור באתר שונה תוצג מודעה לנעלי ריצה לפי הצעה מהאתר הראשון.</translation> <translation id="8798449543960971550">נקראו</translation> <translation id="8803526663383843427">במצב מופעל</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb index 705bb45..a13a393 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -1235,7 +1235,7 @@ <translation id="6627583120233659107">폴더 수정</translation> <translation id="6633067410344541938">시크릿 모드 잠금 해제</translation> <translation id="6636623428211296678">아래에서 더 많은 설정을 살펴보거나 지금 완료하세요</translation> -<translation id="6637100877383020115">앱 개선을 위해 Chrome에서 사용 및 비정상 종료 데이터를 Google에 전송합니다. <ph name="BEGIN_UMA_LINK" />관리<ph name="END_UMA_LINK" /></translation> +<translation id="6637100877383020115">앱 개선을 위해 Chrome에서 사용 및 비정상 종료 데이터를 Google에 전송합니다. <ph name="BEGIN_UMA_LINK" />관리하기<ph name="END_UMA_LINK" /></translation> <translation id="6640207029842583248">항상 차단</translation> <translation id="6641780377503683465"><ph name="INTEREST" /> 삭제</translation> <translation id="6645629752388991326">이 기기를 보안 키로 사용하여 로그인할 수 있는 기기를 제어합니다.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb index f844bcfb..f293707 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -117,7 +117,7 @@ <translation id="1436784010935106834">已删除</translation> <translation id="1437543266176261764">正在“<ph name="APP_NAME" />”应用内运行</translation> <translation id="1448440926884431741">在“书签”页面中整理您跟踪的商品</translation> -<translation id="1460751212339734034">节省时间,减少输入操作</translation> +<translation id="1460751212339734034">减少输入,节省时间</translation> <translation id="1466383950273130737">选择要让 Chrome 采用的语言</translation> <translation id="1477626028522505441">未能成功下载 <ph name="FILE_NAME" />,因为服务器出现了问题。</translation> <translation id="147982357559798527">已更改</translation>
diff --git a/chrome/browser/ui/ash/arc/arc_app_dialog_view/arc_app_dialog_view.cc b/chrome/browser/ui/ash/arc/arc_app_dialog_view/arc_app_dialog_view.cc index 5f19c74..a857b4a 100644 --- a/chrome/browser/ui/ash/arc/arc_app_dialog_view/arc_app_dialog_view.cc +++ b/chrome/browser/ui/ash/arc/arc_app_dialog_view/arc_app_dialog_view.cc
@@ -196,7 +196,7 @@ DCHECK_EQ(image.width(), kIconSourceSize); DCHECK_EQ(image.height(), kIconSourceSize); icon_view_->SetImageSize(image.size()); - icon_view_->SetImage(image); + icon_view_->SetImage(ui::ImageModel::FromImageSkia(image)); } BEGIN_METADATA(ArcAppDialogView)
diff --git a/chrome/browser/ui/ash/arc/arc_data_removal_dialog_view/arc_data_removal_dialog_view.cc b/chrome/browser/ui/ash/arc/arc_data_removal_dialog_view/arc_data_removal_dialog_view.cc index c5b62bd..c13a635 100644 --- a/chrome/browser/ui/ash/arc/arc_data_removal_dialog_view/arc_data_removal_dialog_view.cc +++ b/chrome/browser/ui/ash/arc/arc_data_removal_dialog_view/arc_data_removal_dialog_view.cc
@@ -144,7 +144,7 @@ DCHECK_EQ(image.width(), kArcAppIconSize); DCHECK_EQ(image.height(), kArcAppIconSize); icon_view_->SetImageSize(image.size()); - icon_view_->SetImage(image); + icon_view_->SetImage(ui::ImageModel::FromImageSkia(image)); } void DataRemovalConfirmationDialog::OnArcPlayStoreEnabledChanged(bool enabled) {
diff --git a/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc b/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc index 5944dbc..02af258 100644 --- a/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc +++ b/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc
@@ -67,7 +67,7 @@ image_ = AddChildView(std::make_unique<views::ImageView>()); if (icon.has_value()) { - image_->SetImage(icon.value()); + image_->SetImage(ui::ImageModel::FromImageSkia(icon.value())); vector_icon_ = nullptr; } image_->SetCanProcessEventsWithinSubtree(false); @@ -140,7 +140,7 @@ gfx::ImageSkia circle_icon_with_shadow = gfx::ImageSkiaOperations::CreateImageWithDropShadow(circle_icon, shadow_values); - image_->SetImage(circle_icon_with_shadow); + image_->SetImage(ui::ImageModel::FromImageSkia(circle_icon_with_shadow)); } void SharesheetTargetButton::SetLabelProperties(views::Label* label) {
diff --git a/chrome/browser/ui/autofill/address_bubbles_controller.cc b/chrome/browser/ui/autofill/address_bubbles_controller.cc index 332c465..2da0447 100644 --- a/chrome/browser/ui/autofill/address_bubbles_controller.cc +++ b/chrome/browser/ui/autofill/address_bubbles_controller.cc
@@ -262,10 +262,7 @@ Browser* browser = chrome::FindBrowserWithTab(web_contents()); // Verify if user is eligible for iOS promo, and attempt showing if they are. - ios_promos_utils::VerifyIOSPromoEligibility( - IOSPromoType::kAddress, browser->profile(), - BrowserView::GetBrowserViewForBrowser(browser) - ->toolbar_button_provider()); + ios_promos_utils::VerifyIOSPromoEligibility(IOSPromoType::kAddress, browser); } void AddressBubblesController::MaybeShowSignInPromo(
diff --git a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc index 1474ccb..04486ad 100644 --- a/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc +++ b/chrome/browser/ui/autofill/payments/chrome_payments_autofill_client.cc
@@ -400,8 +400,6 @@ base::OnceClosure promo_not_shown_callback = controller->GetShowConfirmationForCardSuccessfullySavedCallback(); - Profile* profile = - Profile::FromBrowserContext(web_contents()->GetBrowserContext()); Browser* browser = chrome::FindBrowserWithTab(web_contents()); if (!browser) { @@ -409,12 +407,8 @@ return; } - BrowserView* browser_view = - BrowserView::GetBrowserViewForBrowser(browser); - ios_promos_utils::MaybeOverrideCardConfirmationBubbleWithIOSPaymentPromo( - profile, browser_view->toolbar_button_provider(), - std::move(promo_will_show_callback), + browser, std::move(promo_will_show_callback), std::move(promo_not_shown_callback)); return;
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc index ec7ec8b..e4e871a 100644 --- a/chrome/browser/ui/browser_command_controller.cc +++ b/chrome/browser/ui/browser_command_controller.cc
@@ -1433,8 +1433,7 @@ command_updater_.UpdateCommandEnabled(IDC_SET_BROWSER_AS_DEFAULT, true); // Safety Hub commands. - command_updater_.UpdateCommandEnabled( - IDC_OPEN_SAFETY_HUB, base::FeatureList::IsEnabled(features::kSafetyHub)); + command_updater_.UpdateCommandEnabled(IDC_OPEN_SAFETY_HUB, true); command_updater_.UpdateCommandEnabled(IDC_WINDOW_MUTE_SITE, normal_window); command_updater_.UpdateCommandEnabled(IDC_WINDOW_PIN_TAB, normal_window);
diff --git a/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc b/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc index 3ae6b02a..d8ab8eb 100644 --- a/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc +++ b/chrome/browser/ui/omnibox/omnibox_pedal_implementations.cc
@@ -385,33 +385,9 @@ class OmniboxPedalRunChromeSafetyCheck : public OmniboxPedal { public: OmniboxPedalRunChromeSafetyCheck() - : OmniboxPedal( - OmniboxPedalId::RUN_CHROME_SAFETY_CHECK, -#if BUILDFLAG(IS_ANDROID) - LabelStrings( - IDS_ANDROID_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT, - IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUGGESTION_CONTENTS, - IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUFFIX, - IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK), -#else - LabelStrings( - IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT, - IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUGGESTION_CONTENTS, - IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUFFIX, - IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK), -#endif // BUILDFLAG(IS_ANDROID) - GURL("chrome://settings/safetyCheck?activateSafetyCheck")) { - // If SafetyHub flag is enabled, the label strings and url should be - // updated. - if (base::FeatureList::IsEnabled(features::kSafetyHub)) { - strings_ = LabelStrings( - IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_HINT, - IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_SUGGESTION_CONTENTS, - IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_SUFFIX, - IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2); - url_ = GURL("chrome://settings/safetyCheck"); - } - } + : OmniboxPedal(OmniboxPedalId::RUN_CHROME_SAFETY_CHECK, + GetLabelStrings(), + GetUrl()) {} std::vector<SynonymGroupSpec> SpecifySynonymGroups( bool locale_is_english) const override { @@ -451,6 +427,40 @@ protected: ~OmniboxPedalRunChromeSafetyCheck() override = default; + + LabelStrings GetLabelStrings() { +#if BUILDFLAG(IS_ANDROID) + if (base::FeatureList::IsEnabled(features::kSafetyHub)) { + return LabelStrings( + IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_HINT, + IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_SUGGESTION_CONTENTS, + IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_SUFFIX, + IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2); + } + return LabelStrings( + IDS_ANDROID_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT, + IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUGGESTION_CONTENTS, + IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUFFIX, + IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK); +#else // BUILDFLAG(IS_ANDROID) + return LabelStrings( + IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_HINT, + IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_SUGGESTION_CONTENTS, + IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2_SUFFIX, + IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_V2); +#endif // BUILDFLAG(IS_ANDROID) + } + + GURL GetUrl() { +#if BUILDFLAG(IS_ANDROID) + if (base::FeatureList::IsEnabled(features::kSafetyHub)) { + return GURL("chrome://settings/safetyCheck"); + } + return GURL("chrome://settings/safetyCheck?activateSafetyCheck"); +#else // BUILDFLAG(IS_ANDROID) + return GURL("chrome://settings/safetyCheck"); +#endif // BUILDFLAG(IS_ANDROID) + } }; // =============================================================================
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index 93eaf26..afba94dc 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -1115,6 +1115,8 @@ } void ManagePasswordsUIController::MaybeShowIOSPasswordPromo() { +// TODO(crbug.com/339262105): Extract out of Chrome branding when the legacy +// promo is cleaned up. #if BUILDFLAG(GOOGLE_CHROME_BRANDING) Browser* browser = chrome::FindBrowserWithTab(web_contents()); if (!browser) { @@ -1123,10 +1125,8 @@ if (base::FeatureList::IsEnabled( features::kIOSPromoRefreshedPasswordBubble)) { - ios_promos_utils::VerifyIOSPromoEligibility( - IOSPromoType::kPassword, browser->profile(), - BrowserView::GetBrowserViewForBrowser(browser) - ->toolbar_button_provider()); + ios_promos_utils::VerifyIOSPromoEligibility(IOSPromoType::kPassword, + browser); } else { // TODO(crbug.com/339262105): Clean up the old password promo methods after // the generic promo launch.
diff --git a/chrome/browser/ui/promos/ios_promos_utils.cc b/chrome/browser/ui/promos/ios_promos_utils.cc index 0107bf8..0297d65 100644 --- a/chrome/browser/ui/promos/ios_promos_utils.cc +++ b/chrome/browser/ui/promos/ios_promos_utils.cc
@@ -10,7 +10,9 @@ #include "chrome/browser/promos/promos_utils.h" #include "chrome/browser/segmentation_platform/segmentation_platform_service_factory.h" #include "chrome/browser/sync/sync_service_factory.h" +#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/toolbar_button_provider.h" #include "chrome/browser/ui/views/promos/ios_promo_bubble.h" #include "components/feature_engagement/public/feature_constants.h" @@ -66,26 +68,27 @@ // should be shown the promo. If yes, attempts to show the promo. void OnIOSPromoClassificationResult( IOSPromoType promo_type, - base::WeakPtr<Profile> profile, - ToolbarButtonProvider* toolbar_button_provider, + base::WeakPtr<Browser> browser, std::optional<base::OnceClosure> promo_will_be_shown_callback, std::optional<base::OnceClosure> promo_not_shown_callback, const segmentation_platform::ClassificationResult& result) { - Profile* profile_ptr = profile.get(); - if (!profile_ptr) { + if (!browser) { RunCallback(std::move(promo_not_shown_callback)); return; } feature_engagement::Tracker* tracker = - feature_engagement::TrackerFactory::GetForBrowserContext(profile_ptr); + feature_engagement::TrackerFactory::GetForBrowserContext( + browser->profile()); if (promos_utils::UserNotClassifiedAsMobileDeviceSwitcher(result) && tracker->ShouldTriggerHelpUI( promos_utils::GetIOSDesktopPromoFeatureEngagement(promo_type))) { RunCallback(std::move(promo_will_be_shown_callback)); - promos_utils::IOSDesktopPromoShown(profile_ptr, promo_type); - ShowIOSDesktopPromoBubble(promo_type, profile_ptr, toolbar_button_provider); + promos_utils::IOSDesktopPromoShown(browser->profile(), promo_type); + ShowIOSDesktopPromoBubble( + promo_type, browser->profile(), + browser->GetBrowserView().toolbar_button_provider()); return; } @@ -94,19 +97,18 @@ void VerifyIOSPromoEligibilityCriteriaAsync( const IOSPromoType& promo_type, - Profile*& profile, - ToolbarButtonProvider*& toolbar_button_provider, + Browser* browser, std::optional<base::OnceClosure> promo_will_be_shown_callback = std::nullopt, std::optional<base::OnceClosure> promo_not_shown_callback = std::nullopt) { const syncer::SyncService* sync_service = - SyncServiceFactory::GetForProfile(profile); + SyncServiceFactory::GetForProfile(browser->profile()); // Verify that the user is currently syncing their preferences, hasn't // exceeded their impression limit, is not in the cooldown period or has not // opted-out from seeing the promo. if (sync_service && promos_utils::ShouldShowIOSDesktopPromo( - profile, sync_service, promo_type)) { + browser->profile(), sync_service, promo_type)) { auto input_context = base::MakeRefCounted<segmentation_platform::InputContext>(); input_context->metadata_args.emplace( @@ -121,11 +123,11 @@ // Get segmentation platform classification results and pass callback. segmentation_platform::SegmentationPlatformServiceFactory::GetForProfile( - profile) + browser->profile()) ->GetClassificationResult( segmentation_platform::kDeviceSwitcherKey, options, input_context, base::BindOnce(&OnIOSPromoClassificationResult, promo_type, - profile->GetWeakPtr(), toolbar_button_provider, + browser->AsWeakPtr(), std::move(promo_will_be_shown_callback), std::move(promo_not_shown_callback))); return; @@ -138,21 +140,16 @@ namespace ios_promos_utils { -void VerifyIOSPromoEligibility(IOSPromoType promo_type, - Profile* profile, - ToolbarButtonProvider* toolbar_button_provider) { - VerifyIOSPromoEligibilityCriteriaAsync(promo_type, profile, - toolbar_button_provider); +void VerifyIOSPromoEligibility(IOSPromoType promo_type, Browser* browser) { + VerifyIOSPromoEligibilityCriteriaAsync(promo_type, browser); } void MaybeOverrideCardConfirmationBubbleWithIOSPaymentPromo( - Profile* profile, - ToolbarButtonProvider* toolbar_button_provider, + Browser* browser, base::OnceClosure promo_will_be_shown_callback, base::OnceClosure promo_not_shown_callback) { VerifyIOSPromoEligibilityCriteriaAsync( - IOSPromoType::kPayment, profile, toolbar_button_provider, - std::move(promo_will_be_shown_callback), + IOSPromoType::kPayment, browser, std::move(promo_will_be_shown_callback), std::move(promo_not_shown_callback)); }
diff --git a/chrome/browser/ui/promos/ios_promos_utils.h b/chrome/browser/ui/promos/ios_promos_utils.h index 530ef99..ad36f0ea 100644 --- a/chrome/browser/ui/promos/ios_promos_utils.h +++ b/chrome/browser/ui/promos/ios_promos_utils.h
@@ -7,8 +7,7 @@ #include "base/functional/callback_forward.h" -class Profile; -class ToolbarButtonProvider; +class Browser; enum class IOSPromoType; @@ -18,17 +17,14 @@ // segmentation platform and then asynchronously calls // `OnIOSPromoClassificationResult` to determine whether or not the user should // be shown the promo. -void VerifyIOSPromoEligibility(IOSPromoType promo_type, - Profile* profile, - ToolbarButtonProvider* toolbar_button_provider); +void VerifyIOSPromoEligibility(IOSPromoType promo_type, Browser* browser); // Checks if the user should be shown the iOS Payment promo and attempts to show // it. This should only be called if a card was successfully uploaded and // the VCN flow callback is null. Calls the correct callback depending on // whether the promo will be shown or not. void MaybeOverrideCardConfirmationBubbleWithIOSPaymentPromo( - Profile* profile, - ToolbarButtonProvider* toolbar_button_provider, + Browser* browser, base::OnceClosure promo_shown_callback, base::OnceClosure promo_not_shown_callback);
diff --git a/chrome/browser/ui/promos/ios_promos_utils_browsertest.cc b/chrome/browser/ui/promos/ios_promos_utils_browsertest.cc index eddebb09..806d8a7 100644 --- a/chrome/browser/ui/promos/ios_promos_utils_browsertest.cc +++ b/chrome/browser/ui/promos/ios_promos_utils_browsertest.cc
@@ -82,26 +82,20 @@ IN_PROC_BROWSER_TEST_F(IOSPromosUtilsTest, InvokeUi_passwords) { ASSERT_TRUE(sync_harness()->SetupSync()); - ios_promos_utils::VerifyIOSPromoEligibility( - IOSPromoType::kPassword, browser()->profile(), - BrowserView::GetBrowserViewForBrowser(browser()) - ->toolbar_button_provider()); + ios_promos_utils::VerifyIOSPromoEligibility(IOSPromoType::kPassword, + browser()); } IN_PROC_BROWSER_TEST_F(IOSPromosUtilsTest, InvokeUi_addresses) { ASSERT_TRUE(sync_harness()->SetupSync()); - ios_promos_utils::VerifyIOSPromoEligibility( - IOSPromoType::kAddress, browser()->profile(), - BrowserView::GetBrowserViewForBrowser(browser()) - ->toolbar_button_provider()); + ios_promos_utils::VerifyIOSPromoEligibility(IOSPromoType::kAddress, + browser()); } IN_PROC_BROWSER_TEST_F(IOSPromosUtilsTest, InvokeUi_payments) { ASSERT_TRUE(sync_harness()->SetupSync()); - ios_promos_utils::VerifyIOSPromoEligibility( - IOSPromoType::kPayment, browser()->profile(), - BrowserView::GetBrowserViewForBrowser(browser()) - ->toolbar_button_provider()); + ios_promos_utils::VerifyIOSPromoEligibility(IOSPromoType::kPayment, + browser()); }
diff --git a/chrome/browser/ui/safety_hub/notification_permission_review_service.cc b/chrome/browser/ui/safety_hub/notification_permission_review_service.cc index 10554c15..55d5873 100644 --- a/chrome/browser/ui/safety_hub/notification_permission_review_service.cc +++ b/chrome/browser/ui/safety_hub/notification_permission_review_service.cc
@@ -199,11 +199,13 @@ : engagement_service_(engagement_service), hcsm_(hcsm) { content_settings_observation_.Observe(hcsm); +#if BUILDFLAG(IS_ANDROID) if (!base::FeatureList::IsEnabled(features::kSafetyHub)) { return; } +#endif // BUILDFLAG(IS_ANDROID) - // TODO(crbug.com/40267370): Because there is only an UI thread for this + // TODO(crbug.com/40267370): Because there is only a UI thread for this // service, calling both |StartRepeatedUpdates()| and // |InitializeLatestResult()| will result in the result being calculated twice // when the service starts. When redesigning SafetyHubService, that should be
diff --git a/chrome/browser/ui/safety_hub/notification_permission_review_service_factory.cc b/chrome/browser/ui/safety_hub/notification_permission_review_service_factory.cc index 9955914..91aded83 100644 --- a/chrome/browser/ui/safety_hub/notification_permission_review_service_factory.cc +++ b/chrome/browser/ui/safety_hub/notification_permission_review_service_factory.cc
@@ -58,7 +58,6 @@ #if BUILDFLAG(IS_ANDROID) return base::FeatureList::IsEnabled(features::kSafetyHub); #else // BUILDFLAG(IS_ANDROID) - return base::FeatureList::IsEnabled(features::kSafetyHub) && - base::FeatureList::IsEnabled(features::kSafetyHubServicesOnStartUp); + return base::FeatureList::IsEnabled(features::kSafetyHubServicesOnStartUp); #endif // BUILDFLAG(IS_ANDROID) }
diff --git a/chrome/browser/ui/safety_hub/notification_permission_review_service_unittest.cc b/chrome/browser/ui/safety_hub/notification_permission_review_service_unittest.cc index 9d2d4707..d901f626 100644 --- a/chrome/browser/ui/safety_hub/notification_permission_review_service_unittest.cc +++ b/chrome/browser/ui/safety_hub/notification_permission_review_service_unittest.cc
@@ -365,9 +365,6 @@ } TEST_F(NotificationPermissionReviewServiceTest, UpdateAsync) { - base::test::ScopedFeatureList scoped_feature; - scoped_feature.InitAndEnableFeature(features::kSafetyHub); - auto* service = NotificationPermissionsReviewServiceFactory::GetForProfile(profile()); @@ -400,9 +397,6 @@ } TEST_F(NotificationPermissionReviewServiceTest, LatestResultInSync) { - base::test::ScopedFeatureList scoped_feature; - scoped_feature.InitAndEnableFeature(features::kSafetyHub); - // Create mock notifications before the service is started. CreateMockNotificationPermissionsForReview();
diff --git a/chrome/browser/ui/safety_hub/password_status_check_service_factory.cc b/chrome/browser/ui/safety_hub/password_status_check_service_factory.cc index 2f62ebf..3cecc67 100644 --- a/chrome/browser/ui/safety_hub/password_status_check_service_factory.cc +++ b/chrome/browser/ui/safety_hub/password_status_check_service_factory.cc
@@ -21,9 +21,6 @@ // static PasswordStatusCheckService* PasswordStatusCheckServiceFactory::GetForProfile( Profile* profile) { - if (!base::FeatureList::IsEnabled(features::kSafetyHub)) { - return nullptr; - } return static_cast<PasswordStatusCheckService*>( GetInstance()->GetServiceForBrowserContext(profile, true)); } @@ -53,10 +50,6 @@ std::unique_ptr<KeyedService> PasswordStatusCheckServiceFactory::BuildServiceInstanceForBrowserContext( content::BrowserContext* context) const { - if (!base::FeatureList::IsEnabled(features::kSafetyHub)) { - return nullptr; - } - Profile* profile = Profile::FromBrowserContext(context); password_manager::PasswordStoreInterface* store = ProfilePasswordStoreFactory::GetForProfile( @@ -74,6 +67,5 @@ bool PasswordStatusCheckServiceFactory::ServiceIsCreatedWithBrowserContext() const { - return base::FeatureList::IsEnabled(features::kSafetyHub) && - base::FeatureList::IsEnabled(features::kSafetyHubServicesOnStartUp); + return base::FeatureList::IsEnabled(features::kSafetyHubServicesOnStartUp); }
diff --git a/chrome/browser/ui/safety_hub/safety_hub_hats_service_unittest.cc b/chrome/browser/ui/safety_hub/safety_hub_hats_service_unittest.cc index a3e6073..71df39ac 100644 --- a/chrome/browser/ui/safety_hub/safety_hub_hats_service_unittest.cc +++ b/chrome/browser/ui/safety_hub/safety_hub_hats_service_unittest.cc
@@ -31,9 +31,6 @@ }; TEST_F(SafetyHubHatsServiceTest, SafetyHubInteractionState) { - base::test::ScopedFeatureList scoped_feature; - scoped_feature.InitAndEnableFeature(features::kSafetyHub); - // A profile password store is required to launch the password status check // service, which is used to get the password card data, which is part of the // retrieved PSD.
diff --git a/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc b/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc index 528c56e..21cedf7d 100644 --- a/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc +++ b/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc
@@ -350,6 +350,7 @@ pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>(); pref_change_registrar_->Init(prefs); +#if BUILDFLAG(IS_ANDROID) if (base::FeatureList::IsEnabled(features::kSafetyHub)) { pref_change_registrar_->Add( safety_hub_prefs::kUnusedSitePermissionsRevocationEnabled, @@ -357,6 +358,13 @@ OnPermissionsAutorevocationControlChanged, base::Unretained(this))); } +#else // BUILDFLAG(IS_ANDROID) + pref_change_registrar_->Add( + safety_hub_prefs::kUnusedSitePermissionsRevocationEnabled, + base::BindRepeating(&UnusedSitePermissionsService:: + OnPermissionsAutorevocationControlChanged, + base::Unretained(this))); +#endif // BUILDFLAG(IS_ANDROID) if (base::FeatureList::IsEnabled( safe_browsing::kSafetyHubAbusiveNotificationRevocation)) {
diff --git a/chrome/browser/ui/safety_hub/unused_site_permissions_service_factory.cc b/chrome/browser/ui/safety_hub/unused_site_permissions_service_factory.cc index 088f71c..fa058ebe 100644 --- a/chrome/browser/ui/safety_hub/unused_site_permissions_service_factory.cc +++ b/chrome/browser/ui/safety_hub/unused_site_permissions_service_factory.cc
@@ -56,7 +56,6 @@ base::FeatureList::IsEnabled( safe_browsing::kSafetyHubAbusiveNotificationRevocation); #else // BUILDFLAG(IS_ANDROID) - return base::FeatureList::IsEnabled(features::kSafetyHub) && - base::FeatureList::IsEnabled(features::kSafetyHubServicesOnStartUp); + return base::FeatureList::IsEnabled(features::kSafetyHubServicesOnStartUp); #endif // BUILDFLAG(IS_ANDROID) }
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc index b10f798..0bdd43a 100644 --- a/chrome/browser/ui/toolbar/app_menu_model.cc +++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -2075,11 +2075,6 @@ } bool AppMenuModel::AddSafetyHubMenuItem() { - // TODO(crbug.com/40267370): Remove when the service is only created when the - // feature is enabled. - if (!base::FeatureList::IsEnabled(features::kSafetyHub)) { - return false; - } auto* safety_hub_menu_notification_service = SafetyHubMenuNotificationServiceFactory::GetForProfile( browser_->profile());
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc index 4291908a..046f645 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -9,6 +9,7 @@ #include <algorithm> #include <limits> #include <memory> +#include <numeric> #include <optional> #include <string> #include <utility> @@ -503,13 +504,14 @@ bookmark_bar_state_ = state; } -const BookmarkNode* BookmarkBarView::GetNodeForButtonAtModelIndex( +std::optional<BookmarkParentFolder> +BookmarkBarView::GetBookmarkFolderForButtonAtLocation( const gfx::Point& loc, size_t* model_start_index) { *model_start_index = 0; if (loc.x() < 0 || loc.x() >= width() || loc.y() < 0 || loc.y() >= height()) { - return nullptr; + return std::nullopt; } gfx::Point adjusted_loc(GetMirroredXInView(loc.x()), loc.y()); @@ -517,20 +519,19 @@ // Check the managed button first. if (managed_bookmarks_button_->GetVisible() && managed_bookmarks_button_->bounds().Contains(adjusted_loc)) { - return managed_->managed_node(); + return BookmarkParentFolder::ManagedFolder(); } - // TODO: add logic to get saved groups node(crbug.com/1223929 and - // crbug.com/1223919) - // Then check the bookmark buttons. - for (size_t i = 0; i < bookmark_buttons_.size(); ++i) { - views::View* child = bookmark_buttons_[i]; + for (const auto& button_and_node : bookmark_buttons_) { + views::View* child = button_and_node.first; if (!child->GetVisible()) { break; } if (child->bounds().Contains(adjusted_loc)) { - return bookmark_model_->bookmark_bar_node()->children()[i].get(); + return button_and_node.second->is_folder() + ? BookmarkParentFolder::FromFolderNode(button_and_node.second) + : std::optional<BookmarkParentFolder>(std::nullopt); } } @@ -538,19 +539,19 @@ if (overflow_button_->GetVisible() && overflow_button_->bounds().Contains(adjusted_loc)) { *model_start_index = first_hidden_node_idx_; - return bookmark_model_->bookmark_bar_node(); + return BookmarkParentFolder::BookmarkBarFolder(); } // And finally the all bookmarks button. if (all_bookmarks_button_->GetVisible() && all_bookmarks_button_->bounds().Contains(adjusted_loc)) { - return bookmark_model_->other_node(); + return BookmarkParentFolder::OtherFolder(); } - return nullptr; + return std::nullopt; } -MenuButton* BookmarkBarView::GetMenuButtonForNode( +MenuButton* BookmarkBarView::GetMenuButtonForFolder( const BookmarkParentFolder& folder) { std::optional<PermanentFolderType> type = folder.as_permanent_folder(); if (type == PermanentFolderType::kManagedNode) { @@ -561,15 +562,14 @@ return overflow_button_; } - // TODO: add logic to handle saved groups node(crbug.com/1223929 and - // crbug.com/1223919) - // Check if direct child of bookmark bar and is a folder. if (const BookmarkNode* node = folder.as_non_permanent_folder(); node && node->is_folder() && node->parent()->type() == BookmarkNode::Type::BOOKMARK_BAR) { - size_t index = GetBookmarkService(browser_)->GetIndexOf(node); - return static_cast<MenuButton*>(bookmark_buttons_[index]); + auto it = base::ranges::find(bookmark_buttons_, node, + &BookmarkButtonAndNode::second); + CHECK(it != bookmark_buttons_.end()); + return static_cast<MenuButton*>(it->first); } return nullptr; @@ -781,32 +781,34 @@ // height of `saved_tab_group_bar_`). saved_tab_group_bar_->overflow_button()->SetPreferredSize( gfx::Size(button_height, button_height)); - // Calculate the save tab group width without any restriction. - int saved_tab_group_max_width = - saved_tab_group_bar_->CalculatePreferredWidthRestrictedBy(INT_MAX); - // Estimate the bookmark buttons width with existing buttons because not - // all the bookmarks have button created. - int estimate_bookmark_buttons_width = 0; - for (views::LabelButton* button : bookmark_buttons_) { - estimate_bookmark_buttons_width += button->GetPreferredSize().width(); - } - int bookmark_count = - bookmark_model_->loaded() - ? bookmark_model_->bookmark_bar_node()->children().size() - : 0; - int button_count = bookmark_buttons_.size(); - if (button_count > 0) { - estimate_bookmark_buttons_width *= - (1.0 * bookmark_count / button_count); - } - estimate_bookmark_buttons_width += - (bookmark_count - 1) * bookmark_bar_button_padding; + // Calculate the save tab group width without any restriction. + int saved_tab_group_max_width = + saved_tab_group_bar_->CalculatePreferredWidthRestrictedBy(INT_MAX); + // Estimate the bookmark buttons width with existing buttons because not + // all the bookmarks have button created. + int estimate_bookmark_buttons_width = std::accumulate( + bookmark_buttons_.begin(), bookmark_buttons_.end(), 0, + [](size_t total, const auto& bookmark_button_and_node) { + return total + + bookmark_button_and_node.first->GetPreferredSize().width(); + }); - saved_tab_groups_bar_available_width = - GetAvailableWidthForSavedTabGroupsBar( - saved_tab_group_max_width, estimate_bookmark_buttons_width, - max_x - x - - saved_tab_groups_separator_view_->GetPreferredSize().width()); + int bookmark_count = + bookmark_model_->loaded() + ? bookmark_model_->bookmark_bar_node()->children().size() + : 0; + int button_count = bookmark_buttons_.size(); + if (button_count > 0) { + estimate_bookmark_buttons_width *= (1.0 * bookmark_count / button_count); + } + estimate_bookmark_buttons_width += + (bookmark_count - 1) * bookmark_bar_button_padding; + + saved_tab_groups_bar_available_width = + GetAvailableWidthForSavedTabGroupsBar( + saved_tab_group_max_width, estimate_bookmark_buttons_width, + max_x - x - + saved_tab_groups_separator_view_->GetPreferredSize().width()); saved_tab_group_bar_width = saved_tab_group_bar_->CalculatePreferredWidthRestrictedBy( @@ -859,7 +861,7 @@ i); button_count = bookmark_buttons_.size(); } - views::View* child = bookmark_buttons_[i]; + views::View* child = bookmark_buttons_[i].first; // If the child view can fit in the bookmarks comfortably, make it visible // and set its bounds. @@ -879,13 +881,15 @@ bookmark_model_->loaded() && (bookmark_model_->bookmark_bar_node()->children().size() > bookmark_buttons_.size() || - (!bookmark_buttons_.empty() && !bookmark_buttons_.back()->GetVisible())); + (!bookmark_buttons_.empty() && + !bookmark_buttons_.back().first->GetVisible())); // Set the visibility of the tab group separator if there are groups and // bookmarks. if (saved_tab_groups_separator_view_) { const bool bookmarks_button_visible = - !bookmark_buttons_.empty() && bookmark_buttons_.front()->GetVisible(); + !bookmark_buttons_.empty() && + bookmark_buttons_.front().first->GetVisible(); saved_tab_groups_separator_view_->SetVisible( saved_tab_group_bar_width > 0 && (bookmarks_button_visible || show_bookmarks_overflow)); @@ -948,7 +952,7 @@ int h = height(); if (index == bookmark_buttons_.size()) { if (index != 0) { - x = bookmark_buttons_[index - 1]->bounds().right(); + x = bookmark_buttons_[index - 1].first->bounds().right(); } else if (managed_bookmarks_button_->GetVisible()) { x = managed_bookmarks_button_->bounds().right(); } else if (apps_page_shortcut_->GetVisible()) { @@ -957,11 +961,12 @@ x = GetLeadingMargin(); } } else { - x = bookmark_buttons_[index]->x(); + x = bookmark_buttons_[index].first->x(); } - if (!bookmark_buttons_.empty() && bookmark_buttons_.front()->GetVisible()) { - y = bookmark_buttons_.front()->y(); - h = bookmark_buttons_.front()->height(); + if (!bookmark_buttons_.empty() && + bookmark_buttons_.front().first->GetVisible()) { + y = bookmark_buttons_.front().first->y(); + h = bookmark_buttons_.front().first->height(); } // Since the drop indicator is painted directly onto the canvas, we must @@ -1058,9 +1063,8 @@ } else if (location.button_type == DROP_OVERFLOW) { node = bookmark_model_->bookmark_bar_node(); } else { - node = bookmark_model_->bookmark_bar_node() - ->children()[location.index.value()] - .get(); + CHECK_LE(*location.index, bookmark_buttons_.size()); + node = bookmark_buttons_[location.index.value()].second; CHECK(node->is_folder()); } StartShowFolderDropMenuTimer(BookmarkParentFolder::FromFolderNode(node)); @@ -1191,7 +1195,8 @@ // mouse/touch-device, the location will update accordingly. InvalidateDrop(); - bool needs_layout_and_paint = BookmarkNodeRemovedImpl(old_parent, old_index); + bool needs_layout_and_paint = + BookmarkNodeRemovedImpl(new_parent->children()[new_index].get()); if (BookmarkNodeAddedImpl(new_parent, new_index)) { needs_layout_and_paint = true; } @@ -1230,8 +1235,7 @@ bookmark_menu_->Cancel(); } } - - if (BookmarkNodeRemovedImpl(parent, old_index)) { + if (BookmarkNodeRemovedImpl(node)) { LayoutAndPaint(); } @@ -1421,10 +1425,8 @@ // the user clicked on the bookmark bar background. size_t bookmark_button_index = GetIndexForButton(source); DCHECK_NE(static_cast<size_t>(-1), bookmark_button_index); - DCHECK_LT(bookmark_button_index, bookmark_buttons_.size()); - const BookmarkNode* node = bookmark_model_->bookmark_bar_node() - ->children()[bookmark_button_index] - .get(); + CHECK_LT(bookmark_button_index, bookmark_buttons_.size()); + const BookmarkNode* node = bookmark_buttons_[bookmark_button_index].second; nodes.push_back(node); } else { nodes.push_back(bookmark_model_->bookmark_bar_node()); @@ -1544,8 +1546,10 @@ } size_t BookmarkBarView::GetFirstHiddenNodeIndex() const { - const auto i = base::ranges::find_if_not(bookmark_buttons_, - &views::LabelButton::GetVisible); + const auto i = base::ranges::find_if_not( + bookmark_buttons_, [](const BookmarkButtonAndNode& pair) { + return pair.first->GetVisible(); + }); return i - bookmark_buttons_.cbegin(); } @@ -1620,7 +1624,8 @@ } ConfigureButton(node, button.get()); size_t index = node->parent()->GetIndexOf(node).value(); - bookmark_buttons_.insert(bookmark_buttons_.cbegin() + index, button.get()); + bookmark_buttons_.insert(bookmark_buttons_.cbegin() + index, + {button.get(), node}); button_visibility_changed_callbacks_[button.get()] = button->AddVisibleChangedCallback( base::BindRepeating(&BookmarkBarView::UpdateFirstHiddenNodeIndex, @@ -1631,7 +1636,7 @@ void BookmarkBarView::RemoveBookmarkButton(size_t index) { CHECK_LE(index, bookmark_buttons_.size()); - views::LabelButton* button = bookmark_buttons_[index]; + views::LabelButton* button = bookmark_buttons_[index].first; bookmark_buttons_.erase(bookmark_buttons_.cbegin() + index); // Set not visible before removing to advance focus if needed, and to ensure // that the overflow menu is updated. @@ -1763,21 +1768,16 @@ return index == bookmark_buttons_.size(); } -bool BookmarkBarView::BookmarkNodeRemovedImpl(const BookmarkNode* parent, - size_t index) { +bool BookmarkBarView::BookmarkNodeRemovedImpl( + const bookmarks::BookmarkNode* node) { const bool needs_layout = UpdateOtherAndManagedButtonsVisibility(); - - if (parent != bookmark_model_->bookmark_bar_node()) { - // Only children of the bookmark_bar_node get buttons. - return needs_layout; + for (size_t i = 0; i < bookmark_buttons_.size(); i++) { + if (bookmark_buttons_[i].second == node) { + RemoveBookmarkButton(i); + return true; + } } - if (index >= bookmark_buttons_.size()) { - return needs_layout; - } - - RemoveBookmarkButton(index); - - return true; + return needs_layout; } void BookmarkBarView::BookmarkNodeChangedImpl(const BookmarkNode* node) { @@ -1796,11 +1796,13 @@ // We only care about nodes on the bookmark bar. return; } - size_t index = bookmark_model_->bookmark_bar_node()->GetIndexOf(node).value(); - if (index >= bookmark_buttons_.size()) { + + auto it = base::ranges::find(bookmark_buttons_, node, + &BookmarkButtonAndNode::second); + if (it == bookmark_buttons_.end()) { return; // Buttons are created as needed. } - views::LabelButton* button = bookmark_buttons_[index]; + views::LabelButton* button = it->first; const int old_pref_width = button->GetPreferredSize().width(); ConfigureButton(node, button); if (old_pref_width != button->GetPreferredSize().width()) { @@ -1818,7 +1820,7 @@ bookmark_drop_menu_->Cancel(); } - MenuButton* menu_button = GetMenuButtonForNode(folder); + MenuButton* menu_button = GetMenuButtonForFolder(folder); if (!menu_button) { return; } @@ -1897,15 +1899,14 @@ } for (size_t i = 0; i < bookmark_buttons_.size() && - bookmark_buttons_[i]->GetVisible() && !found; + bookmark_buttons_[i].first->GetVisible() && !found; i++) { - views::LabelButton* button = bookmark_buttons_[i]; + views::LabelButton* button = bookmark_buttons_[i].first; int button_x = mirrored_x - button->x(); int button_w = button->width(); if (button_x < button_w) { found = true; - const BookmarkNode* node = - bookmark_model_->bookmark_bar_node()->children()[i].get(); + const BookmarkNode* node = bookmark_buttons_[i].second; if (node->is_folder()) { if (button_x <= views::kDropBetweenPixels) { location->index = i; @@ -1985,10 +1986,10 @@ } const BookmarkNode* BookmarkBarView::GetNodeForSender(View* sender) const { - const auto i = base::ranges::find(bookmark_buttons_, sender); + const auto i = base::ranges::find(bookmark_buttons_, sender, + &BookmarkButtonAndNode::first); DCHECK(i != bookmark_buttons_.cend()); - size_t child = i - bookmark_buttons_.cbegin(); - return bookmark_model_->bookmark_bar_node()->children()[child].get(); + return i->second; } void BookmarkBarView::WriteBookmarkDragData(const BookmarkNode* node, @@ -2004,9 +2005,9 @@ if (!color_provider) { return; } - for (size_t i = 0; i < bookmark_buttons_.size(); ++i) { - ConfigureButton(bookmark_model_->bookmark_bar_node()->children()[i].get(), - bookmark_buttons_[i]); + for (auto& bookmark_button_and_node : bookmark_buttons_) { + ConfigureButton(bookmark_button_and_node.second, + bookmark_button_and_node.first); } const SkColor color = color_provider->GetColor(kColorBookmarkBarForeground); @@ -2061,9 +2062,12 @@ UpdateBookmarksSeparatorVisibility(); } - bool show_managed = !managed_->managed_node()->children().empty() && - browser_->profile()->GetPrefs()->GetBoolean( - bookmarks::prefs::kShowManagedBookmarksInBookmarkBar); + bool show_managed = false; + if (managed_ && managed_->managed_node()) { + show_managed = !managed_->managed_node()->children().empty() && + browser_->profile()->GetPrefs()->GetBoolean( + bookmarks::prefs::kShowManagedBookmarksInBookmarkBar); + } bool update_managed = show_managed != managed_bookmarks_button_->GetVisible(); if (update_managed) { managed_bookmarks_button_->SetVisible(show_managed); @@ -2154,7 +2158,8 @@ } size_t BookmarkBarView::GetIndexForButton(views::View* button) { - auto it = base::ranges::find(bookmark_buttons_, button); + auto it = base::ranges::find(bookmark_buttons_, button, + &BookmarkButtonAndNode::first); if (it == bookmark_buttons_.cend()) { return static_cast<size_t>(-1); }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h index 07654c3..aa9eeac 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
@@ -45,6 +45,7 @@ namespace bookmarks { class BookmarkModel; +class BookmarkNode; class ManagedBookmarkService; } // namespace bookmarks @@ -113,17 +114,17 @@ void SetBookmarkBarState(BookmarkBar::State state, BookmarkBar::AnimateChangeType animate_type); - // If |loc| is over a bookmark button the node is returned corresponding to - // the button and |model_start_index| is set to 0. If a overflow button is - // showing and |loc| is over the overflow button, the bookmark bar node is - // returned and |model_start_index| is set to the index of the first node - // contained in the overflow menu. - const bookmarks::BookmarkNode* GetNodeForButtonAtModelIndex( + // If |loc| is over a bookmark button that is a folder, the folder + // corresponding to the button is returned and |model_start_index| is set to + // 0. If a overflow button is showing and |loc| is over the overflow button, + // the bookmark bar folder is returned and |model_start_index| is set to the + // index of the first node contained in the overflow menu. + std::optional<BookmarkParentFolder> GetBookmarkFolderForButtonAtLocation( const gfx::Point& loc, size_t* model_start_index); // Returns the MenuButton for folder. - views::MenuButton* GetMenuButtonForNode(const BookmarkParentFolder& folder); + views::MenuButton* GetMenuButtonForFolder(const BookmarkParentFolder& folder); // Returns the position to anchor the menu for |button| at. void GetAnchorPositionForButton(views::MenuButton* button, @@ -247,6 +248,9 @@ int available_width); private: + using BookmarkButtonAndNode = + std::pair<raw_ptr<views::LabelButton>, + raw_ptr<const bookmarks::BookmarkNode>>; struct DropInfo; struct DropLocation; @@ -319,8 +323,7 @@ // Implementation for BookmarkNodeRemoved. Returns true if LayoutAndPaint() is // required. - bool BookmarkNodeRemovedImpl(const bookmarks::BookmarkNode* parent, - size_t index); + bool BookmarkNodeRemovedImpl(const bookmarks::BookmarkNode* node); // If the node is a child of the root node, the button is updated // appropriately. @@ -450,7 +453,7 @@ raw_ptr<views::MenuButton> overflow_button_ = nullptr; // The individual bookmark buttons. - std::vector<raw_ptr<views::LabelButton>> bookmark_buttons_; + std::vector<BookmarkButtonAndNode> bookmark_buttons_; std::map<raw_ptr<const views::LabelButton>, base::CallbackListSubscription> button_visibility_changed_callbacks_;
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc index ac3c348..ffd6744b 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
@@ -422,12 +422,12 @@ size.set_width(size.width() - 25); bb_view_->SetBounds(0, 0, size.width(), size.height()); bb_view_->DeprecatedLayoutImmediately(); - } while (bb_view_->bookmark_buttons_[6]->GetVisible()); + } while (bb_view_->bookmark_buttons_[6].first->GetVisible()); return size; } const views::LabelButton* GetBookmarkButton(size_t view_index) const { - return bb_view_->bookmark_buttons_[view_index]; + return bb_view_->bookmark_buttons_[view_index].first; } views::LabelButton* GetBookmarkButton(size_t view_index) { return const_cast<views::LabelButton*>(
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test_helper.h b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test_helper.h index 1de617d..af0a0dd2 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test_helper.h +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test_helper.h
@@ -23,7 +23,7 @@ size_t GetBookmarkButtonCount() { return bbv_->bookmark_buttons_.size(); } views::LabelButton* GetBookmarkButton(size_t index) { - return bbv_->bookmark_buttons_[index]; + return bbv_->bookmark_buttons_[index].first; } views::LabelButton* apps_page_shortcut() { return bbv_->apps_page_shortcut_; }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_menu_controller_views.cc b/chrome/browser/ui/views/bookmarks/bookmark_menu_controller_views.cc index 26578d82..66707f2 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_menu_controller_views.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_menu_controller_views.cc
@@ -55,7 +55,8 @@ void BookmarkMenuController::RunMenuAt(BookmarkBarView* bookmark_bar) { bookmark_bar_ = bookmark_bar; - views::MenuButton* menu_button = bookmark_bar_->GetMenuButtonForNode(folder_); + views::MenuButton* menu_button = + bookmark_bar_->GetMenuButtonForFolder(folder_); DCHECK(menu_button); views::MenuAnchorPosition anchor; bookmark_bar_->GetAnchorPositionForButton(menu_button, &anchor); @@ -175,15 +176,15 @@ gfx::Point bookmark_bar_loc(screen_point); views::View::ConvertPointFromScreen(bookmark_bar_, &bookmark_bar_loc); size_t start_index; - const BookmarkNode* node = bookmark_bar_->GetNodeForButtonAtModelIndex( - bookmark_bar_loc, &start_index); - if (!node || !node->is_folder()) { + std::optional<BookmarkParentFolder> folder = + bookmark_bar_->GetBookmarkFolderForButtonAtLocation(bookmark_bar_loc, + &start_index); + if (!folder) { return nullptr; } - const BookmarkParentFolder folder(BookmarkParentFolder::FromFolderNode(node)); - menu_delegate_->SetActiveMenu(folder, start_index); - *button = bookmark_bar_->GetMenuButtonForNode(folder); + menu_delegate_->SetActiveMenu(*folder, start_index); + *button = bookmark_bar_->GetMenuButtonForFolder(*folder); bookmark_bar_->GetAnchorPositionForButton(*button, anchor); *has_mnemonics = false; return this->menu();
diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc index fe2347d4..01c7db7 100644 --- a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc +++ b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views.cc
@@ -1189,7 +1189,7 @@ if (request && request->video_type == blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_THIS_TAB) { - return std::make_unique<ShareThisTabDialogViews>(); + return std::make_unique<ShareThisTabMediaPicker>(); } else { return std::make_unique<DesktopMediaPickerViews>(); }
diff --git a/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.cc b/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.cc index 7555991a..e699b4d0 100644 --- a/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.cc +++ b/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.cc
@@ -77,7 +77,7 @@ ShareThisTabDialogView::ShareThisTabDialogView( const DesktopMediaPicker::Params& params, - ShareThisTabDialogViews* parent) + ShareThisTabMediaPicker* parent) : web_contents_(params.web_contents->GetWeakPtr()), app_name_(params.app_name), parent_(parent), @@ -344,11 +344,11 @@ BEGIN_METADATA(ShareThisTabDialogView) END_METADATA -ShareThisTabDialogViews::ShareThisTabDialogViews() : dialog_(nullptr) { +ShareThisTabMediaPicker::ShareThisTabMediaPicker() : dialog_(nullptr) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); } -ShareThisTabDialogViews::~ShareThisTabDialogViews() { +ShareThisTabMediaPicker::~ShareThisTabMediaPicker() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (dialog_) { dialog_->RecordUmaDismissal(); @@ -357,7 +357,7 @@ } } -void ShareThisTabDialogViews::Show( +void ShareThisTabMediaPicker::Show( const DesktopMediaPicker::Params& params, std::vector<std::unique_ptr<DesktopMediaList>> source_lists, DoneCallback done_callback) { @@ -370,7 +370,7 @@ dialog_ = new ShareThisTabDialogView(params, this); } -void ShareThisTabDialogViews::NotifyDialogResult( +void ShareThisTabMediaPicker::NotifyDialogResult( const content::DesktopMediaID& source) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.h b/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.h index 4cb3fa52..4f46c1b 100644 --- a/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.h +++ b/chrome/browser/ui/views/desktop_capture/share_this_tab_dialog_views.h
@@ -17,22 +17,22 @@ #include "ui/views/controls/label.h" #include "ui/views/window/dialog_delegate.h" -class ShareThisTabDialogViews; +class ShareThisTabMediaPicker; -// Dialog view used for ShareThisTabDialogViews. +// Dialog view used for ShareThisTabMediaPicker. class ShareThisTabDialogView : public views::DialogDelegateView { METADATA_HEADER(ShareThisTabDialogView, views::DialogDelegateView) public: ShareThisTabDialogView(const DesktopMediaPicker::Params& params, - ShareThisTabDialogViews* parent); + ShareThisTabMediaPicker* parent); ShareThisTabDialogView(const ShareThisTabDialogView&) = delete; ShareThisTabDialogView& operator=(const ShareThisTabDialogView&) = delete; ~ShareThisTabDialogView() override; void RecordUmaDismissal() const; - // Called by parent (ShareThisTabDialogViews) when it's destroyed. + // Called by parent (ShareThisTabMediaPicker) when it's destroyed. void DetachParent(); // views::DialogDelegateView: @@ -55,7 +55,7 @@ const base::WeakPtr<content::WebContents> web_contents_; const std::u16string app_name_; - raw_ptr<ShareThisTabDialogViews> parent_; + raw_ptr<ShareThisTabMediaPicker> parent_; // Child view displaying a preview, icon and title for the tab being shared, // or a throbber while the dialog is not yet activated. @@ -79,12 +79,12 @@ }; // Implementation of DesktopMediaPicker for the ShareThisTabDialogView. -class ShareThisTabDialogViews : public DesktopMediaPicker { +class ShareThisTabMediaPicker : public DesktopMediaPicker { public: - ShareThisTabDialogViews(); - ShareThisTabDialogViews(const ShareThisTabDialogViews&) = delete; - ShareThisTabDialogViews& operator=(const ShareThisTabDialogViews&) = delete; - ~ShareThisTabDialogViews() override; + ShareThisTabMediaPicker(); + ShareThisTabMediaPicker(const ShareThisTabMediaPicker&) = delete; + ShareThisTabMediaPicker& operator=(const ShareThisTabMediaPicker&) = delete; + ~ShareThisTabMediaPicker() override; void NotifyDialogResult(const content::DesktopMediaID& source); @@ -97,7 +97,7 @@ DoneCallback callback_; // The |dialog_| is owned by the corresponding views::Widget instance. - // When ShareThisTabDialogViews is destroyed the |dialog_| is destroyed + // When ShareThisTabMediaPicker is destroyed the |dialog_| is destroyed // asynchronously by closing the widget. raw_ptr<ShareThisTabDialogView> dialog_; };
diff --git a/chrome/browser/ui/views/page_info/page_info_ad_personalization_content_view.cc b/chrome/browser/ui/views/page_info/page_info_ad_personalization_content_view.cc index f0126d2..d7e11302 100644 --- a/chrome/browser/ui/views/page_info/page_info_ad_personalization_content_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_ad_personalization_content_view.cc
@@ -33,6 +33,11 @@ layout_provider->GetInsetsMetric(INSETS_PAGE_INFO_HOVER_BUTTON); const int vertical_distance = layout_provider->GetDistanceMetric(DISTANCE_CONTROL_LIST_VERTICAL); + const int bottom_margin = + layout_provider->GetDistanceMetric(DISTANCE_CONTENT_LIST_VERTICAL_MULTI); + // The last view is a RichHoverButton, which overrides the bottom + // dialog inset in favor of its own. + SetProperty(views::kMarginsKey, gfx::Insets::TLBR(0, 0, bottom_margin, 0)); SetOrientation(views::LayoutOrientation::kVertical);
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc index 8efb87be..f935763 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -147,14 +147,11 @@ DCHECK(web_contents()); ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); - // In Harmony, the last view is a HoverButton, which overrides the bottom - // dialog inset in favor of its own. Note the multi-button value is used here - // assuming that the "Cookies" & "Site settings" buttons will always be shown. - const int bottom_margin = - layout_provider->GetDistanceMetric(DISTANCE_CONTENT_LIST_VERTICAL_MULTI); + // Only set the top margin. The bottom margin is set for each subpage + // separately, depending the content. const int top_margin = layout_provider->GetInsetsMetric(views::INSETS_DIALOG).top(); - set_margins(gfx::Insets::TLBR(top_margin, 0, bottom_margin, 0)); + set_margins(gfx::Insets().set_top(top_margin)); ui_delegate_ = std::make_unique<ChromePageInfoUiDelegate>(web_contents(), url); presenter_ = std::make_unique<PageInfo>(
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc index 4e0c89d..891c9ac 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
@@ -1207,6 +1207,6 @@ IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewMerchantTrustDialogBrowserTest, InvokeUi_MerchantTrustSubpage) { - set_baseline("6105450"); + set_baseline("6111370"); ShowAndVerifyUi(); }
diff --git a/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc b/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc index fab1532..04bafcdf 100644 --- a/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc
@@ -99,6 +99,11 @@ views::BoxLayout::Orientation::kVertical)); ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); + const int bottom_margin = + layout_provider->GetDistanceMetric(DISTANCE_CONTENT_LIST_VERTICAL_MULTI); + // The last view is a RichHoverButton, which overrides the bottom + // dialog inset in favor of its own. + SetProperty(views::kMarginsKey, gfx::Insets::TLBR(0, 0, bottom_margin, 0)); // The top and bottom margins should be the same as for buttons shown below. const auto button_insets = layout_provider->GetInsetsMetric(
diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/browser/ui/views/page_info/page_info_main_view.cc index 33324ef..4979ec8 100644 --- a/chrome/browser/ui/views/page_info/page_info_main_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_main_view.cc
@@ -113,7 +113,8 @@ layout_provider->GetDistanceMetric(DISTANCE_CONTENT_LIST_VERTICAL_MULTI); SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical)); + views::BoxLayout::Orientation::kVertical, + gfx::Insets::TLBR(0, 0, hover_list_spacing, 0))); AddChildView(CreateBubbleHeaderView()) ->SetProperty(views::kMarginsKey,
diff --git a/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.cc b/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.cc index d350e12..0494289c 100644 --- a/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.cc
@@ -6,17 +6,23 @@ #include <string> +#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/ui/color/chrome_color_id.h" #include "chrome/browser/ui/views/accessibility/non_accessible_image_view.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" +#include "chrome/browser/ui/views/controls/hover_button.h" #include "chrome/browser/ui/views/controls/rich_hover_button.h" #include "chrome/browser/ui/views/page_info/page_info_view_factory.h" #include "chrome/browser/ui/views/page_info/star_rating_view.h" #include "components/strings/grit/components_strings.h" #include "components/vector_icons/vector_icons.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/views/background.h" +#include "ui/views/controls/button/label_button.h" #include "ui/views/controls/styled_label.h" #include "ui/views/layout/flex_layout_view.h" +#include "ui/views/layout/layout_types.h" +#include "ui/views/view_class_properties.h" DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PageInfoMerchantTrustContentView, kElementIdForTesting); @@ -24,13 +30,22 @@ kViewReviewsId); PageInfoMerchantTrustContentView::PageInfoMerchantTrustContentView() { + ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); + // The distance between the last button and the footer. + const int bottom_margin = + layout_provider->GetDistanceMetric(DISTANCE_CONTENT_LIST_VERTICAL_MULTI); SetProperty(views::kElementIdentifierKey, kElementIdForTesting); SetOrientation(views::LayoutOrientation::kVertical); - // TODO(crbug.com/378854730): Set up layout. AddChildView(CreateDescriptionLabel()); AddChildView(CreateReviewsSummarySection()); view_reviews_button_ = AddChildView(CreateViewReviewsButton()); + view_reviews_button_->SetProperty(views::kMarginsKey, + gfx::Insets().set_bottom(bottom_margin)); + AddChildView(CreateHatsButton()); + // No bottom margin for the content view because the HaTS button acts as a + // footer. + SetProperty(views::kMarginsKey, gfx::Insets::TLBR(0, 0, 0, 0)); } PageInfoMerchantTrustContentView::~PageInfoMerchantTrustContentView() = default; @@ -47,6 +62,12 @@ return view_reviews_button_callback_list_.Add(std::move(callback)); } +base::CallbackListSubscription +PageInfoMerchantTrustContentView::RegisterHatsButtonPressedCallback( + base::RepeatingClosureList::CallbackType callback) { + return hats_button_callback_list_.Add(std::move(callback)); +} + void PageInfoMerchantTrustContentView::SetReviewsSummary( std::u16string summary) { // TODO(crbug.com/378854730): Consider hiding the summary and description if @@ -144,6 +165,20 @@ return merchant_trust_button; } +std::unique_ptr<RichHoverButton> +PageInfoMerchantTrustContentView::CreateHatsButton() { + auto hats_button = std::make_unique<RichHoverButton>( + base::BindRepeating( + &PageInfoMerchantTrustContentView::NotifyHatsButtonPressed, + base::Unretained(this)), + PageInfoViewFactory::GetImageModel(kSubmitFeedbackIcon), + l10n_util::GetStringUTF16(IDS_PAGE_INFO_MERCHANT_TRUST_HATS_BUTTON), + std::u16string()); + hats_button->SetBackground( + views::CreateThemedSolidBackground(ui::kColorSysNeutralContainer)); + return hats_button; +} + void PageInfoMerchantTrustContentView::NotifyLearnMoreLinkPressed( const ui::Event& event) { learn_more_link_callback_list_.Notify(event); @@ -153,6 +188,10 @@ view_reviews_button_callback_list_.Notify(); } +void PageInfoMerchantTrustContentView::NotifyHatsButtonPressed() { + hats_button_callback_list_.Notify(); +} + gfx::Size PageInfoMerchantTrustContentView::CalculatePreferredSize( const views::SizeBounds& available_size) const { // Size the content view based on the "View all reviews button", since the
diff --git a/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.h b/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.h index 8ee3d7b..9db9a34 100644 --- a/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.h +++ b/chrome/browser/ui/views/page_info/page_info_merchant_trust_content_view.h
@@ -27,6 +27,8 @@ base::RepeatingCallback<void(const ui::Event&)> callback); base::CallbackListSubscription RegisterViewReviewsButtonPressedCallback( base::RepeatingClosureList::CallbackType callback); + base::CallbackListSubscription RegisterHatsButtonPressedCallback( + base::RepeatingClosureList::CallbackType callback); void SetReviewsSummary(std::u16string summary); void SetRating(double rating); @@ -40,9 +42,11 @@ [[nodiscard]] std::unique_ptr<views::View> CreateDescriptionLabel(); [[nodiscard]] std::unique_ptr<views::View> CreateReviewsSummarySection(); [[nodiscard]] std::unique_ptr<RichHoverButton> CreateViewReviewsButton(); + [[nodiscard]] std::unique_ptr<RichHoverButton> CreateHatsButton(); void NotifyLearnMoreLinkPressed(const ui::Event& event); void NotifyViewReviewsPressed(); + void NotifyHatsButtonPressed(); raw_ptr<StarRatingView> star_rating_view_; raw_ptr<RichHoverButton> view_reviews_button_; @@ -51,6 +55,7 @@ base::RepeatingCallbackList<void(const ui::Event&)> learn_more_link_callback_list_; base::RepeatingClosureList view_reviews_button_callback_list_; + base::RepeatingClosureList hats_button_callback_list_; }; #endif // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_MERCHANT_TRUST_CONTENT_VIEW_H_
diff --git a/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.cc b/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.cc index 9f1e628..909fc383 100644 --- a/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.cc +++ b/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.cc
@@ -52,6 +52,10 @@ ShowMerchantTrustSidePanel(web_contents(), merchant_data_.page_url); } +void PageInfoMerchantTrustController::HatsButtonPressed() { + // TODO(crbug.com/381405880): Open the HaTS. +} + void PageInfoMerchantTrustController::InitCallbacks() { learn_more_link_callback_ = content_view_->RegisterLearnMoreLinkPressedCallback(base::BindRepeating( @@ -63,4 +67,8 @@ base::BindRepeating( &PageInfoMerchantTrustController::ViewReviewsPressed, base::Unretained(this))); + + hats_button_callback_ = content_view_->RegisterHatsButtonPressedCallback( + base::BindRepeating(&PageInfoMerchantTrustController::HatsButtonPressed, + base::Unretained(this))); }
diff --git a/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.h b/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.h index 000a892..36a81e6d27 100644 --- a/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.h +++ b/chrome/browser/ui/views/page_info/page_info_merchant_trust_controller.h
@@ -26,6 +26,7 @@ std::optional<page_info::MerchantData> merchant_data); void LearnMoreLinkPressed(const ui::Event& event); void ViewReviewsPressed(); + void HatsButtonPressed(); void InitCallbacks(); raw_ptr<PageInfoMerchantTrustContentView> content_view_; @@ -33,6 +34,7 @@ base::CallbackListSubscription learn_more_link_callback_; base::CallbackListSubscription view_reviews_button_callback_; + base::CallbackListSubscription hats_button_callback_; }; #endif // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PAGE_INFO_MERCHANT_TRUST_CONTROLLER_H_
diff --git a/chrome/browser/ui/views/page_info/page_info_permission_content_view.cc b/chrome/browser/ui/views/page_info/page_info_permission_content_view.cc index 5a05a2c..cab7c874 100644 --- a/chrome/browser/ui/views/page_info/page_info_permission_content_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_permission_content_view.cc
@@ -51,6 +51,11 @@ web_contents_ = web_contents->GetWeakPtr(); ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); + const int bottom_margin = + layout_provider->GetDistanceMetric(DISTANCE_CONTENT_LIST_VERTICAL_MULTI); + // The last view is a RichHoverButton, which overrides the bottom + // dialog inset in favor of its own. + SetProperty(views::kMarginsKey, gfx::Insets::TLBR(0, 0, bottom_margin, 0)); // Use the same insets as buttons and permission rows in the main page for // consistency.
diff --git a/chrome/browser/ui/views/page_info/page_info_security_content_view.cc b/chrome/browser/ui/views/page_info/page_info_security_content_view.cc index dd8391a..5751378 100644 --- a/chrome/browser/ui/views/page_info/page_info_security_content_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_security_content_view.cc
@@ -17,6 +17,7 @@ #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/ui_base_features.h" #include "ui/views/layout/box_layout.h" +#include "ui/views/view_class_properties.h" PageInfoSecurityContentView::PageInfoSecurityContentView( PageInfo* presenter, @@ -31,6 +32,12 @@ .left())); if (is_standalone_page) { + const int bottom_margin = ChromeLayoutProvider::Get()->GetDistanceMetric( + DISTANCE_CONTENT_LIST_VERTICAL_MULTI); + // The last view in the subpage is a RichHoverButton, which overrides the + // bottom dialog inset in favor of its own. + SetProperty(views::kMarginsKey, gfx::Insets::TLBR(0, 0, bottom_margin, 0)); + presenter_->InitializeUiState(this, base::DoNothing()); } }
diff --git a/chrome/browser/ui/views/passwords/password_bubble_interactive_uitest.cc b/chrome/browser/ui/views/passwords/password_bubble_interactive_uitest.cc index 20badf63..afc37ba 100644 --- a/chrome/browser/ui/views/passwords/password_bubble_interactive_uitest.cc +++ b/chrome/browser/ui/views/passwords/password_bubble_interactive_uitest.cc
@@ -504,10 +504,9 @@ }; // This is a regression test for crbug.com/1335418 -// Flaky on multiple platforms. See crbug.com/384840280 IN_PROC_BROWSER_TEST_P( PasswordBubbleInteractiveUiTestWithExplicitBrowserSigninParam, - DISABLED_SaveUiDismissalReason) { + SaveUiDismissalReason) { base::HistogramTester histogram_tester; SetupPendingPassword();
diff --git a/chrome/browser/ui/views/profiles/managed_user_profile_notice_ui_browsertest.cc b/chrome/browser/ui/views/profiles/managed_user_profile_notice_ui_browsertest.cc index d85c76f..b03f127 100644 --- a/chrome/browser/ui/views/profiles/managed_user_profile_notice_ui_browsertest.cc +++ b/chrome/browser/ui/views/profiles/managed_user_profile_notice_ui_browsertest.cc
@@ -55,7 +55,7 @@ {.pixel_test_param = {.test_suffix = "Rtl", .use_right_to_left_language = true}}, {.pixel_test_param = {.test_suffix = "SmallWindow", - .use_small_window = true}}, + .window_size = PixelTestParam::kSmallWindowSize}}, }; const ManagedUserNoticeTestParam kDialogTestParams[] = { @@ -159,10 +159,7 @@ return std::make_unique<ManagedUserNoticeStepControllerForTest>( host, browser()->profile(), account_info); })); - profile_picker_view_->ShowAndWait( - GetParam().pixel_test_param.use_small_window - ? std::optional<gfx::Size>(gfx::Size(750, 590)) - : std::nullopt); + profile_picker_view_->ShowAndWait(GetParam().pixel_test_param.window_size); } bool VerifyUi() override {
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc index 15050af..a1af5ed9 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -1264,7 +1264,10 @@ for (ProfileAttributesEntry* profile_entry : available_profiles) { AddAvailableProfile( ui::ImageModel::FromImage(profile_entry->GetAvatarIcon( - profiles::kMenuAvatarIconSize, /*use_high_res_file=*/true, + switches::IsImprovedSigninUIOnDesktopEnabled() + ? kOtherProfileImageSize + : kDeprecatedOtherProfileImageSize, + /*use_high_res_file=*/true, GetPlaceholderAvatarIconParamsVisibleAgainstColor( browser()->window()->GetColorProvider()->GetColor( ui::kColorMenuBackground)))),
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc index 5383396d..ee905a77 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -1042,19 +1042,19 @@ views::BoxLayout::Orientation::kVertical)); } - if (&icon == &gfx::kNoneIcon) { - features_container_->AddChildView(std::make_unique<HoverButton>( - base::BindRepeating(&ProfileMenuViewBase::ButtonPressed, - base::Unretained(this), std::move(action)), - text)); - } else { - auto icon_view = + std::unique_ptr<FeatureButtonIconView> icon_view; + if (&icon != &gfx::kNoneIcon) { + icon_view = std::make_unique<FeatureButtonIconView>(icon, icon_to_image_ratio); - features_container_->AddChildView(std::make_unique<HoverButton>( - base::BindRepeating(&ProfileMenuViewBase::ButtonPressed, - base::Unretained(this), std::move(action)), - std::move(icon_view), text)); } + + features_container_->AddChildView(std::make_unique<HoverButton>( + base::BindRepeating(&ProfileMenuViewBase::ButtonPressed, + base::Unretained(this), std::move(action)), + std::move(icon_view), text, /*subtitle=*/std::u16string(), + /*secondary_view=*/nullptr, + /*add_vertical_label_spacing=*/ + !switches::IsImprovedSigninUIOnDesktopEnabled())); } void ProfileMenuViewBase::SetProfileManagementHeading( @@ -1104,13 +1104,19 @@ } DCHECK(!image_model.IsEmpty()); - ui::ImageModel sized_image = - GetCircularSizedImage(image_model, profiles::kMenuAvatarIconSize); + ui::ImageModel sized_image = GetCircularSizedImage( + image_model, switches::IsImprovedSigninUIOnDesktopEnabled() + ? kOtherProfileImageSize + : kDeprecatedOtherProfileImageSize); views::Button* button = selectable_profiles_container_->AddChildView( std::make_unique<HoverButton>( base::BindRepeating(&ProfileMenuViewBase::ButtonPressed, base::Unretained(this), std::move(action)), - sized_image, name)); + std::make_unique<views::ImageView>(sized_image), name, + /*subtitle=*/std::u16string(), + /*secondary_view=*/nullptr, + /*add_vertical_label_spacing=*/ + !switches::IsImprovedSigninUIOnDesktopEnabled())); if (!is_guest && !first_profile_button_) { first_profile_button_ = button; @@ -1165,7 +1171,10 @@ profile_mgmt_features_container_->AddChildView(std::make_unique<HoverButton>( base::BindRepeating(&ProfileMenuViewBase::ButtonPressed, base::Unretained(this), std::move(action)), - std::move(icon_view), text)); + std::move(icon_view), text, /*subtitle=*/std::u16string(), + /*secondary_view=*/nullptr, + /*add_vertical_label_spacing=*/ + !switches::IsImprovedSigninUIOnDesktopEnabled())); } gfx::ImageSkia ProfileMenuViewBase::ColoredImageForMenu(
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.h b/chrome/browser/ui/views/profiles/profile_menu_view_base.h index 535f051c..933fe07 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_base.h +++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
@@ -144,6 +144,10 @@ static constexpr int kManagementBadgeSize = 24; // Size of the small identity image shown inside the signin button. static constexpr int kIdentityImageSizeForButton = 22; + // Size of the profile image in the "Other profiles" section, matches the + // icon size of other rows. + static constexpr int kOtherProfileImageSize = 16; + static constexpr int kDeprecatedOtherProfileImageSize = 20; ProfileMenuViewBase(views::Button* anchor_button, Browser* browser); ~ProfileMenuViewBase() override;
diff --git a/chrome/browser/ui/views/profiles/profile_picker_ui_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_ui_browsertest.cc index 47f2a7b..3cc00fae 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_ui_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_ui_browsertest.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/ui/views/profiles/profile_management_step_controller.h" #include "chrome/browser/ui/views/profiles/profile_picker_view_test_utils.h" #include "chrome/browser/ui/views/profiles/profiles_pixel_test_utils.h" +#include "chrome/common/pref_names.h" #include "chrome/common/webui_url_constants.h" #include "components/signin/public/base/signin_buildflags.h" #include "components/signin/public/base/signin_switches.h" @@ -36,6 +37,7 @@ bool show_kite_for_supervised_users = false; // param to be removed when `kOutlineSilhouetteIcon` is enabled by default. bool outline_silhouette_icon = false; + bool disallow_profile_creation = false; }; // To be passed as 4th argument to `INSTANTIATE_TEST_SUITE_P()`, allows the test @@ -51,19 +53,32 @@ {.pixel_test_param = {.test_suffix = "Regular"}}, {.pixel_test_param = {.test_suffix = "MultipleProfiles"}, .use_multiple_profiles = true}, + {.pixel_test_param = {.test_suffix = "PortraitModeWindow", + .window_size = + PixelTestParam::kPortraitModeWindowSize}}, + {.pixel_test_param = {.test_suffix = "MultipleProfilesSmall", + .window_size = PixelTestParam::kSmallWindowSize}, + .use_multiple_profiles = true}, + {.pixel_test_param = {.test_suffix = "MultipleProfilesPortraitMode", + .window_size = + PixelTestParam::kPortraitModeWindowSize}, + .use_multiple_profiles = true}, + {.pixel_test_param = {.test_suffix = "MultipleProfilesNoProfileCreation"}, + .use_multiple_profiles = true, + .disallow_profile_creation = true}, {.pixel_test_param = {.test_suffix = "MultipleProfiles_OutlineSilhouette"}, .use_multiple_profiles = true, .outline_silhouette_icon = true}, {.pixel_test_param = {.test_suffix = "DarkRtlSmallMultipleProfiles", .use_dark_theme = true, .use_right_to_left_language = true, - .use_small_window = true}, + .window_size = PixelTestParam::kSmallWindowSize}, .use_multiple_profiles = true}, {.pixel_test_param = {.test_suffix = "DarkRtlSmallMultipleProfiles_OutlineSilhouette", .use_dark_theme = true, .use_right_to_left_language = true, - .use_small_window = true}, + .window_size = PixelTestParam::kSmallWindowSize}, .use_multiple_profiles = true, .outline_silhouette_icon = true}, #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) @@ -76,16 +91,14 @@ {.pixel_test_param = {.test_suffix = "DarkRtlSmallMultipleProfiles_Kite", .use_dark_theme = true, .use_right_to_left_language = true, - .use_small_window = true}, + .window_size = PixelTestParam::kSmallWindowSize}, .use_multiple_profiles = true, .show_kite_for_supervised_users = true}, #endif }; // Create 4 profiles with different icons and types. -void AddMultipleProfiles(Profile* profile) { - DCHECK(profile); - +void AddMultipleProfiles() { for (size_t i = 0; i < 4; i++) { base::RunLoop run_loop; ProfileManager::CreateMultiProfileAsync( @@ -154,8 +167,14 @@ void ShowUi(const std::string& name) override { DCHECK(browser()); if (GetParam().use_multiple_profiles) { - AddMultipleProfiles(browser()->profile()); + AddMultipleProfiles(); } + + if (GetParam().disallow_profile_creation) { + g_browser_process->local_state()->SetBoolean( + prefs::kBrowserAddPersonEnabled, false); + } + ui::ScopedAnimationDurationScaleMode disable_animation( ui::ScopedAnimationDurationScaleMode::ZERO_DURATION); @@ -176,10 +195,7 @@ return ProfileManagementStepController::CreateForProfilePickerApp( host, profile_picker_main_view_url); })); - profile_picker_view_->ShowAndWait( - GetParam().pixel_test_param.use_small_window - ? std::optional<gfx::Size>(gfx::Size(750, 590)) - : std::nullopt); + profile_picker_view_->ShowAndWait(GetParam().pixel_test_param.window_size); observer.Wait(); }
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc b/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc index f333270..c17ee47e 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_view_test_utils.cc
@@ -74,7 +74,7 @@ } } - void DidFirstVisuallyNonEmptyPaint() override { + void DidStopLoading() override { Observe(nullptr); DCHECK(initial_step_load_finished_closure_); std::move(initial_step_load_finished_closure_).Run();
diff --git a/chrome/browser/ui/views/profiles/profile_type_choice_ui_browsertest.cc b/chrome/browser/ui/views/profiles/profile_type_choice_ui_browsertest.cc index 3ca6de20..0a6f918 100644 --- a/chrome/browser/ui/views/profiles/profile_type_choice_ui_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_type_choice_ui_browsertest.cc
@@ -38,7 +38,7 @@ {.test_suffix = "DarkRtlSmall", .use_dark_theme = true, .use_right_to_left_language = true, - .use_small_window = true}, + .window_size = PixelTestParam::kSmallWindowSize}, }; const char kRemoveAvatarIconJS[] = @@ -84,10 +84,7 @@ return ProfileManagementStepController::CreateForProfilePickerApp( host, profile_type_choice_url); })); - profile_picker_view_->ShowAndWait( - GetParam().use_small_window - ? std::optional<gfx::Size>(gfx::Size(750, 590)) - : std::nullopt); + profile_picker_view_->ShowAndWait(GetParam().window_size); observer.Wait(); // We need to remove the avatar icon because it will be generated
diff --git a/chrome/browser/ui/views/profiles/profiles_pixel_test_utils.h b/chrome/browser/ui/views/profiles/profiles_pixel_test_utils.h index ea39a94..0252dabb 100644 --- a/chrome/browser/ui/views/profiles/profiles_pixel_test_utils.h +++ b/chrome/browser/ui/views/profiles/profiles_pixel_test_utils.h
@@ -34,7 +34,16 @@ std::string test_suffix = ""; bool use_dark_theme = false; bool use_right_to_left_language = false; - bool use_small_window = false; + + // Predefined sizes: + // + // Small windows: both width and height. + static constexpr gfx::Size kSmallWindowSize{750, 590}; + // Portrait mode: longer height than width compared to the default ratio./ + // Height of 750px is the maximum height a pixel test can reach. + static constexpr gfx::Size kPortraitModeWindowSize{700, 750}; + // Leaving `window_size` unset means using the default size of the view. + std::optional<gfx::Size> window_size; }; enum class AccountManagementStatus {
diff --git a/chrome/browser/ui/views/profiles/sync_confirmation_ui_browsertest.cc b/chrome/browser/ui/views/profiles/sync_confirmation_ui_browsertest.cc index 37741dc2..b94ee29 100644 --- a/chrome/browser/ui/views/profiles/sync_confirmation_ui_browsertest.cc +++ b/chrome/browser/ui/views/profiles/sync_confirmation_ui_browsertest.cc
@@ -92,7 +92,7 @@ {.pixel_test_param = {.test_suffix = "Rtl", .use_right_to_left_language = true}}, {.pixel_test_param = {.test_suffix = "SmallWindow", - .use_small_window = true}}, + .window_size = PixelTestParam::kSmallWindowSize}}, {.pixel_test_param = {.test_suffix = "ManagedAccount"}, .account_management_status = AccountManagementStatus::kManaged}, @@ -215,10 +215,7 @@ return std::unique_ptr<ProfileManagementStepController>( new SyncConfirmationStepControllerForTest(host)); })); - profile_picker_view_->ShowAndWait( - GetParam().pixel_test_param.use_small_window - ? std::optional<gfx::Size>(gfx::Size(750, 590)) - : std::nullopt); + profile_picker_view_->ShowAndWait(GetParam().pixel_test_param.window_size); } bool VerifyUi() override {
diff --git a/chrome/browser/ui/views/task_manager_view.h b/chrome/browser/ui/views/task_manager_view.h index ac06e6da8..33887ed 100644 --- a/chrome/browser/ui/views/task_manager_view.h +++ b/chrome/browser/ui/views/task_manager_view.h
@@ -52,7 +52,9 @@ struct FilterTab { DisplayCategory associated_category; int title_id; - raw_ptr<const gfx::VectorIcon> icon; + // This field is not a raw_ptr<> because it only ever points to statically- + // allocated data which is never freed, and hence cannot dangle. + RAW_PTR_EXCLUSION const gfx::VectorIcon* icon; }; TaskManagerView(const TaskManagerView&) = delete;
diff --git a/chrome/browser/ui/views/toolbar/app_menu_browsertest.cc b/chrome/browser/ui/views/toolbar/app_menu_browsertest.cc index 20126a2..eb1a126 100644 --- a/chrome/browser/ui/views/toolbar/app_menu_browsertest.cc +++ b/chrome/browser/ui/views/toolbar/app_menu_browsertest.cc
@@ -373,18 +373,7 @@ #endif // Test case for Safety Hub notification. -class AppMenuBrowserTestSafetyHub : public AppMenuBrowserTest { - public: - AppMenuBrowserTestSafetyHub() { - scoped_feature_list_.InitAndEnableFeature(features::kSafetyHub); - } - - private: - base::test::ScopedFeatureList scoped_feature_list_; -}; - -IN_PROC_BROWSER_TEST_F(AppMenuBrowserTestSafetyHub, - Safety_Hub_shown_notification) { +IN_PROC_BROWSER_TEST_F(AppMenuBrowserTest, Safety_Hub_shown_notification) { auto* mock_sentiment_service = static_cast<MockTrustSafetySentimentService*>( TrustSafetySentimentServiceFactory::GetInstance() ->SetTestingFactoryAndUse(
diff --git a/chrome/browser/ui/webui/data_sharing/data_sharing.mojom b/chrome/browser/ui/webui/data_sharing/data_sharing.mojom index 66d3fe2..e8f56e5 100644 --- a/chrome/browser/ui/webui/data_sharing/data_sharing.mojom +++ b/chrome/browser/ui/webui/data_sharing/data_sharing.mojom
@@ -8,6 +8,20 @@ import "mojo/public/mojom/base/absl_status.mojom"; import "url/mojom/url.mojom"; +struct ReadGroupsParams { + array<ReadGroupParams> params; +}; + +struct ReadGroupParams { + // Identifier of the people group. + string group_id; + + // As an optimization, sending a consistency token will allow for reading + // groups with bounded staleness. Without a consistency token, we'll always + // read the most current group. + string consistency_token; +}; + // Result of the ReadGroups API. struct ReadGroupsResult { // Returns GroupData array when ReadGroups is successful, otherwise @@ -88,8 +102,8 @@ // The token is used by data sharing SDK to authenticate the current user. OnAccessTokenFetched(string access_token); - // Read groups given group_ids. - ReadGroups(array<string> group_ids) => (ReadGroupsResult result); + // Read groups given a list of ReadGroupParams. + ReadGroups(ReadGroupsParams read_groups_params) => (ReadGroupsResult result); // Delete the group given group_id. // Return status code equivalent to absl::StatusCode.
diff --git a/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.cc b/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.cc index e2d908a..35c6089 100644 --- a/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.cc +++ b/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.cc
@@ -148,10 +148,10 @@ } void DataSharingPageHandler::ReadGroups( - std::vector<std::string> group_ids, + data_sharing::mojom::ReadGroupsParamsPtr read_group_params, data_sharing::mojom::Page::ReadGroupsCallback callback) { CHECK(api_initialized_); - page_->ReadGroups(group_ids, std::move(callback)); + page_->ReadGroups(std::move(read_group_params), std::move(callback)); } void DataSharingPageHandler::DeleteGroup(
diff --git a/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.h b/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.h index c299b8c..29585d82 100644 --- a/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.h +++ b/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler.h
@@ -53,7 +53,7 @@ void OpenTabGroup(const std::string& group_id) override; - void ReadGroups(std::vector<std::string> group_ids, + void ReadGroups(data_sharing::mojom::ReadGroupsParamsPtr read_groups_params, data_sharing::mojom::Page::ReadGroupsCallback callback); void DeleteGroup(std::string group_id,
diff --git a/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler_unittest.cc b/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler_unittest.cc index 945743e..602a538 100644 --- a/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/data_sharing/data_sharing_page_handler_unittest.cc
@@ -31,7 +31,7 @@ MOCK_METHOD(void, OnAccessTokenFetched, (const std::string& access_token)); MOCK_METHOD(void, ReadGroups, - (const std::vector<std::string>& group_ids, + (data_sharing::mojom::ReadGroupsParamsPtr read_groups_params, ReadGroupsCallback callback)); MOCK_METHOD(void, DeleteGroup,
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc index 1424a32..4d9838d6 100644 --- a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc +++ b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc
@@ -234,18 +234,7 @@ )")); } -class SafetyHubExtensionSettingsUIBrowserTest - : public ExtensionSettingsTestBase { - public: - SafetyHubExtensionSettingsUIBrowserTest() { - feature_list_.InitAndEnableFeature(features::kSafetyHub); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - -IN_PROC_BROWSER_TEST_F(SafetyHubExtensionSettingsUIBrowserTest, +IN_PROC_BROWSER_TEST_F(ExtensionSettingsUIBrowserTest, TestSafetyHubMenuNotificationDismissed) { Profile* profile = browser()->profile(); extensions::ExtensionPrefs* extension_prefs =
diff --git a/chrome/browser/ui/webui/extensions/extensions_ui.cc b/chrome/browser/ui/webui/extensions/extensions_ui.cc index f2a7f14..d5e9600 100644 --- a/chrome/browser/ui/webui/extensions/extensions_ui.cc +++ b/chrome/browser/ui/webui/extensions/extensions_ui.cc
@@ -461,8 +461,6 @@ "enableUserPermittedSites", base::FeatureList::IsEnabled( extensions_features::kExtensionsMenuAccessControlWithPermittedSites)); - source->AddBoolean("safetyHubShowReviewPanel", - base::FeatureList::IsEnabled(features::kSafetyHub)); // MV2 deprecation. auto* mv2_experiment_manager = ManifestV2ExperimentManager::Get(profile);
diff --git a/chrome/browser/ui/webui/settings/safety_hub_handler_unittest.cc b/chrome/browser/ui/webui/settings/safety_hub_handler_unittest.cc index e1f5b4c4..ae33885 100644 --- a/chrome/browser/ui/webui/settings/safety_hub_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/safety_hub_handler_unittest.cc
@@ -1366,7 +1366,6 @@ SafetyHubHandlerEitherAbusiveOrUnusedPermissionRevocationDisabledTest() { std::vector<base::test::FeatureRef> enabled_features; std::vector<base::test::FeatureRef> disabled_features; - enabled_features.push_back(features::kSafetyHub); disabled_features.push_back( content_settings::features:: kSafetyCheckUnusedSitePermissionsForSupportedChooserPermissions);
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 159fe908..df69242 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1554,6 +1554,7 @@ {"accountAwareRowSubtitle", IDS_SETTINGS_PEOPLE_ACCOUNT_AWARE_SIGNIN_ACCOUNT_ROW_SUBTITLE}, {"pendingStateAvatarRowSubtitle", IDS_SETTINGS_PENDING_STATE_DESCRIPTION}, + {"pendingSecondaryButton", IDS_PROFILES_ACCOUNT_REMOVAL_TITLE}, }; html_source->AddLocalizedStrings(kLocalizedStrings); @@ -2214,68 +2215,6 @@ html_source->AddLocalizedStrings(kLocalizedStrings); } -void AddSafetyCheckStrings(content::WebUIDataSource* html_source) { - static constexpr webui::LocalizedString kLocalizedStrings[] = { - {"safetyCheckReview", IDS_SETTINGS_SAFETY_CHECK_REVIEW}, - {"safetyCheckNotificationPermissionReviewIgnoredToastLabel", - IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_IGNORED_TOAST_LABEL}, - {"safetyCheckNotificationPermissionReviewBlockedToastLabel", - IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_BLOCKED_TOAST_LABEL}, - {"safetyCheckNotificationPermissionReviewResetToastLabel", - IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_RESET_TOAST_LABEL}, - {"safetyCheckNotificationPermissionReviewDontAllowLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_DONT_ALLOW_LABEL}, - {"safetyCheckNotificationPermissionReviewDontAllowAriaLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_DONT_ALLOW_ARIA_LABEL}, - {"safetyCheckNotificationPermissionReviewIgnoreLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_IGNORE_LABEL}, - {"safetyCheckNotificationPermissionReviewIgnoreAriaLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_IGNORE_ARIA_LABEL}, - {"safetyCheckNotificationPermissionReviewResetLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_RESET_LABEL}, - {"safetyCheckNotificationPermissionReviewResetAriaLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_RESET_ARIA_LABEL}, - {"safetyCheckNotificationPermissionReviewMoreActionsAriaLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_MORE_ACTIONS_ARIA_LABEL}, - {"safetyCheckNotificationPermissionReviewUndo", - IDS_SETTINGS_SAFETY_CHECK_TOAST_UNDO_BUTTON_LABEL}, - {"safetyCheckNotificationPermissionReviewBlockAllLabel", - IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_BLOCK_ALL_LABEL}, - {"safetyCheckUnusedSitePermissionsAllowAgainAriaLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_ALLOW_AGAIN_ARIA_LABEL}, - {"safetyCheckUnusedSitePermissionsAllowAgainLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_ALLOW_AGAIN_LABEL}, - {"safetyCheckUnusedSitePermissionsGotItLabel", IDS_SETTINGS_GOT_IT}, - {"safetyCheckUnusedSitePermissionsRemovedOnePermissionLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_ONE_PERMISSION_LABEL}, - {"safetyCheckUnusedSitePermissionsRemovedTwoPermissionsLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_TWO_PERMISSIONS_LABEL}, - {"safetyCheckUnusedSitePermissionsRemovedThreePermissionsLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_THREE_PERMISSIONS_LABEL}, - {"safetyCheckUnusedSitePermissionsRemovedFourOrMorePermissionsLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_FOUR_OR_MORE_PERMISSIONS_LABEL}, - {"safetyHubUnusedSitePermissionsRemovedOnePermissionLabel", - IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_ONE_PERMISSION_LABEL}, - {"safetyHubUnusedSitePermissionsRemovedTwoPermissionsLabel", - IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_TWO_PERMISSIONS_LABEL}, - {"safetyHubUnusedSitePermissionsRemovedThreePermissionsLabel", - IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_THREE_PERMISSIONS_LABEL}, - {"safetyHubUnusedSitePermissionsRemovedFourOrMorePermissionsLabel", - IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_FOUR_OR_MORE_PERMISSIONS_LABEL}, - {"safetyCheckUnusedSitePermissionsToastLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_TOAST_LABEL}, - {"safetyCheckUnusedSitePermissionsUndoLabel", - IDS_SETTINGS_SAFETY_CHECK_TOAST_UNDO_BUTTON_LABEL}, - {"safetyCheckUnusedSitePermissionsSettingLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_SETTING_LABEL}, - {"safetyCheckUnusedSitePermissionsSettingSublabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_SETTING_SUBLABEL}, - {"safetyHubAbusiveNotificationPermissionsSettingSublabel", - IDS_SETTINGS_SAFETY_HUB_ABUSIVE_NOTIFICATION_PERMISSIONS_SETTING_SUBLABEL}, - }; - html_source->AddLocalizedStrings(kLocalizedStrings); -} - void AddSafetyHubStrings(content::WebUIDataSource* html_source) { static constexpr webui::LocalizedString kLocalizedStrings[] = { {"safetyHub", IDS_SETTINGS_SAFETY_HUB}, @@ -2312,6 +2251,64 @@ IDS_SETTINGS_SAFETY_HUB_VERSION_RELAUNCH_ARIA_LABEL}, {"safetyHubSBNavigationAriaLabel", IDS_SETTINGS_SAFETY_HUB_SB_NAVIGATION_ARIA_LABEL}, + {"safetyHubReview", IDS_SETTINGS_SAFETY_CHECK_REVIEW}, + {"safetyHubNotificationPermissionReviewIgnoredToastLabel", + IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_IGNORED_TOAST_LABEL}, + {"safetyHubNotificationPermissionReviewBlockedToastLabel", + IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_BLOCKED_TOAST_LABEL}, + {"safetyHubNotificationPermissionReviewResetToastLabel", + IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_RESET_TOAST_LABEL}, + {"safetyHubNotificationPermissionReviewDontAllowLabel", + IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_DONT_ALLOW_LABEL}, + {"safetyHubNotificationPermissionReviewDontAllowAriaLabel", + IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_DONT_ALLOW_ARIA_LABEL}, + {"safetyHubNotificationPermissionReviewIgnoreLabel", + IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_IGNORE_LABEL}, + {"safetyHubNotificationPermissionReviewIgnoreAriaLabel", + IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_IGNORE_ARIA_LABEL}, + {"safetyHubNotificationPermissionReviewResetLabel", + IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_RESET_LABEL}, + {"safetyHubNotificationPermissionReviewResetAriaLabel", + IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_RESET_ARIA_LABEL}, + {"safetyHubNotificationPermissionReviewMoreActionsAriaLabel", + IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_MORE_ACTIONS_ARIA_LABEL}, + {"safetyHubNotificationPermissionReviewUndo", + IDS_SETTINGS_SAFETY_CHECK_TOAST_UNDO_BUTTON_LABEL}, + {"safetyHubNotificationPermissionReviewBlockAllLabel", + IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_BLOCK_ALL_LABEL}, + {"safetyHubUnusedSitePermissionsAllowAgainAriaLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_ALLOW_AGAIN_ARIA_LABEL}, + {"safetyHubUnusedSitePermissionsAllowAgainLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_ALLOW_AGAIN_LABEL}, + {"safetyHubUnusedSitePermissionsGotItLabel", IDS_SETTINGS_GOT_IT}, + {"safetyHubUnusedSitePermissionsRemovedOnePermissionLabel", + IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_ONE_PERMISSION_LABEL}, + {"safetyHubUnusedSitePermissionsRemovedTwoPermissionsLabel", + IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_TWO_PERMISSIONS_LABEL}, + {"safetyHubUnusedSitePermissionsRemovedThreePermissionsLabel", + IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_THREE_PERMISSIONS_LABEL}, + {"safetyHubUnusedSitePermissionsRemovedFourOrMorePermissionsLabel", + IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_REMOVED_FOUR_OR_MORE_PERMISSIONS_LABEL}, + {"safetyHubUnusedSitePermissionsToastLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_TOAST_LABEL}, + {"safetyHubUnusedSitePermissionsUndoLabel", + IDS_SETTINGS_SAFETY_CHECK_TOAST_UNDO_BUTTON_LABEL}, + {"safetyHubUnusedSitePermissionsSettingLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_SETTING_LABEL}, + {"safetyHubUnusedSitePermissionsSettingSublabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_SETTING_SUBLABEL}, + {"safetyHubAbusiveNotificationPermissionsSettingSublabel", + IDS_SETTINGS_SAFETY_HUB_ABUSIVE_NOTIFICATION_PERMISSIONS_SETTING_SUBLABEL}, + // TODO(crbug.com/328773301): Remove after + // SafetyHubAbusiveNotificationRevocation is launched. + {"safetyCheckUnusedSitePermissionsRemovedOnePermissionLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_ONE_PERMISSION_LABEL}, + {"safetyCheckUnusedSitePermissionsRemovedTwoPermissionsLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_TWO_PERMISSIONS_LABEL}, + {"safetyCheckUnusedSitePermissionsRemovedThreePermissionsLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_THREE_PERMISSIONS_LABEL}, + {"safetyCheckUnusedSitePermissionsRemovedFourOrMorePermissionsLabel", + IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_REMOVED_FOUR_OR_MORE_PERMISSIONS_LABEL}, }; html_source->AddLocalizedStrings(kLocalizedStrings); @@ -3738,7 +3735,6 @@ AddPrivacySandboxStrings(html_source, profile); AddPrivacyGuideStrings(html_source); AddPrivacyStrings(html_source, profile); - AddSafetyCheckStrings(html_source); AddSafetyHubStrings(html_source); AddResetStrings(html_source, profile); AddSearchEnginesStrings(html_source);
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc index d847005..afe3bd2a1 100644 --- a/chrome/browser/ui/webui/settings/settings_ui.cc +++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -425,34 +425,22 @@ plural_string_handler->AddLocalizedString("securityKeysNewPIN", IDS_SETTINGS_SECURITY_KEYS_NEW_PIN); plural_string_handler->AddLocalizedString( - "safetyCheckExtensionsReviewLabel", + "safetyHubExtensionsReviewLabel", IDS_SETTINGS_SAFETY_CHECK_REVIEW_EXTENSIONS); plural_string_handler->AddLocalizedString( - "safetyCheckNotificationPermissionReviewHeaderLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_HEADER_LABEL); - plural_string_handler->AddLocalizedString( - "safetyCheckNotificationPermissionReviewBlockAllToastLabel", + "safetyHubNotificationPermissionReviewBlockAllToastLabel", IDS_SETTINGS_SAFETY_CHECK_NOTIFICATION_PERMISSION_REVIEW_BLOCK_ALL_TOAST_LABEL); plural_string_handler->AddLocalizedString( - "safetyCheckNotificationPermissionReviewPrimaryLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_PRIMARY_LABEL); - plural_string_handler->AddLocalizedString( - "safetyCheckUnusedSitePermissionsHeaderLabel", - IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_HEADER_LABEL); - plural_string_handler->AddLocalizedString( - "safetyCheckNotificationPermissionReviewSecondaryLabel", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_SECONDARY_LABEL); - plural_string_handler->AddLocalizedString( - "safetyCheckUnusedSitePermissionsPrimaryLabel", + "safetyHubUnusedSitePermissionsPrimaryLabel", IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_PRIMARY_LABEL); plural_string_handler->AddLocalizedString( - "safetyCheckUnusedSitePermissionsSecondaryLabel", + "safetyHubUnusedSitePermissionsSecondaryLabel", IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_SECONDARY_LABEL); plural_string_handler->AddLocalizedString( "safetyHubRevokedPermissionsSecondaryLabel", IDS_SETTINGS_SAFETY_HUB_REVOKED_PERMISSIONS_SECONDARY_LABEL); plural_string_handler->AddLocalizedString( - "safetyCheckUnusedSitePermissionsToastBulkLabel", + "safetyHubUnusedSitePermissionsToastBulkLabel", IDS_SETTINGS_SAFETY_CHECK_UNUSED_SITE_PERMISSIONS_TOAST_BULK_LABEL); plural_string_handler->AddLocalizedString( "safetyHubNotificationPermissionsPrimaryLabel", @@ -507,9 +495,6 @@ base::FeatureList::IsEnabled( safe_browsing::kSafetyHubAbusiveNotificationRevocation)); - html_source->AddBoolean("enableSafetyHub", - base::FeatureList::IsEnabled(features::kSafetyHub)); - // Mode B UX html_source->AddBoolean( "is3pcdCookieSettingsRedesignEnabled",
diff --git a/chrome/browser/ui/webui/signin/profile_picker_ui.cc b/chrome/browser/ui/webui/signin/profile_picker_ui.cc index 4b4deee..5f85237f7 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_ui.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_ui.cc
@@ -13,7 +13,6 @@ #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_avatar_icon_util.h" -#include "chrome/browser/profiles/profile_shortcut_manager.h" #include "chrome/browser/profiles/profiles_state.h" #include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/browser/signin/signin_util.h" @@ -41,6 +40,7 @@ #include "content/public/browser/web_ui_data_source.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/ui_base_features.h" +#include "ui/base/webui/resource_path.h" #include "ui/base/webui/web_ui_util.h" #include "ui/webui/webui_util.h" #include "url/gurl.h" @@ -74,17 +74,18 @@ std::string GetManagedDeviceDisclaimer() { std::optional<std::string> manager = chrome::GetDeviceManagerIdentity(); - int managed_id = - IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_DEVICE_MANAGED_DESCRIPTION; - int managed_by_id = - IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_DEVICE_MANAGED_BY_DESCRIPTION; if (!manager) { return std::string(); } + if (manager->empty()) { - return l10n_util::GetStringUTF8(managed_id); + return l10n_util::GetStringUTF8( + IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_DEVICE_MANAGED_DESCRIPTION); } - return l10n_util::GetStringFUTF8(managed_by_id, base::UTF8ToUTF16(*manager)); + + return l10n_util::GetStringFUTF8( + IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_DEVICE_MANAGED_BY_DESCRIPTION, + base::UTF8ToUTF16(*manager)); } int GetMainViewTitleId() { @@ -93,12 +94,7 @@ } void AddStrings(content::WebUIDataSource* html_source) { - int profile_type_choice_subtitle = - base::FeatureList::IsEnabled(switches::kExplicitBrowserSigninUIOnDesktop) - ? IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_UNO - : IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE; - - static webui::LocalizedString kLocalizedStrings[] = { + constexpr webui::LocalizedString kLocalizedStrings[] = { {"mainViewSubtitle", IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE}, {"addSpaceButton", IDS_PROFILE_PICKER_ADD_SPACE_BUTTON}, {"askOnStartupCheckboxText", IDS_PROFILE_PICKER_ASK_ON_STARTUP}, @@ -127,7 +123,6 @@ {"backButtonAriaLabel", IDS_PROFILE_PICKER_BACK_BUTTON_ARIA_LABEL}, {"profileTypeChoiceTitle", IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_TITLE}, - {"profileTypeChoiceSubtitle", profile_type_choice_subtitle}, {"notNowButtonLabel", IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_NOT_NOW_BUTTON_LABEL}, {"profileSwitchTitle", IDS_PROFILE_PICKER_PROFILE_SWITCH_TITLE}, @@ -139,21 +134,33 @@ {"removeWarningSignedInProfile", IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE}, {"ok", IDS_OK}, + {"signInButtonLabel", + IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_SIGNIN_BUTTON_LABEL}, }; html_source->AddLocalizedStrings(kLocalizedStrings); html_source->AddLocalizedString("mainViewTitle", GetMainViewTitleId()); html_source->AddLocalizedString( - "signInButtonLabel", - IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_SIGNIN_BUTTON_LABEL); + "profileTypeChoiceSubtitle", + base::FeatureList::IsEnabled(switches::kExplicitBrowserSigninUIOnDesktop) + ? IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_UNO + : IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE); - ProfilePicker::AvailabilityOnStartup availability_on_startup = + html_source->AddString("minimumPickerSize", + base::StringPrintf("%ipx", kMinimumPickerSizePx)); + + html_source->AddString("managedDeviceDisclaimer", + GetManagedDeviceDisclaimer()); +} + +void AddPolicies(content::WebUIDataSource* html_source) { + bool ask_on_startup_allowed = static_cast<ProfilePicker::AvailabilityOnStartup>( g_browser_process->local_state()->GetInteger( - prefs::kBrowserProfilePickerAvailabilityOnStartup)); - bool ask_on_startup_allowed = - availability_on_startup == ProfilePicker::AvailabilityOnStartup::kEnabled; + prefs::kBrowserProfilePickerAvailabilityOnStartup)) == + ProfilePicker::AvailabilityOnStartup::kEnabled; + html_source->AddBoolean("isAskOnStartupAllowed", ask_on_startup_allowed); html_source->AddBoolean("askOnStartup", g_browser_process->local_state()->GetBoolean( prefs::kBrowserShowProfilePickerOnStartup)); @@ -166,34 +173,22 @@ true); #endif - html_source->AddString("minimumPickerSize", - base::StringPrintf("%ipx", kMinimumPickerSizePx)); - - html_source->AddInteger("placeholderAvatarIndex", - profiles::GetPlaceholderAvatarIndex()); - - html_source->AddString("managedDeviceDisclaimer", - GetManagedDeviceDisclaimer()); - - // Add policies. html_source->AddBoolean("isBrowserSigninAllowed", IsBrowserSigninAllowed()); html_source->AddBoolean("isForceSigninEnabled", signin_util::IsForceSigninEnabled()); html_source->AddBoolean("isGuestModeEnabled", profiles::IsGuestModeEnabled()); html_source->AddBoolean("isProfileCreationAllowed", profiles::IsProfileCreationAllowed()); - html_source->AddBoolean("profileShortcutsEnabled", - ProfileShortcutManager::IsFeatureEnabled()); - html_source->AddBoolean("isAskOnStartupAllowed", ask_on_startup_allowed); +} - html_source->AddResourcePath("images/left_banner.svg", - IDR_SIGNIN_IMAGES_SHARED_LEFT_BANNER_SVG); - html_source->AddResourcePath("images/left_banner_dark.svg", - IDR_SIGNIN_IMAGES_SHARED_LEFT_BANNER_DARK_SVG); - html_source->AddResourcePath("images/right_banner.svg", - IDR_SIGNIN_IMAGES_SHARED_RIGHT_BANNER_SVG); - html_source->AddResourcePath("images/right_banner_dark.svg", - IDR_SIGNIN_IMAGES_SHARED_RIGHT_BANNER_DARK_SVG); +void AddResourcePaths(content::WebUIDataSource* html_source) { + constexpr webui::ResourcePath kResourcePaths[] = { + {"left_banner.svg", IDR_SIGNIN_IMAGES_SHARED_LEFT_BANNER_SVG}, + {"left_banner_dark.svg", IDR_SIGNIN_IMAGES_SHARED_LEFT_BANNER_DARK_SVG}, + {"right_banner.svg", IDR_SIGNIN_IMAGES_SHARED_RIGHT_BANNER_SVG}, + {"right_banner_dark.svg", IDR_SIGNIN_IMAGES_SHARED_RIGHT_BANNER_DARK_SVG}, + }; + html_source->AddResourcePaths(kResourcePaths); } } // namespace @@ -223,7 +218,11 @@ // ends up being the URL) when we try to get it on startup for a11y purposes. web_ui->OverrideTitle(l10n_util::GetStringUTF16(GetMainViewTitleId())); + // Add all resources. AddStrings(html_source); + AddPolicies(html_source); + AddResourcePaths(html_source); + webui::SetupWebUIDataSource(html_source, kProfilePickerResources, IDR_PROFILE_PICKER_PROFILE_PICKER_HTML); }
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn index 6e09804..3df4a1f 100644 --- a/chrome/browser/web_applications/BUILD.gn +++ b/chrome/browser/web_applications/BUILD.gn
@@ -20,6 +20,7 @@ "commands/command_result.h", "commands/compute_app_size_command.cc", "commands/compute_app_size_command.h", + "commands/computed_app_size.cc", "commands/computed_app_size.h", "commands/dedupe_install_urls_command.cc", "commands/dedupe_install_urls_command.h", @@ -189,6 +190,8 @@ "isolated_web_apps/update_manifest/update_manifest.h", "isolated_web_apps/update_manifest/update_manifest_fetcher.cc", "isolated_web_apps/update_manifest/update_manifest_fetcher.h", + "jobs/get_progressive_web_app_size_job.cc", + "jobs/get_progressive_web_app_size_job.h", "jobs/install_from_info_job.cc", "jobs/install_from_info_job.h", "jobs/install_placeholder_job.cc",
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc index 3b268d0..787a0a1d8 100644 --- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc +++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
@@ -1,4 +1,4 @@ -// Copyright 2021 The Chromium Authors +// 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. @@ -59,6 +59,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/app_service/publisher_helper.h" #include "chrome/browser/web_applications/commands/compute_app_size_command.h" +#include "chrome/browser/web_applications/commands/computed_app_size.h" #include "chrome/browser/web_applications/locks/app_lock.h" #include "chrome/browser/web_applications/mojom/user_display_mode.mojom-shared.h" #include "chrome/browser/web_applications/os_integration/os_integration_manager.h" @@ -1983,13 +1984,13 @@ void WebAppPublisherHelper::OnGetWebAppSize( webapps::AppId app_id, - std::optional<ComputedAppSize> size) { + std::optional<ComputedAppSizeWithOrigin> size) { auto app = std::make_unique<apps::App>(apps::AppType::kWeb, app_id); if (!size.has_value()) { return; } - app->app_size_in_bytes = size->app_size_in_bytes; - app->data_size_in_bytes = size->data_size_in_bytes; + app->app_size_in_bytes = size->app_size_in_bytes(); + app->data_size_in_bytes = size->data_size_in_bytes(); delegate_->PublishWebApp(std::move(app)); }
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h index d0b43f70..67ae255c 100644 --- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.h +++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.h
@@ -1,4 +1,4 @@ -// Copyright 2021 The Chromium Authors +// 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. @@ -93,10 +93,10 @@ namespace web_app { +class ComputedAppSizeWithOrigin; class WebApp; class WebAppProvider; enum class RunOnOsLoginMode; -struct ComputedAppSize; namespace mojom { enum class UserDisplayMode : int32_t; @@ -410,7 +410,7 @@ apps::LaunchContainer container); void OnGetWebAppSize(webapps::AppId app_id, - std::optional<ComputedAppSize> size); + std::optional<ComputedAppSizeWithOrigin> size); const raw_ptr<Profile, DanglingUntriaged> profile_;
diff --git a/chrome/browser/web_applications/commands/compute_app_size_command.cc b/chrome/browser/web_applications/commands/compute_app_size_command.cc index f246fdc..d72a474d 100644 --- a/chrome/browser/web_applications/commands/compute_app_size_command.cc +++ b/chrome/browser/web_applications/commands/compute_app_size_command.cc
@@ -7,46 +7,25 @@ #include <memory> #include <utility> -#include "base/barrier_callback.h" -#include "base/debug/crash_logging.h" -#include "base/files/file_util.h" -#include "base/functional/bind.h" -#include "base/functional/callback.h" -#include "base/functional/callback_forward.h" -#include "base/memory/ptr_util.h" -#include "base/memory/weak_ptr.h" #include "chrome/browser/web_applications/commands/command_result.h" #include "chrome/browser/web_applications/commands/web_app_command.h" #include "chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.h" #include "chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.h" -#include "chrome/browser/web_applications/locks/app_lock.h" -#include "chrome/browser/web_applications/os_integration/os_integration_manager.h" -#include "chrome/browser/web_applications/web_app_constants.h" -#include "chrome/browser/web_applications/web_app_icon_generator.h" -#include "chrome/browser/web_applications/web_app_icon_manager.h" +#include "chrome/browser/web_applications/jobs/get_progressive_web_app_size_job.h" #include "chrome/browser/web_applications/web_app_registrar.h" -#include "chrome/browser/web_applications/web_app_sync_bridge.h" -#include "chrome/browser/web_applications/web_app_utils.h" -#include "components/services/app_service/public/cpp/app_types.h" -#include "components/webapps/common/web_app_id.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/dom_storage_context.h" -#include "content/public/browser/storage_partition.h" -#include "content/public/browser/storage_partition_config.h" -#include "content/public/browser/storage_usage_info.h" namespace web_app { ComputeAppSizeCommand::ComputeAppSizeCommand( const webapps::AppId& app_id, Profile* profile, - base::OnceCallback<void(std::optional<ComputedAppSize>)> callback) - : WebAppCommand<AppLock, std::optional<ComputedAppSize>>( + base::OnceCallback<void(std::optional<ComputedAppSizeWithOrigin>)> callback) + : WebAppCommand<AppLock, std::optional<ComputedAppSizeWithOrigin>>( "ComputeAppSizeCommand", AppLockDescription(app_id), std::move(callback), /*args_for_shutdown=*/ - ComputedAppSize()), + ComputedAppSizeWithOrigin()), app_id_(app_id), profile_(profile) { GetMutableDebugValue().Set("app_id", app_id); @@ -72,84 +51,29 @@ return; } - // TODO(crbug.com/378625836): Extract PWA path to a separate job. - lock_->icon_manager().GetIconsSizeForApp( - app_id_, base::BindOnce(&ComputeAppSizeCommand::OnGetIconSize, - weak_factory_.GetWeakPtr())); -} - -void ComputeAppSizeCommand::OnGetIconSize(uint64_t icon_size) { - size_.app_size_in_bytes = icon_size; - GetMutableDebugValue().Set("app_size_in_bytes", base::ToString(icon_size)); - GetDataSize(); -} - -void ComputeAppSizeCommand::GetDataSize() { - content::StoragePartition* storage_partition = - profile_->GetDefaultStoragePartition(); - quota_helper_ = BrowsingDataQuotaHelper::Create(storage_partition); - - quota_helper_->StartFetching( - base::BindOnce(&ComputeAppSizeCommand::OnQuotaModelInfoLoaded, - weak_factory_.GetWeakPtr())); -} - -void ComputeAppSizeCommand::OnQuotaModelInfoLoaded( - const SiteDataSizeCollector::QuotaStorageUsageInfoList& - quota_storage_info_list) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (!lock_->registrar().IsInRegistrar(app_id_)) { - // (crbug/1480755): This crash is not expected as the app is checked for - // validity when the command is evoked in StartWithLock. We are also still - // holding the lock so a change to the status of the app throughout is not - // expected. - NOTREACHED(); - } - - GURL gurl = lock_->registrar().GetAppById(app_id_)->start_url(); - if (!gurl.is_valid()) { - // (crbug/1480755): This crash is not expected as the app is checked for - // validity when the command is evoked in StartWithLock. We are also still - // holding the lock so a change to the status of the app throughout is not - // expected. - NOTREACHED(); - } - origin_ = url::Origin::Create(gurl); - - // TODO(crbug.com/40214522): Optimise the computation of the following loop. - for (const auto& quota_info : quota_storage_info_list) { - if (origin_ == quota_info.storage_key.origin()) { - size_.data_size_in_bytes += - quota_info.temporary_usage + quota_info.syncable_usage; - } - } - GetMutableDebugValue().Set("data_size_in_bytes", - base::ToString(size_.data_size_in_bytes)); - - profile_->GetDefaultStoragePartition() - ->GetDOMStorageContext() - ->GetLocalStorageUsage( - base::BindOnce(&ComputeAppSizeCommand::OnLocalStorageModelInfoLoaded, + // If an app is not an IWA, it's considerered to be a PWA. + get_progressive_web_app_size_job_ = + std::make_unique<GetProgressiveWebAppSizeJob>( + profile_.get(), app_id_, GetMutableDebugValue(), + base::BindOnce(&ComputeAppSizeCommand::OnProgressiveAppSizeComputed, weak_factory_.GetWeakPtr())); -} -void ComputeAppSizeCommand::OnLocalStorageModelInfoLoaded( - const std::vector<content::StorageUsageInfo>& local_storage_info_list) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - for (const auto& local_storage_info : local_storage_info_list) { - url::Origin local_origin = local_storage_info.storage_key.origin(); - if (origin_ == local_origin) { - size_.data_size_in_bytes += local_storage_info.total_size_bytes; - } - } - - ReportResultAndDestroy(CommandResult::kSuccess); + get_progressive_web_app_size_job_->Start(lock_.get()); } void ComputeAppSizeCommand::OnIsolatedAppSizeComputed( - std::optional<GetIsolatedWebAppSizeJobResult> result) { + std::optional<ComputedAppSizeWithOrigin> result) { if (result) { - size_ = std::move(result->size); + size_ = std::move(result.value()); + } + ReportResultAndDestroy(result ? CommandResult::kSuccess + : CommandResult::kFailure); +} + +void ComputeAppSizeCommand::OnProgressiveAppSizeComputed( + std::optional<ComputedAppSizeWithOrigin> result) { + if (result) { + size_ = std::move(result.value()); } ReportResultAndDestroy(result ? CommandResult::kSuccess : CommandResult::kFailure); @@ -158,7 +82,7 @@ void ComputeAppSizeCommand::ReportResultAndDestroy(CommandResult result) { CompleteAndSelfDestruct(result, result == CommandResult::kSuccess ? std::move(size_) - : ComputedAppSize()); + : ComputedAppSizeWithOrigin()); } } // namespace web_app
diff --git a/chrome/browser/web_applications/commands/compute_app_size_command.h b/chrome/browser/web_applications/commands/compute_app_size_command.h index f91d9568..66fb3ad 100644 --- a/chrome/browser/web_applications/commands/compute_app_size_command.h +++ b/chrome/browser/web_applications/commands/compute_app_size_command.h
@@ -1,4 +1,4 @@ -// Copyright 2023 The Chromium Authors +// 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. @@ -10,37 +10,28 @@ #include <optional> #include <vector> -#include "base/files/file_path.h" #include "base/functional/callback.h" -#include "chrome/browser/browsing_data/site_data_size_collector.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/commands/computed_app_size.h" #include "chrome/browser/web_applications/commands/web_app_command.h" #include "chrome/browser/web_applications/locks/app_lock.h" -#include "components/browsing_data/content/browsing_data_quota_helper.h" -#include "components/services/app_service/public/cpp/app_types.h" #include "components/webapps/common/web_app_id.h" -#include "content/public/browser/storage_usage_info.h" - -namespace content { -struct StorageUsageInfo; -} namespace web_app { class AppLock; class GetIsolatedWebAppSizeJob; - -struct GetIsolatedWebAppSizeJobResult; +class GetProgressiveWebAppSizeJob; // ComputeAppSizeCommand calculates the app and data size of a given app class ComputeAppSizeCommand - : public WebAppCommand<AppLock, std::optional<ComputedAppSize>> { + : public WebAppCommand<AppLock, std::optional<ComputedAppSizeWithOrigin>> { public: ComputeAppSizeCommand( const webapps::AppId& app_id, Profile* profile, - base::OnceCallback<void(std::optional<ComputedAppSize>)> callback); + base::OnceCallback<void(std::optional<ComputedAppSizeWithOrigin>)> + callback); ~ComputeAppSizeCommand() override; @@ -49,29 +40,24 @@ void StartWithLock(std::unique_ptr<AppLock> lock) override; private: - void OnGetIconSize(uint64_t size); - void GetDataSize(); - void OnQuotaModelInfoLoaded( - const SiteDataSizeCollector::QuotaStorageUsageInfoList& - quota_storage_info_list); - void OnLocalStorageModelInfoLoaded( - const std::vector<content::StorageUsageInfo>& local_storage_info_list); void ReportResultAndDestroy(CommandResult result); void OnIsolatedAppSizeComputed( - std::optional<GetIsolatedWebAppSizeJobResult> result); - - scoped_refptr<BrowsingDataQuotaHelper> quota_helper_; + std::optional<ComputedAppSizeWithOrigin> result); + void OnProgressiveAppSizeComputed( + std::optional<ComputedAppSizeWithOrigin> result); std::unique_ptr<AppLock> lock_; const webapps::AppId app_id_; const raw_ptr<Profile> profile_; - url::Origin origin_; - ComputedAppSize size_; + ComputedAppSizeWithOrigin size_; std::unique_ptr<GetIsolatedWebAppSizeJob> get_isolated_web_app_size_job_; + std::unique_ptr<GetProgressiveWebAppSizeJob> + get_progressive_web_app_size_job_; + base::WeakPtrFactory<ComputeAppSizeCommand> weak_factory_{this}; };
diff --git a/chrome/browser/web_applications/commands/compute_app_size_command_browsertest.cc b/chrome/browser/web_applications/commands/compute_app_size_command_browsertest.cc index 9da4ffa..4d53fc8 100644 --- a/chrome/browser/web_applications/commands/compute_app_size_command_browsertest.cc +++ b/chrome/browser/web_applications/commands/compute_app_size_command_browsertest.cc
@@ -4,6 +4,9 @@ #include "chrome/browser/web_applications/commands/compute_app_size_command.h" +#include <algorithm> +#include <utility> + #include "base/test/run_until.h" #include "base/test/test_future.h" #include "chrome/browser/ui/browser.h" @@ -42,10 +45,11 @@ // sequence to this process, it requires multiple events. Due to all of this, // we are resorting to polling for non-zero values. while (true) { - base::test::TestFuture<std::optional<ComputedAppSize>> app_size; + base::test::TestFuture<std::optional<ComputedAppSizeWithOrigin>> app_size; provider.scheduler().ComputeAppSize(app_id, app_size.GetCallback()); - if (app_size.Get().value().app_size_in_bytes > 0u && - app_size.Get().value().data_size_in_bytes > 0u) { + auto proxy = std::move(app_size.Get()); + + if (proxy->app_size_in_bytes() > 0u && proxy->data_size_in_bytes() > 0u) { return true; } } @@ -58,11 +62,9 @@ IN_PROC_BROWSER_TEST_F(ComputeAppSizeCommandForWebAppBrowserTest, RetrieveWebAppSize) { ASSERT_TRUE(embedded_test_server()->Start()); - GURL app_url = embedded_test_server()->GetURL("/web_apps/basic.html"); webapps::AppId app_id = InstallWebAppFromPage(browser(), app_url); EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), app_url)); - const char* script = R"( localStorage.setItem('data', 'data'.repeat(5000)); location.href = 'about:blank'; @@ -72,7 +74,6 @@ EXPECT_TRUE( EvalJs(browser()->tab_strip_model()->GetActiveWebContents(), script) .ExtractBool()); - ASSERT_TRUE(CheckAppSizesNotNull(provider(), app_id)); }
diff --git a/chrome/browser/web_applications/commands/computed_app_size.cc b/chrome/browser/web_applications/commands/computed_app_size.cc new file mode 100644 index 0000000..983da4c --- /dev/null +++ b/chrome/browser/web_applications/commands/computed_app_size.cc
@@ -0,0 +1,44 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/web_applications/commands/computed_app_size.h" + +#include <iostream> +#include <optional> + +namespace web_app { + +ComputedAppSizeWithOrigin::ComputedAppSizeWithOrigin() = default; +ComputedAppSizeWithOrigin::~ComputedAppSizeWithOrigin() = default; + +// copy-constructor, needed due to origin is optional +ComputedAppSizeWithOrigin::ComputedAppSizeWithOrigin( + ComputedAppSizeWithOrigin const& value) + : app_size_in_bytes_(value.app_size_in_bytes()), + data_size_in_bytes_(value.data_size_in_bytes()), + origin_(value.origin()) {} + +ComputedAppSizeWithOrigin::ComputedAppSizeWithOrigin( + uint64_t app_size_in_bytes, + uint64_t data_size_in_bytes, + std::optional<url::Origin> origin) + : app_size_in_bytes_(app_size_in_bytes), + data_size_in_bytes_(data_size_in_bytes), + origin_(origin) { + CHECK(!origin.has_value() || *origin != url::Origin()); +} + +uint64_t ComputedAppSizeWithOrigin::app_size_in_bytes() const { + return app_size_in_bytes_; +} + +uint64_t ComputedAppSizeWithOrigin::data_size_in_bytes() const { + return data_size_in_bytes_; +} + +const std::optional<url::Origin> ComputedAppSizeWithOrigin::origin() const { + return origin_; +} + +} // namespace web_app
diff --git a/chrome/browser/web_applications/commands/computed_app_size.h b/chrome/browser/web_applications/commands/computed_app_size.h index 088c561..1dd014b4 100644 --- a/chrome/browser/web_applications/commands/computed_app_size.h +++ b/chrome/browser/web_applications/commands/computed_app_size.h
@@ -1,4 +1,4 @@ -// Copyright 2024 The Chromium Authors +// 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. @@ -6,12 +6,33 @@ #define CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_COMPUTED_APP_SIZE_H_ #include <cstdint> +#include <optional> + +#include "url/origin.h" namespace web_app { -struct ComputedAppSize { - uint64_t app_size_in_bytes = 0; - uint64_t data_size_in_bytes = 0; +class ComputedAppSizeWithOrigin { + public: + ComputedAppSizeWithOrigin(); + ~ComputedAppSizeWithOrigin(); + + ComputedAppSizeWithOrigin(ComputedAppSizeWithOrigin const&); + // This CHECK-fails if `origin` is populated but not valid or empty + ComputedAppSizeWithOrigin(uint64_t app_size_in_bytes, + uint64_t data_size_in_bytes, + std::optional<url::Origin> origin); + + uint64_t app_size_in_bytes() const; + + uint64_t data_size_in_bytes() const; + + const std::optional<url::Origin> origin() const; + + private: + uint64_t app_size_in_bytes_ = 0; + uint64_t data_size_in_bytes_ = 0; + std::optional<url::Origin> origin_ = std::nullopt; }; } // namespace web_app
diff --git a/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.cc b/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.cc index 809edf6d..75e88b9 100644 --- a/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.cc +++ b/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.cc
@@ -1,4 +1,4 @@ -// Copyright 2023 The Chromium Authors +// 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. @@ -9,6 +9,7 @@ #include "base/barrier_callback.h" #include "base/barrier_closure.h" +#include "base/check.h" #include "base/functional/callback.h" #include "base/functional/callback_forward.h" #include "base/functional/callback_helpers.h" @@ -19,6 +20,7 @@ #include "chrome/browser/browsing_data/chrome_browsing_data_model_delegate.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_observer.h" +#include "chrome/browser/web_applications/commands/computed_app_size.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_install_command_helper.h" #include "chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.h" #include "chrome/browser/web_applications/locks/all_apps_lock.h" @@ -51,7 +53,7 @@ const auto isolated_web_apps = GetInstalledIwas(lock_->registrar()); if (!isolated_web_apps.empty()) { auto result_callback = - base::BarrierCallback<std::optional<GetIsolatedWebAppSizeJobResult>>( + base::BarrierCallback<std::optional<ComputedAppSizeWithOrigin>>( isolated_web_apps.size(), base::BindOnce( &GetIsolatedWebAppBrowsingDataCommand::CompleteCommand, @@ -73,16 +75,16 @@ } void GetIsolatedWebAppBrowsingDataCommand::CompleteCommand( - std::vector<std::optional<GetIsolatedWebAppSizeJobResult>> - app_size_results) { + std::vector<std::optional<ComputedAppSizeWithOrigin>> app_size_results) { base::flat_map<url::Origin, uint64_t> results; - for (const std::optional<GetIsolatedWebAppSizeJobResult>& app_size_result : + for (const std::optional<ComputedAppSizeWithOrigin>& app_size_result : app_size_results) { if (!app_size_result) { continue; } - results[app_size_result->iwa_origin] = - app_size_result->size.data_size_in_bytes; + CHECK(app_size_result.value().origin().has_value()); + results[app_size_result.value().origin().value()] = + app_size_result->ComputedAppSizeWithOrigin::data_size_in_bytes(); } CompleteAndSelfDestruct(CommandResult::kSuccess, std::move(results)); }
diff --git a/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.h b/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.h index 01647dd1..ab41c16 100644 --- a/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.h +++ b/chrome/browser/web_applications/isolated_web_apps/get_isolated_web_app_browsing_data_command.h
@@ -1,4 +1,4 @@ -// Copyright 2023 The Chromium Authors +// 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. @@ -25,8 +25,7 @@ namespace web_app { class GetIsolatedWebAppSizeJob; - -struct GetIsolatedWebAppSizeJobResult; +class ComputedAppSizeWithOrigin; // Computes the total browsing data usage in bytes of every installed Isolated // Web App. @@ -45,8 +44,7 @@ private: void CompleteCommand( - std::vector<std::optional<GetIsolatedWebAppSizeJobResult>> - app_size_results); + std::vector<std::optional<ComputedAppSizeWithOrigin>> app_size_results); const raw_ref<Profile> profile_; std::unique_ptr<AllAppsLock> lock_;
diff --git a/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.cc b/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.cc index c94d1ff..97643ed 100644 --- a/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.cc +++ b/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.cc
@@ -104,7 +104,7 @@ complete_callback_.Reset(); } - raw_ptr<Profile> profile_ = nullptr; + raw_ptr<Profile> profile_; base::OnceCallback<void(int64_t)> complete_callback_; std::unique_ptr<BrowsingDataModel> browsing_data_model_; base::WeakPtrFactory<StoragePartitionSizeEstimator> weak_ptr_factory_{this}; @@ -121,6 +121,7 @@ profile_(profile), debug_value_(debug_value), result_callback_(std::move(result_callback)) { + CHECK(profile_); debug_value_->Set("profile", profile->GetDebugName()); } @@ -203,10 +204,9 @@ return; } std::move(result_callback_) - .Run(GetIsolatedWebAppSizeJobResult{ - .iwa_origin = iwa_origin_, - .size = {.app_size_in_bytes = static_cast<uint64_t>(*bundle_size), - .data_size_in_bytes = browsing_data_size_}}); + .Run(web_app::ComputedAppSizeWithOrigin( + static_cast<uint64_t>(*bundle_size), browsing_data_size_, + iwa_origin_)); } void GetIsolatedWebAppSizeJob::CompleteJobWithError() {
diff --git a/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.h b/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.h index 0fd19719..459b65e 100644 --- a/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.h +++ b/chrome/browser/web_applications/isolated_web_apps/jobs/get_isolated_web_app_size_job.h
@@ -12,7 +12,6 @@ #include "base/memory/weak_ptr.h" #include "base/values.h" #include "chrome/browser/web_applications/commands/command_result.h" -#include "chrome/browser/web_applications/commands/computed_app_size.h" #include "components/webapps/common/web_app_id.h" #include "url/origin.h" @@ -20,17 +19,16 @@ namespace web_app { +class ComputedAppSizeWithOrigin; class WithAppResources; -struct GetIsolatedWebAppSizeJobResult { - url::Origin iwa_origin; - ComputedAppSize size; -}; - +// Calculates the total on-disk storage size for a give installed isolated web +// app, including both the web app's web platform storage as well as Chrome's +// internal storage of things like icons etc., including bundle size. class GetIsolatedWebAppSizeJob { public: - using ResultCallback = base::OnceCallback<void( - std::optional<GetIsolatedWebAppSizeJobResult> result)>; + using ResultCallback = + base::OnceCallback<void(std::optional<ComputedAppSizeWithOrigin> result)>; GetIsolatedWebAppSizeJob(Profile* profile, const webapps::AppId& app_id, @@ -50,7 +48,7 @@ url::Origin iwa_origin_; int pending_task_count_ = 0; uint64_t browsing_data_size_ = 0u; - raw_ptr<Profile> profile_ = nullptr; + const raw_ptr<Profile> profile_; raw_ptr<WithAppResources> lock_with_app_resources_ = nullptr; const raw_ref<base::Value::Dict> debug_value_; ResultCallback result_callback_;
diff --git a/chrome/browser/web_applications/jobs/get_progressive_web_app_size_job.cc b/chrome/browser/web_applications/jobs/get_progressive_web_app_size_job.cc new file mode 100644 index 0000000..ed1dc34 --- /dev/null +++ b/chrome/browser/web_applications/jobs/get_progressive_web_app_size_job.cc
@@ -0,0 +1,132 @@ +// 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/web_applications/jobs/get_progressive_web_app_size_job.h" + +#include "chrome/browser/browsing_data/chrome_browsing_data_model_delegate.h" +#include "chrome/browser/web_applications/commands/computed_app_size.h" +#include "chrome/browser/web_applications/locks/all_apps_lock.h" +#include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_icon_manager.h" +#include "chrome/browser/web_applications/web_app_registrar.h" +#include "content/public/browser/browser_context.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/storage_partition.h" +#include "content/public/browser/storage_usage_info.h" +#include "url/gurl.h" +#include "url/origin.h" + +namespace web_app { + +GetProgressiveWebAppSizeJob::GetProgressiveWebAppSizeJob( + Profile* profile, + const webapps::AppId& app_id, + base::Value::Dict& debug_value, + ResultCallback result_callback) + : app_id_(app_id), + profile_(profile), + debug_value_(debug_value), + result_callback_(std::move(result_callback)) { + debug_value_->Set("profile", profile->GetDebugName()); +} + +GetProgressiveWebAppSizeJob::~GetProgressiveWebAppSizeJob() = default; + +void GetProgressiveWebAppSizeJob::Start( + WithAppResources* lock_with_app_resources) { + CHECK(lock_with_app_resources); + lock_with_app_resources_ = lock_with_app_resources; + lock_with_app_resources_->icon_manager().GetIconsSizeForApp( + app_id_, + base::BindOnce(&GetProgressiveWebAppSizeJob::OnGetIconStorageUsage, + weak_factory_.GetWeakPtr())); +} + +void GetProgressiveWebAppSizeJob::OnGetIconStorageUsage(uint64_t icon_size) { + icon_size_ = icon_size; + debug_value_->Set("app_size_in_bytes", base::ToString(icon_size)); + GetDataSize(); +} + +void GetProgressiveWebAppSizeJob::GetDataSize() { + content::StoragePartition* storage_partition = + profile_->GetDefaultStoragePartition(); + quota_helper_ = BrowsingDataQuotaHelper::Create(storage_partition); + + quota_helper_->StartFetching( + base::BindOnce(&GetProgressiveWebAppSizeJob::OnQuotaModelInfoLoaded, + weak_factory_.GetWeakPtr())); +} + +void GetProgressiveWebAppSizeJob::OnQuotaModelInfoLoaded( + const SiteDataSizeCollector::QuotaStorageUsageInfoList& + quota_storage_info_list) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + if (!lock_with_app_resources_->registrar().IsInRegistrar(app_id_)) { + // (crbug.com/1480755): This crash is not expected as the app is checked for + // validity when the command is evoked in StartWithLock. We are also still + // holding the lock so a change to the status of the app throughout is not + // expected. + NOTREACHED(); + } + + GURL gurl = + lock_with_app_resources_->registrar().GetAppById(app_id_)->start_url(); + if (!gurl.is_valid()) { + // (crbug.com/1480755): This crash is not expected as the app is checked for + // validity when the command is evoked in StartWithLock. We are also still + // holding the lock so a change to the status of the app throughout is not + // expected. + NOTREACHED(); + } + origin_ = url::Origin::Create(gurl); + + // TODO(crbug.com/40214522): Optimise the computation of the following loop. + for (const auto& quota_info : quota_storage_info_list) { + if (origin_ == quota_info.storage_key.origin()) { + browsing_data_size_ += + quota_info.temporary_usage + quota_info.syncable_usage; + } + } + debug_value_->Set("data_size_in_bytes", base::ToString(browsing_data_size_)); + + profile_->GetDefaultStoragePartition() + ->GetDOMStorageContext() + ->GetLocalStorageUsage(base::BindOnce( + &GetProgressiveWebAppSizeJob::OnLocalStorageModelInfoLoaded, + weak_factory_.GetWeakPtr())); +} + +void GetProgressiveWebAppSizeJob::OnLocalStorageModelInfoLoaded( + const std::vector<content::StorageUsageInfo>& local_storage_info_list) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + for (const auto& local_storage_info : local_storage_info_list) { + url::Origin local_origin = local_storage_info.storage_key.origin(); + if (origin_ == local_origin) { + browsing_data_size_ += local_storage_info.total_size_bytes; + } + } + MaybeReturnSize(); +} + +void GetProgressiveWebAppSizeJob::MaybeReturnSize() { + if (browsing_data_size_ == 0u && icon_size_ == 0u) { + CompleteJobWithError(); + return; + } + + std::optional<web_app::ComputedAppSizeWithOrigin> proxy = + web_app::ComputedAppSizeWithOrigin(icon_size_, browsing_data_size_, + std::nullopt); + + std::move(result_callback_).Run(proxy); +} + +void GetProgressiveWebAppSizeJob::CompleteJobWithError() { + std::move(result_callback_).Run(/*result=*/std::nullopt); +} + +} // namespace web_app
diff --git a/chrome/browser/web_applications/jobs/get_progressive_web_app_size_job.h b/chrome/browser/web_applications/jobs/get_progressive_web_app_size_job.h new file mode 100644 index 0000000..e1e37da0 --- /dev/null +++ b/chrome/browser/web_applications/jobs/get_progressive_web_app_size_job.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 CHROME_BROWSER_WEB_APPLICATIONS_JOBS_GET_PROGRESSIVE_WEB_APP_SIZE_JOB_H_ +#define CHROME_BROWSER_WEB_APPLICATIONS_JOBS_GET_PROGRESSIVE_WEB_APP_SIZE_JOB_H_ + +#include "base/memory/scoped_refptr.h" +#include "chrome/browser/browsing_data/site_data_size_collector.h" +#include "chrome/browser/web_applications/web_app.h" +#include "components/webapps/common/web_app_id.h" +#include "url/origin.h" + +class Profile; + +namespace content { +struct StorageUsageInfo; +} + +namespace web_app { + +class WithAppResources; +class ComputedAppSizeWithOrigin; + +// Calculates the total on-disk storage size for a give installed web app, +// including both the web app's web platform storage as well as Chrome's +// internal storage of things like icons. +class GetProgressiveWebAppSizeJob { + public: + using ResultCallback = + base::OnceCallback<void(std::optional<ComputedAppSizeWithOrigin> result)>; + + GetProgressiveWebAppSizeJob(Profile* profile, + const webapps::AppId& app_id, + base::Value::Dict& debug_value, + ResultCallback result_callback); + ~GetProgressiveWebAppSizeJob(); + + void Start(WithAppResources* lock_with_app_resources); + + private: + void MaybeReturnSize(); + void CompleteJobWithError(); + void OnGetIconStorageUsage(uint64_t size); + void GetDataSize(); + void OnQuotaModelInfoLoaded( + const SiteDataSizeCollector::QuotaStorageUsageInfoList& + quota_storage_info_list); + void OnLocalStorageModelInfoLoaded( + const std::vector<content::StorageUsageInfo>& local_storage_info_list); + + const webapps::AppId app_id_; + uint64_t browsing_data_size_ = 0u; + uint64_t icon_size_ = 0u; + const raw_ptr<Profile> profile_; + raw_ptr<WithAppResources> lock_with_app_resources_ = nullptr; + const raw_ref<base::Value::Dict> debug_value_; + ResultCallback result_callback_; + scoped_refptr<BrowsingDataQuotaHelper> quota_helper_; + url::Origin origin_; + + base::WeakPtrFactory<GetProgressiveWebAppSizeJob> weak_factory_{this}; +}; + +} // namespace web_app + +#endif // CHROME_BROWSER_WEB_APPLICATIONS_JOBS_GET_PROGRESSIVE_WEB_APP_SIZE_JOB_H_
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.cc b/chrome/browser/web_applications/web_app_command_scheduler.cc index d6dd227..ca6cf2b4 100644 --- a/chrome/browser/web_applications/web_app_command_scheduler.cc +++ b/chrome/browser/web_applications/web_app_command_scheduler.cc
@@ -1,4 +1,4 @@ -// Copyright 2022 The Chromium Authors +// 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. @@ -26,6 +26,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/commands/clear_browsing_data_command.h" #include "chrome/browser/web_applications/commands/compute_app_size_command.h" +#include "chrome/browser/web_applications/commands/computed_app_size.h" #include "chrome/browser/web_applications/commands/dedupe_install_urls_command.h" #include "chrome/browser/web_applications/commands/external_app_resolution_command.h" #include "chrome/browser/web_applications/commands/fetch_install_info_from_install_url_command.h" @@ -518,7 +519,8 @@ void WebAppCommandScheduler::ComputeAppSize( const webapps::AppId& app_id, - base::OnceCallback<void(std::optional<ComputedAppSize>)> callback) { + base::OnceCallback<void(std::optional<ComputedAppSizeWithOrigin>)> + callback) { provider_->command_manager().ScheduleCommand( std::make_unique<ComputeAppSizeCommand>(app_id, &profile_.get(), std::move(callback)));
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.h b/chrome/browser/web_applications/web_app_command_scheduler.h index a5da50a6..441508a 100644 --- a/chrome/browser/web_applications/web_app_command_scheduler.h +++ b/chrome/browser/web_applications/web_app_command_scheduler.h
@@ -1,4 +1,4 @@ -// Copyright 2022 The Chromium Authors +// 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. @@ -10,14 +10,6 @@ #include <type_traits> #include <utility> -#include "base/containers/flat_map.h" -#include "base/functional/callback_forward.h" -#include "base/functional/callback_helpers.h" -#include "base/location.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/raw_ref.h" -#include "base/memory/weak_ptr.h" -#include "base/time/time.h" #include "base/types/expected.h" #include "base/version.h" #include "chrome/browser/apps/app_service/app_launch_params.h" @@ -27,10 +19,8 @@ #include "chrome/browser/web_applications/web_app_install_params.h" #include "chrome/browser/web_applications/web_app_management_type.h" #include "chrome/browser/web_applications/web_app_provider.h" -#include "components/services/app_service/public/cpp/app_launch_util.h" #include "components/webapps/browser/installable/installable_metrics.h" #include "components/webapps/browser/uninstall_result_code.h" -#include "components/webapps/common/web_app_id.h" class GURL; class Profile; @@ -50,6 +40,7 @@ namespace web_app { +class ComputedAppSizeWithOrigin; class IsolatedWebAppInstallSource; class IsolatedWebAppUrlInfo; class IsolatedWebAppUpdatePrepareAndStoreCommandUpdateInfo; @@ -68,7 +59,6 @@ enum class NavigateAndTriggerInstallDialogCommandResult; struct CleanupOrphanedIsolatedWebAppsCommandError; struct CleanupOrphanedIsolatedWebAppsCommandSuccess; -struct ComputedAppSize; struct ExternalInstallOptions; struct ExternallyManagedAppManagerInstallResult; struct InstallIsolatedWebAppCommandError; @@ -404,7 +394,8 @@ // Schedules a command that calculates the app and data size of a web app. void ComputeAppSize( const webapps::AppId& app_id, - base::OnceCallback<void(std::optional<ComputedAppSize>)> callback); + base::OnceCallback<void(std::optional<ComputedAppSizeWithOrigin>)> + callback); // The command callback type for `ScheduleCallback*`. // - `lock`: This provides access to read & write parts of the WebAppProvider
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt index bb7ddf9..2c0136fb 100644 --- a/chrome/build/android-arm32.pgo.txt +++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@ -chrome-android32-main-1736746872-e514ef74f980c47ceafd86e04b79d504b072e86c-77a482e6d2f3b2d4f7dd93761999631398997b02.profdata +chrome-android32-main-1736769296-5b1b6d713431240387bbb0cf12bf0926b0902e59-03b712dbd057f11864ee41f655aaa4cfdb1bf517.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt index 92c6614..f68d264c 100644 --- a/chrome/build/android-arm64.pgo.txt +++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@ -chrome-android64-main-1736760647-8c11d10505f11791ca11ed781955da7894fde6e5-9ec21920c1b4f409b3294ccc49ba9a22d0fbeebf.profdata +chrome-android64-main-1736779203-b991293f5dd8ca1c0390f56d694faa058ba52f45-24ca284b572fb69ea18465e3cda70b4bcf7e1bcc.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 9ce2bd7..b79beb1 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1736746872-6b2c5881f6a443ca6db3e5a04cc460d4deaa6b7f-77a482e6d2f3b2d4f7dd93761999631398997b02.profdata +chrome-linux-main-1736769296-e37364023af018acd260136418079d6e11e44258-03b712dbd057f11864ee41f655aaa4cfdb1bf517.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index f8152eb4..72af63968 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1736762265-539d8d96c43d951aeccc4943701185de8303dc02-75e11df2e4f721a7c3bb369f938397df72c74a58.profdata +chrome-mac-arm-main-1736776734-9ded1333de55019459132194eeea2783e49e6e2d-40b178a956066500eae776782d7cbbee7a288806.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index a285d541..523f5ed3 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1736746872-ba2ccbbd25a0aac7fc62f6c257502ea01fa19e22-77a482e6d2f3b2d4f7dd93761999631398997b02.profdata +chrome-win32-main-1736769296-98fdc7bdfda3199744393c6e383b3552dfdc0071-03b712dbd057f11864ee41f655aaa4cfdb1bf517.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 2531e4d..4121a56 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1736734285-b06cf7ee7cb98c458c0b381ee885749e8076d6b7-a3bd701e5fae7c121fb08bf3d815d34d966e9034.profdata +chrome-win64-main-1736746872-1dc50767b9fc351df05db35092a278010dc81440-77a482e6d2f3b2d4f7dd93761999631398997b02.profdata
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index 48b88a2..715cfde 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -335,7 +335,6 @@ "$root_gen_dir/chromeos/chromeos_help_app_kids_magazine_bundle_resources.pak", "$root_gen_dir/chromeos/chromeos_media_app_bundle_resources.pak", "$root_gen_dir/chromeos/chromeos_projector_app_bundle_resources.pak", - "$root_gen_dir/chromeos/chromeos_resources.pak", "$root_gen_dir/components/arc/input_overlay_resources.pak", "$root_gen_dir/ui/file_manager/file_manager_gen_resources.pak", "$root_gen_dir/ui/file_manager/file_manager_resources.pak", @@ -393,7 +392,6 @@ "//chromeos/ash/components/kiosk/vision/webui:resources", "//chromeos/ash/experiences/arc/input_overlay/resources", "//chromeos/ash/resources", - "//chromeos/resources", "//ui/chromeos/styles:cros_styles_resources", "//ui/file_manager:file_manager_gen_resources", "//ui/file_manager:resources",
diff --git a/chrome/test/data/webui/settings/privacy_page_test.ts b/chrome/test/data/webui/settings/privacy_page_test.ts index fd512390f..d5d5d3e 100644 --- a/chrome/test/data/webui/settings/privacy_page_test.ts +++ b/chrome/test/data/webui/settings/privacy_page_test.ts
@@ -927,6 +927,7 @@ SafetyHubEvent.NOTIFICATION_PERMISSIONS_MAYBE_CHANGED, oneElementMockData); await flushTasks(); + assertFalse(isChildVisible(page, '#safetyHubEntryPoint')); // Set guest mode back to false. loadTimeData.overrideValues({isGuest: false});
diff --git a/chrome/test/data/webui/settings/route_test.ts b/chrome/test/data/webui/settings/route_test.ts index ebef423..0b871f6 100644 --- a/chrome/test/data/webui/settings/route_test.ts +++ b/chrome/test/data/webui/settings/route_test.ts
@@ -380,19 +380,17 @@ }); }); -suite('SafetyHubReachable', function() { +suite('SafetyHub', function() { let routes: SettingsRoutes; - setup(function() { - loadTimeData.overrideValues({enableSafetyHub: true}); + function setupRoutes() { + resetPageVisibilityForTesting(); resetRouterForTesting(); - routes = Router.getInstance().getRoutes(); - Router.getInstance().navigateTo(routes.BASIC); - return flushTasks(); - }); + } test('SafetyHubRouteReachable', async function() { + setupRoutes(); let path = Router.getInstance().getCurrentRoute().path; assertEquals('/', path); @@ -403,4 +401,12 @@ path = Router.getInstance().getCurrentRoute().path; assertEquals('/safetyCheck', path); }); + + test('SafetyHubRouteNotReachableInGuestMode', async function() { + loadTimeData.overrideValues({isGuest: true}); + setupRoutes(); + + // Safety Hub should not be reachable in Guest mode. + assertEquals(undefined, routes.SAFETY_HUB); + }); });
diff --git a/chrome/test/data/webui/settings/safety_hub_extensions_module_test.ts b/chrome/test/data/webui/settings/safety_hub_extensions_module_test.ts index ed644b23..be04c4de 100644 --- a/chrome/test/data/webui/settings/safety_hub_extensions_module_test.ts +++ b/chrome/test/data/webui/settings/safety_hub_extensions_module_test.ts
@@ -55,11 +55,11 @@ // Check that the proper string is returned. webUIListenerCallback(SafetyHubEvent.EXTENSIONS_CHANGED, 1); await flushTasks(); - await assertPluralString('safetyCheckExtensionsReviewLabel', 1); + await assertPluralString('safetyHubExtensionsReviewLabel', 1); webUIListenerCallback(SafetyHubEvent.EXTENSIONS_CHANGED, 2); await flushTasks(); - await assertPluralString('safetyCheckExtensionsReviewLabel', 2); + await assertPluralString('safetyHubExtensionsReviewLabel', 2); // After clicking the review button the user should be navigated // to the extensions page.
diff --git a/chrome/test/data/webui/settings/safety_hub_module_test.ts b/chrome/test/data/webui/settings/safety_hub_module_test.ts index c0c979bb..7ca9d25 100644 --- a/chrome/test/data/webui/settings/safety_hub_module_test.ts +++ b/chrome/test/data/webui/settings/safety_hub_module_test.ts
@@ -85,7 +85,7 @@ await assignAndShowTestData(); testElement.buttonIcon = 'cr20:block'; testElement.buttonAriaLabelId = - 'safetyCheckNotificationPermissionReviewDontAllowAriaLabel'; + 'safetyHubNotificationPermissionReviewDontAllowAriaLabel'; flush(); // User clicks the button of the 2nd item in the list. @@ -139,7 +139,7 @@ await assignAndShowTestData(); testElement.buttonIcon = 'cr20:block'; testElement.buttonAriaLabelId = - 'safetyCheckNotificationPermissionReviewDontAllowAriaLabel'; + 'safetyHubNotificationPermissionReviewDontAllowAriaLabel'; testElement.buttonTooltipText = text; flush();
diff --git a/chrome/test/data/webui/settings/safety_hub_notification_permissions_module_test.ts b/chrome/test/data/webui/settings/safety_hub_notification_permissions_module_test.ts index 6f42b95..388c71e 100644 --- a/chrome/test/data/webui/settings/safety_hub_notification_permissions_module_test.ts +++ b/chrome/test/data/webui/settings/safety_hub_notification_permissions_module_test.ts
@@ -261,7 +261,7 @@ // Ensure the correctness of the browser proxy call and the undo toast. await assertBrowserCall('blockNotificationPermissionForOrigins'); assertUndoToast( - true, 'safetyCheckNotificationPermissionReviewBlockedToastLabel'); + true, 'safetyHubNotificationPermissionReviewBlockedToastLabel'); await browserProxy.whenCalled('recordSafetyHubInteraction'); @@ -283,7 +283,7 @@ // shown and action menu is closed. await assertBrowserCall('ignoreNotificationPermissionForOrigins'); assertUndoToast( - true, 'safetyCheckNotificationPermissionReviewIgnoredToastLabel'); + true, 'safetyHubNotificationPermissionReviewIgnoredToastLabel'); assertFalse(isVisible(testElement.$.actionMenu.getDialog())); await browserProxy.whenCalled('recordSafetyHubInteraction'); @@ -306,7 +306,7 @@ // shown and action menu is closed. await assertBrowserCall('resetNotificationPermissionForOrigins'); assertUndoToast( - true, 'safetyCheckNotificationPermissionReviewResetToastLabel'); + true, 'safetyHubNotificationPermissionReviewResetToastLabel'); assertFalse(isVisible(testElement.$.actionMenu.getDialog())); await browserProxy.whenCalled('recordSafetyHubInteraction'); @@ -599,34 +599,34 @@ await flushTasks(); testElement.$.blockAllButton.click(); await assertPluralString( - 'safetyCheckNotificationPermissionReviewBlockAllToastLabel', 2, 2); + 'safetyHubNotificationPermissionReviewBlockAllToastLabel', 2, 2); // Check the header string for a completion case after Block All action // (single entry in review). await setupSingleEntry(); testElement.$.blockAllButton.click(); await assertPluralString( - 'safetyCheckNotificationPermissionReviewBlockAllToastLabel', 1, 2); + 'safetyHubNotificationPermissionReviewBlockAllToastLabel', 1, 2); // Check the header string for a completion case after Block action. await setupSingleEntry(); clickButton(getEntries()[0]!.querySelector('#mainButton')); await assertCompletionHeaderString( - 'safetyCheckNotificationPermissionReviewBlockedToastLabel'); + 'safetyHubNotificationPermissionReviewBlockedToastLabel'); testElement.$.bulkUndoButton.click(); // Check the header string for a completion case after Ignore action. openActionMenu(); clickButton(testElement.shadowRoot!.querySelector('#ignore')); await assertCompletionHeaderString( - 'safetyCheckNotificationPermissionReviewIgnoredToastLabel'); + 'safetyHubNotificationPermissionReviewIgnoredToastLabel'); testElement.$.bulkUndoButton.click(); // Check the header string for a completion case after Reset action. openActionMenu(); clickButton(testElement.shadowRoot!.querySelector('#reset')); await assertCompletionHeaderString( - 'safetyCheckNotificationPermissionReviewResetToastLabel'); + 'safetyHubNotificationPermissionReviewResetToastLabel'); }); /** @@ -668,13 +668,13 @@ openActionMenu(); clickButton(testElement.shadowRoot!.querySelector('#ignore')); assertUndoToast( - true, 'safetyCheckNotificationPermissionReviewIgnoredToastLabel'); + true, 'safetyHubNotificationPermissionReviewIgnoredToastLabel'); // Click Don't Allow for the second item. This hides the existing undo toast // and shows a new one. clickButton(getEntries()[1]!.querySelector('#mainButton')); assertUndoToast( - true, 'safetyCheckNotificationPermissionReviewBlockedToastLabel', 1); + true, 'safetyHubNotificationPermissionReviewBlockedToastLabel', 1); // Click BlockAll that hides the existing toast and doesn't show a new one. testElement.$.blockAllButton.click();
diff --git a/chrome/test/data/webui/settings/safety_hub_unused_site_permissions_module_test.ts b/chrome/test/data/webui/settings/safety_hub_unused_site_permissions_module_test.ts index f3429aa..b4a67f16 100644 --- a/chrome/test/data/webui/settings/safety_hub_unused_site_permissions_module_test.ts +++ b/chrome/test/data/webui/settings/safety_hub_unused_site_permissions_module_test.ts
@@ -268,7 +268,7 @@ // Ensure the correctness of the browser proxy call and the undo toast. await assertAllowAgain(); - assertUndoToast(true, 'safetyCheckUnusedSitePermissionsToastLabel'); + assertUndoToast(true, 'safetyHubUnusedSitePermissionsToastLabel'); await browserProxy.whenCalled('recordSafetyHubInteraction'); @@ -282,7 +282,7 @@ // Ensure the correctness of the browser proxy call and the undo toast. await assertAllowAgain(4); - assertUndoToast(true, 'safetyCheckUnusedSitePermissionsToastLabel', 4); + assertUndoToast(true, 'safetyHubUnusedSitePermissionsToastLabel', 4); await browserProxy.whenCalled('recordSafetyHubInteraction'); @@ -459,7 +459,7 @@ // Check header string for plural case. let entries = getSiteList(); assertEquals(5, entries.length); - await assertPluralString('safetyCheckUnusedSitePermissionsPrimaryLabel', 5); + await assertPluralString('safetyHubUnusedSitePermissionsPrimaryLabel', 5); // Check header string for singular case. const oneElementMockData = mockData.slice(0, 1); @@ -469,7 +469,7 @@ entries = getSiteList(); assertEquals(1, entries.length); - await assertPluralString('safetyCheckUnusedSitePermissionsPrimaryLabel', 1); + await assertPluralString('safetyHubUnusedSitePermissionsPrimaryLabel', 1); // Check the header string for a completion case after Got It action // (single entry in review). @@ -478,7 +478,7 @@ await flushTasks(); testElement.$.gotItButton.click(); await assertPluralString( - 'safetyCheckUnusedSitePermissionsToastBulkLabel', 1, 2); + 'safetyHubUnusedSitePermissionsToastBulkLabel', 1, 2); // Check the header string for a completion case after Got It action // (multiple entries in review). @@ -487,7 +487,7 @@ await flushTasks(); testElement.$.gotItButton.click(); await assertPluralString( - 'safetyCheckUnusedSitePermissionsToastBulkLabel', 5, 2); + 'safetyHubUnusedSitePermissionsToastBulkLabel', 5, 2); // Check the header string for a completion case after Allow Again action. webUIListenerCallback( @@ -497,7 +497,7 @@ webUIListenerCallback(SafetyHubEvent.UNUSED_PERMISSIONS_MAYBE_CHANGED, []); await flushTasks(); const expectedHeaderString = testElement.i18n( - 'safetyCheckUnusedSitePermissionsToastLabel', mockData[0]!.origin); + 'safetyHubUnusedSitePermissionsToastLabel', mockData[0]!.origin); assertEquals(expectedHeaderString, testElement.$.module.header); }); @@ -543,12 +543,12 @@ // Click Allow Again for the first item in review to trigger an undo toast // to appear. getSiteList()[0]!.querySelector('cr-icon-button')!.click(); - assertUndoToast(true, 'safetyCheckUnusedSitePermissionsToastLabel', 0); + assertUndoToast(true, 'safetyHubUnusedSitePermissionsToastLabel', 0); // Click Allow Again for the second item. This hides the existing toast and // shows a new one. getSiteList()[1]!.querySelector('cr-icon-button')!.click(); - assertUndoToast(true, 'safetyCheckUnusedSitePermissionsToastLabel', 1); + assertUndoToast(true, 'safetyHubUnusedSitePermissionsToastLabel', 1); // Click Got It which hides the existing toast and does not show a new one. testElement.$.gotItButton.click(); @@ -666,7 +666,7 @@ let entries = getSiteList(); assertEquals(4, entries.length); await assertPluralString( - 'safetyCheckUnusedSitePermissionsSecondaryLabel', 4, 1); + 'safetyHubUnusedSitePermissionsSecondaryLabel', 4, 1); // Check header string for singular case. const oneElementMockData = mockData.slice(0, 1); @@ -677,7 +677,7 @@ entries = getSiteList(); assertEquals(1, entries.length); await assertPluralString( - 'safetyCheckUnusedSitePermissionsSecondaryLabel', 1, 1); + 'safetyHubUnusedSitePermissionsSecondaryLabel', 1, 1); }); test('Unused Site Permission strings', function() {
diff --git a/chrome/test/data/webui/settings/settings_browsertest.cc b/chrome/test/data/webui/settings/settings_browsertest.cc index 7d678e7c..6266d4d 100644 --- a/chrome/test/data/webui/settings/settings_browsertest.cc +++ b/chrome/test/data/webui/settings/settings_browsertest.cc
@@ -643,25 +643,20 @@ "runMochaSuite('DisableRelatedWebsiteSets')"); } -class SettingsBasicPageTest : public SettingsBrowserTest { - private: - base::test::ScopedFeatureList scoped_feature_list_{features::kSafetyHub}; -}; - // TODO(crbug.com/40823128): Flaky on all platforms. -IN_PROC_BROWSER_TEST_F(SettingsBasicPageTest, DISABLED_BasicPage) { +IN_PROC_BROWSER_TEST_F(SettingsTest, DISABLED_BasicPage) { RunTest("settings/basic_page_test.js", "runMochaSuite('BasicPage')"); } -IN_PROC_BROWSER_TEST_F(SettingsBasicPageTest, PrivacyGuidePromo) { +IN_PROC_BROWSER_TEST_F(SettingsTest, PrivacyGuidePromo) { RunTest("settings/basic_page_test.js", "runMochaSuite('PrivacyGuidePromo')"); } -IN_PROC_BROWSER_TEST_F(SettingsBasicPageTest, Performance) { +IN_PROC_BROWSER_TEST_F(SettingsTest, Performance) { RunTest("settings/basic_page_test.js", "runMochaSuite('Performance')"); } -IN_PROC_BROWSER_TEST_F(SettingsBasicPageTest, ExperimentalAdvanced) { +IN_PROC_BROWSER_TEST_F(SettingsTest, ExperimentalAdvanced) { RunTest("settings/basic_page_test.js", "runMochaSuite('ExperimentalAdvanced')"); } @@ -1016,7 +1011,6 @@ blink::features::kWebPrinting, #endif features::kEnableCertManagementUIV2, - features::kSafetyHub, }, {}); scoped_feature_list2_.InitAndEnableFeatureWithParameters( @@ -1209,8 +1203,8 @@ RunTest("settings/route_test.js", "runMochaSuite('DynamicParameters')"); } -IN_PROC_BROWSER_TEST_F(SettingsRouteTest, SafetyHubReachable) { - RunTest("settings/route_test.js", "runMochaSuite('SafetyHubReachable')"); +IN_PROC_BROWSER_TEST_F(SettingsRouteTest, SafetyHub) { + RunTest("settings/route_test.js", "runMochaSuite('SafetyHub')"); } // Copied from Polymer 2 test: @@ -1225,18 +1219,9 @@ } class SettingsSafetyHubTest : public SettingsBrowserTest { - protected: - SettingsSafetyHubTest() { - scoped_feature_list_.InitWithFeatures( - { - features::kSafetyHub, - safe_browsing::kSafetyHubAbusiveNotificationRevocation, - }, - {}); - } - private: - base::test::ScopedFeatureList scoped_feature_list_; + base::test::ScopedFeatureList scoped_feature_list_{ + safe_browsing::kSafetyHubAbusiveNotificationRevocation}; }; IN_PROC_BROWSER_TEST_F(SettingsSafetyHubTest, SafetyHubCard) { @@ -1409,7 +1394,6 @@ { content_settings::features::kSafetyCheckUnusedSitePermissions, features::kAutomaticFullscreenContentSetting, - features::kSafetyHub, }, {}); } @@ -1441,11 +1425,6 @@ "runMochaSuite('UnusedSitePermissionsReview')"); } -IN_PROC_BROWSER_TEST_F(SettingsSiteSettingsPageTest, SafetyHubDisabled) { - RunTest("settings/site_settings_page_test.js", - "runMochaSuite('SafetyHubDisabled')"); -} - #if !BUILDFLAG(IS_CHROMEOS_ASH) using SettingsTranslatePageTest = SettingsBrowserTest;
diff --git a/chrome/test/data/webui/settings/site_settings_page_test.ts b/chrome/test/data/webui/settings/site_settings_page_test.ts index 285a91f2..0e0941b 100644 --- a/chrome/test/data/webui/settings/site_settings_page_test.ts +++ b/chrome/test/data/webui/settings/site_settings_page_test.ts
@@ -280,11 +280,6 @@ '#automatic-fullscreen')); }); - // TODO(crbug.com/40267370): Remove after SafetyHub is launched. - test('UnusedSitePermissionsControlToggleExists', function() { - assertTrue(isChildVisible(page, '#unusedSitePermissionsRevocationToggle')); - }); - test('UnusedSitePermissionsControlToggleUpdatesPrefs', function() { const unusedSitePermissionsRevocationToggle = page.shadowRoot!.querySelector<SettingsToggleButtonElement>( @@ -379,27 +374,3 @@ }); }); }); - -// TODO(crbug.com/40267370): Remove after SafetyHub is launched. -suite('SafetyHubDisabled', function() { - let page: SettingsSiteSettingsPageElement; - - suiteSetup(function() { - loadTimeData.overrideValues({ - enableSafetyHub: false, - }); - }); - - setup(function() { - document.body.innerHTML = window.trustedTypes!.emptyHTML; - page = document.createElement('settings-site-settings-page'); - document.body.appendChild(page); - flush(); - }); - - test('NoUnusedSitePermissionsControlToggle', function() { - assertFalse( - Boolean(page.shadowRoot!.querySelector<SettingsToggleButtonElement>( - '#unusedSitePermissionsRevocationToggle'))); - }); -});
diff --git a/chrome/test/data/webui/signin/profile_picker_main_view_test.ts b/chrome/test/data/webui/signin/profile_picker_main_view_test.ts index 0395c21..f5decab 100644 --- a/chrome/test/data/webui/signin/profile_picker_main_view_test.ts +++ b/chrome/test/data/webui/signin/profile_picker_main_view_test.ts
@@ -9,7 +9,7 @@ import {webUIListenerCallback} from 'chrome://resources/js/cr.js'; import {CrLitElement} from 'chrome://resources/lit/v3_0/lit.rollup.js'; import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js'; -import {microtasksFinished} from 'chrome://webui-test/test_util.js'; +import {isVisible, microtasksFinished} from 'chrome://webui-test/test_util.js'; import {TestManageProfilesBrowserProxy} from './test_manage_profiles_browser_proxy.js'; @@ -159,7 +159,9 @@ await verifyProfileCard( profiles, mainViewElement.shadowRoot!.querySelectorAll('profile-card')); // Browse as guest. - assertTrue(!!mainViewElement.$.browseAsGuestButton); + assertTrue(isVisible(mainViewElement.$.browseAsGuestButton)); + // Add profile + assertTrue(isVisible(mainViewElement.$.addProfile)); mainViewElement.$.browseAsGuestButton.click(); await browserProxy.whenCalled('launchGuestProfile'); // Ask when chrome opens. @@ -206,10 +208,10 @@ isGuestModeEnabled: false, }); resetTest(); - assertEquals(mainViewElement.$.browseAsGuestButton.style.display, 'none'); + assertFalse(isVisible(mainViewElement.$.browseAsGuestButton)); await browserProxy.whenCalled('initializeMainView'); await simulateProfilesListChanged(generateProfilesList(2)); - assertEquals(mainViewElement.$.browseAsGuestButton.style.display, 'none'); + assertFalse(isVisible(mainViewElement.$.browseAsGuestButton)); }); test('ProfileCreationNotAllowed', async function() { @@ -217,16 +219,15 @@ isProfileCreationAllowed: false, }); resetTest(); - const addProfile = - mainViewElement.shadowRoot!.querySelector<HTMLElement>('#addProfile')!; - assertEquals(addProfile.style.display, 'none'); + const addProfileButton = mainViewElement.$.addProfile; + assertFalse(isVisible(addProfileButton)); await browserProxy.whenCalled('initializeMainView'); await simulateProfilesListChanged(generateProfilesList(2)); navigationElement.reset(); - assertEquals(addProfile.style.display, 'none'); - addProfile.click(); + assertFalse(isVisible(addProfileButton)); + addProfileButton.click(); await microtasksFinished(); - assertTrue(!navigationElement.changeCalled); + assertFalse(navigationElement.changeCalled); }); test('AskOnStartupSingleToMultipleProfiles', async function() {
diff --git a/chromeos/resources/BUILD.gn b/chromeos/resources/BUILD.gn deleted file mode 100644 index 0e83390..0000000 --- a/chromeos/resources/BUILD.gn +++ /dev/null
@@ -1,32 +0,0 @@ -# Copyright 2018 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//tools/grit/grit_rule.gni") - -assert(is_chromeos, "Non-ChromeOS builds cannot depend on //chromeos") - -grit("resources") { - source = "chromeos_resources.grd" - - outputs = [ - "grit/chromeos_resources.h", - "grit/chromeos_resources_map.cc", - "grit/chromeos_resources_map.h", - "chromeos_resources.pak", - ] - output_dir = "$root_gen_dir/chromeos" - - grit_flags = [ - "-E", - "mojom_root=" + rebase_path(root_gen_dir, root_build_dir), - ] - - deps = [ - # Generated ml service js bindings are required by external clients, the - # clients are not found within Chromium. The clients pull the generated - # js bindings as part of their build process. - "//chromeos/services/machine_learning/public/mojom:mojom_js", - "//chromeos/services/network_health/public/mojom:mojom_js", - ] -}
diff --git a/chromeos/resources/chromeos_resources.grd b/chromeos/resources/chromeos_resources.grd deleted file mode 100644 index 0fe5408..0000000 --- a/chromeos/resources/chromeos_resources.grd +++ /dev/null
@@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> - <outputs> - <output filename="grit/chromeos_resources.h" type="rc_header"> - <emit emit_type='prepend'></emit> - </output> - <output filename="grit/chromeos_resources_map.cc" - type="resource_file_map_source" /> - <output filename="grit/chromeos_resources_map.h" - type="resource_map_header" /> - <output filename="chromeos_resources.pak" type="data_package" /> - </outputs> - <release seq="1"> - <includes> - <part file="network_health_resources.grdp" /> - </includes> - </release> -</grit>
diff --git a/chromeos/resources/network_health_resources.grdp b/chromeos/resources/network_health_resources.grdp deleted file mode 100644 index 5617fe2..0000000 --- a/chromeos/resources/network_health_resources.grdp +++ /dev/null
@@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<grit-part> - <include name="IDR_NETWORK_DIAGNOSTICS_MOJOM_LITE_JS" - file="${mojom_root}/chromeos/services/network_health/public/mojom/network_diagnostics.mojom-lite.js" - resource_path="mojo/chromeos/services/network_health/public/mojom/network_diagnostics.mojom-lite.js" - use_base_dir="false" - type="BINDATA" /> -</grit-part>
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb index 373f8ee..db9ff41 100644 --- a/chromeos/strings/chromeos_strings_az.xtb +++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -1317,6 +1317,7 @@ <translation id="7182063559013288142">Ani hotspot</translation> <translation id="7184043045742675738">Düyməni fərdiləşdirmək üçün istənilən düyməyə klikləyin. Maus və ya ox düymələri ilə mövqenin dəyişdirilməsi düyməsi.</translation> <translation id="7187669805838282391">Çərşənbə</translation> +<translation id="7205318498545665455">Mikrofon seçin</translation> <translation id="7206979415662233817">Xidmət şərtləri</translation> <translation id="7210635925306941239">yaşıl-mavi</translation> <translation id="7212547870105584639">Şəbəkə APN ayarlarını idarə edin. APN mobil şəbəkə ilə internet arasında əlaqə yaradır. <ph name="BEGIN_LINK_LEARN_MORE" />Ətraflı məlumat<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb index d6b0cb60..819522d 100644 --- a/chromeos/strings/chromeos_strings_bs.xtb +++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -1317,6 +1317,7 @@ <translation id="7182063559013288142">Instant pristupna tačka</translation> <translation id="7184043045742675738">Kliknite na bilo koju tipku da prilagodite dugme. Premjestite tipku mišem ili tipkama sa strelicama.</translation> <translation id="7187669805838282391">u srijedu</translation> +<translation id="7205318498545665455">Odaberite mikrofon</translation> <translation id="7206979415662233817">Uslovi korištenja usluge</translation> <translation id="7210635925306941239">cijan</translation> <translation id="7212547870105584639">Upravljajte mrežnim postavkama za APN. APN-ovi uspostavljaju vezu između mobilne mreže i interneta. <ph name="BEGIN_LINK_LEARN_MORE" />Saznajte više<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb index 24f3a23..30e6454 100644 --- a/chromeos/strings/chromeos_strings_es.xtb +++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -1317,6 +1317,7 @@ <translation id="7182063559013288142">Conexión compartida instantánea</translation> <translation id="7184043045742675738">Haz clic en cualquier tecla para personalizar tu botón. Cambia la posición de la tecla con el ratón o las teclas de flecha.</translation> <translation id="7187669805838282391">el miércoles</translation> +<translation id="7205318498545665455">Elige tu micrófono</translation> <translation id="7206979415662233817">Términos del servicio</translation> <translation id="7210635925306941239">cian</translation> <translation id="7212547870105584639">Gestiona los ajustes de APN de la red. Los APNs establecen una conexión entre una red móvil e Internet. <ph name="BEGIN_LINK_LEARN_MORE" />Más información<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb index bfc361f..010ab12 100644 --- a/chromeos/strings/chromeos_strings_fil.xtb +++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -1317,6 +1317,7 @@ <translation id="7182063559013288142">Instant na hotspot</translation> <translation id="7184043045742675738">Mag-click sa anumang key para i-customize ang iyong button. Baguhin ang posisyon ng key gamit ang mouse o mga arrow key.</translation> <translation id="7187669805838282391">sa Miyerkoles</translation> +<translation id="7205318498545665455">Piliin ang iyong mikropono</translation> <translation id="7206979415662233817">Mga tuntunin ng serbisyo</translation> <translation id="7210635925306941239">cyan</translation> <translation id="7212547870105584639">Pamahalaan ang mga setting ng APN ng network. Bumubuo ang mga APN ng koneksyon sa pagitan ng cellular network at internet. <ph name="BEGIN_LINK_LEARN_MORE" />Matuto pa<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb index 3da62ca..311f5fd 100644 --- a/chromeos/strings/chromeos_strings_is.xtb +++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -1317,6 +1317,7 @@ <translation id="7182063559013288142">Heitur reitur í skyndi</translation> <translation id="7184043045742675738">Smelltu á hvaða lykil sem er til að sérsníða hnappinn. Breyttu staðsetningu lykilsins með mús eða örvalyklum.</translation> <translation id="7187669805838282391">á miðvikudaginn</translation> +<translation id="7205318498545665455">Velja hljóðnema</translation> <translation id="7206979415662233817">Þjónustuskilmálar</translation> <translation id="7210635925306941239">blágrænn</translation> <translation id="7212547870105584639">Stjórna stillingum aðgangsstaðar netkerfis. Aðgangsstaðir tengja saman farsímakerfi og internetið. <ph name="BEGIN_LINK_LEARN_MORE" />Nánar<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb index bfaf2b7..94c9cd8 100644 --- a/chromeos/strings/chromeos_strings_it.xtb +++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -1051,7 +1051,7 @@ <translation id="6073292342939316679">riduci la luminosità della tastiera</translation> <translation id="6074752328838739425">Nascondi riepilogo</translation> <translation id="6075872808778243331">(Android) Latenza HTTP</translation> -<translation id="6078323886959318429">Aggiungi scorciatoia</translation> +<translation id="6078323886959318429">Scorciatoia</translation> <translation id="6091080061796993741">giallo</translation> <translation id="6093853427925392522">Assicurati di utilizzare l'app Trasferimento contenuti di Google per spostare i dati dell'account della scuola nel tuo account personale prima di perdere l'accesso.</translation> <translation id="6104112872696127344">La scansione è stata annullata</translation>
diff --git a/chromeos/strings/chromeos_strings_iw.xtb b/chromeos/strings/chromeos_strings_iw.xtb index 9fdc6cf..01bf1da 100644 --- a/chromeos/strings/chromeos_strings_iw.xtb +++ b/chromeos/strings/chromeos_strings_iw.xtb
@@ -197,7 +197,7 @@ <translation id="1807246157184219062">בהיר</translation> <translation id="1808803439260407870">אומנות קלאסית</translation> <translation id="181434555916624618">כרגע, תוצאות עם אנשים לא יוצגו. אפשר לנסות הנחיה אחרת.</translation> -<translation id="1815850098929213707">המקש שנבחר הוא <ph name="KEYS" />. כדי לערוך את הרכיב האינטראקטיבי, צריך להקיש על הלחצן</translation> +<translation id="1815850098929213707">המקש שנבחר הוא <ph name="KEYS" />. כדי לערוך את הרכיב האינטראקטיבי, צריך ללחוץ על הכפתור</translation> <translation id="1823120442877418684">דימויים</translation> <translation id="1827738518074806965">גלריית אומנות</translation> <translation id="1836553715834333258">צבע המערכת</translation> @@ -646,7 +646,7 @@ <translation id="4131410914670010031">שחור ולבן</translation> <translation id="4137700675046373159">ביום שבת</translation> <translation id="4139326893730851150">עדכוני קושחה</translation> -<translation id="4143226836069425823">כדי לשנות, צריך להקיש על מקש מקלדת אחר</translation> +<translation id="4143226836069425823">כדי לשנות, צריך ללחוץ על מקש מקלדת אחר</translation> <translation id="4145784616224233563">חומת אש מסוג HTTP</translation> <translation id="4147897805161313378">Google Photos</translation> <translation id="4150201353443180367">תצוגה</translation> @@ -764,7 +764,7 @@ <translation id="467510802200863975">הסיסמאות אינן תואמות</translation> <translation id="467715984478005772">חומת אש חשודה</translation> <translation id="4678534708181186163">לא ניתן לסכם. צריך לנסות תמליל קצר יותר.</translation> -<translation id="4683762547447150570">כדי להתמקד בהקצאת המקש, צריך להקיש על הלחצן</translation> +<translation id="4683762547447150570">כדי להתמקד בהקצאת המקש, צריך ללחוץ על הכפתור</translation> <translation id="4691278870498629773">הפסיקה – המגש חסר</translation> <translation id="469379815867856270">עוצמת אות</translation> <translation id="4697260493945012995">בחירה של סוג אמצעי הבקרה</translation> @@ -1007,7 +1007,7 @@ <translation id="5876385649737594562">צריך להפעיל כדי לבחור אפשרויות</translation> <translation id="5877503382465267833">השהיה של <ph name="RECORDING_NAME" /></translation> <translation id="588258955323874662">מסך מלא</translation> -<translation id="5893975327266416093">צריך להקיש על מקש במקלדת כדי להקצות</translation> +<translation id="5893975327266416093">צריך ללחוץ על מקש במקלדת כדי להקצות</translation> <translation id="5895138241574237353">הפעלה מחדש</translation> <translation id="5896602941605730551">הפעלה</translation> <translation id="5901630391730855834">צהוב</translation> @@ -1742,7 +1742,7 @@ <translation id="9189000703457422362">לא ניתן להתחבר לרשת הזו באמצעות פריטי APN שזוהו באופן אוטומטי. למידע נוסף, צריך ליצור קשר עם ספק הסלולר.</translation> <translation id="9190726385682694354"><ph name="QUERY_TEXT" />; <ph name="SUBTEXT" />; <ph name="RESULT_TEXT" /></translation> <translation id="9193744392140377127">*APN</translation> -<translation id="9195918315673527512">מקשי הג'ויסטיק שנבחרו הם <ph name="KEYS" />. כדי לערוך את הרכיב האינטראקטיבי, צריך להקיש על הלחצן</translation> +<translation id="9195918315673527512">מקשי הג'ויסטיק שנבחרו הם <ph name="KEYS" />. כדי לערוך את הרכיב האינטראקטיבי, צריך ללחוץ על הכפתור</translation> <translation id="9204237731135241582">לא ניתן ליצור קשר עם השער מאפליקציות ל-Android</translation> <translation id="921080052717160800">התמונה מוגדרת כרקע של מצלמה</translation> <translation id="9211490828691860325">כל שולחנות העבודה הווירטואליים</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb index e43826b..e234be4 100644 --- a/chromeos/strings/chromeos_strings_ja.xtb +++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -1317,6 +1317,7 @@ <translation id="7182063559013288142">インスタント アクセス ポイント</translation> <translation id="7184043045742675738">ボタンをカスタマイズするには、いずれかのキーをクリックします。マウスまたは矢印キーを使用してキーの位置を変更します。</translation> <translation id="7187669805838282391">水曜日</translation> +<translation id="7205318498545665455">マイクを指定してください</translation> <translation id="7206979415662233817">利用規約</translation> <translation id="7210635925306941239">シアン</translation> <translation id="7212547870105584639">ネットワークの APN 設定を管理します。APN は、モバイル ネットワークとインターネットの間の接続を確立します。<ph name="BEGIN_LINK_LEARN_MORE" />詳細<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb index dff5608..9c76284f 100644 --- a/chromeos/strings/chromeos_strings_lo.xtb +++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -1318,6 +1318,7 @@ <translation id="7182063559013288142">ຮັອດສະປອດດ່ວນ</translation> <translation id="7184043045742675738">ຄລິກໃສ່ປຸ່ມໃດກໍໄດ້ເພື່ອປັບແຕ່ງປຸ່ມຂອງທ່ານ. ປ່ຽນຕຳແໜ່ງປຸ່ມດ້ວຍເມົ້າ ຫຼື ປຸ່ມລູກສອນ.</translation> <translation id="7187669805838282391">ໃນວັນພຸດ</translation> +<translation id="7205318498545665455">ເລືອກໄມຂອງທ່ານ</translation> <translation id="7206979415662233817">ຂໍ້ກຳນົດບໍລິການ</translation> <translation id="7210635925306941239">ຟ້າອົມຂຽວ</translation> <translation id="7212547870105584639">ຈັດການການຕັ້ງຄ່າ APN ຂອງເຄືອຂ່າຍ. APN ສ້າງການເຊື່ອມຕໍ່ລະຫວ່າງເຄືອຂ່າຍມືຖື ແລະ ອິນເຕີເນັດ. <ph name="BEGIN_LINK_LEARN_MORE" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb index b6ab7f9..029ec5de 100644 --- a/chromeos/strings/chromeos_strings_my.xtb +++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -1317,6 +1317,7 @@ <translation id="7182063559013288142">ချက်ချင်းသုံး ဟော့စပေါ့</translation> <translation id="7184043045742675738">သင့်ခလုတ်ကို စိတ်ကြိုက်လုပ်ရန် ကီးတစ်ခုခုနှိပ်ပါ။ မောက်စ် (သို့) မြားကီးများဖြင့် ကီးကို နေရာပြန်ချပါ။</translation> <translation id="7187669805838282391">ဗုဒ္ဓဟူးနေ့တွင်</translation> +<translation id="7205318498545665455">မိုက် ရွေးပါ</translation> <translation id="7206979415662233817">ဝန်ဆောင်မှုစည်းမျဉ်းများ</translation> <translation id="7210635925306941239">စိမ်းပြာရောင်</translation> <translation id="7212547870105584639">ကွန်ရက် APN ဆက်တင်များကို စီမံနိုင်သည်။ APN များက ဆယ်လူလာ ကွန်ရက်နှင့် အင်တာနက်အကြား ချိတ်ဆက်ပေးသည်။ <ph name="BEGIN_LINK_LEARN_MORE" />ပိုမိုလေ့လာရန်<ph name="END_LINK_LEARN_MORE" /></translation>
diff --git a/chromeos/ui/frame/header_view.cc b/chromeos/ui/frame/header_view.cc index 9468d7a..a0759cc 100644 --- a/chromeos/ui/frame/header_view.cc +++ b/chromeos/ui/frame/header_view.cc
@@ -140,7 +140,7 @@ avatar_icon_ = new views::ImageView(); AddChildView(avatar_icon_.get()); } - avatar_icon_->SetImage(avatar); + avatar_icon_->SetImage(ui::ImageModel::FromImageSkia(avatar)); } frame_header_->SetLeftHeaderView(avatar_icon_); DeprecatedLayoutImmediately();
diff --git a/clank b/clank index 2a16411..bbbe2cd 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit 2a16411ff60d055cb1def36b935da824fd6ce71a +Subproject commit bbbe2cd7740a857fb0ba49ec0df3bc6131a604e8
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc index f2a1fce..29c250b 100644 --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -1406,7 +1406,7 @@ } if (password_generation_agent_ && password_generation_agent_->ShowPasswordGenerationSuggestions( - input_element)) { + input_element, form_cache)) { is_popup_possibly_visible_ = true; return; }
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index ddd76da..e07bcdbd 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1409,14 +1409,15 @@ } void PasswordAutofillAgent::AnnotateFormsAndFieldsWithSignatures( - WebVector<WebFormElement>& forms) { + WebVector<WebFormElement>& forms, + const SynchronousFormCache& form_cache) { if (!render_frame()) { return; } WebDocument document = render_frame()->GetWebFrame()->GetDocument(); for (const WebFormElement& form : forms) { std::optional<FormData> form_data = - GetFormDataFromWebForm(form, /*form_cache=*/{}); + GetFormDataFromWebForm(form, form_cache); std::string form_signature; std::string alternative_form_signature; if (form_data) { @@ -1435,7 +1436,7 @@ } std::optional<FormData> form_data = - GetFormDataFromUnownedInputElements(/*form_cache=*/{}); + GetFormDataFromUnownedInputElements(form_cache); std::string form_signature; std::string alternative_form_signature; if (form_data) { @@ -1484,7 +1485,7 @@ WebVector<WebFormElement> forms = doc.GetTopLevelForms(); if (IsShowAutofillSignaturesEnabled()) - AnnotateFormsAndFieldsWithSignatures(forms); + AnnotateFormsAndFieldsWithSignatures(forms, form_cache); if (logger) logger->LogNumber(Logger::STRING_NUMBER_OF_ALL_FORMS, forms.size());
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h index caccd00d..44bb5fef 100644 --- a/components/autofill/content/renderer/password_autofill_agent.h +++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -431,7 +431,8 @@ // signatures as HTML attributes. Used by // chrome://flags/#enable-show-autofill-signatures only. void AnnotateFormsAndFieldsWithSignatures( - blink::WebVector<blink::WebFormElement>& forms); + blink::WebVector<blink::WebFormElement>& forms, + const SynchronousFormCache& form_cache); // Scans the given frame for password forms and sends them up to the browser. // If `only_visible` is true, only forms visible in the layout are sent.
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc index f5d6db8..011d772 100644 --- a/components/autofill/content/renderer/password_generation_agent.cc +++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -302,7 +302,7 @@ current_generation_item_->generation_element_ == password_element) { password_generation::LogPasswordGenerationEvent( password_generation::PASSWORD_DELETED_BY_AUTOFILLING); - PasswordNoLongerGenerated(); + PasswordNoLongerGenerated(/*form_cache=*/{}); current_generation_item_->generation_element_.SetShouldRevealPassword( false); } @@ -499,7 +499,7 @@ is_automatic_generation_available = true; MaybeCreateCurrentGenerationItem( last_focused_password_element, - it->second.confirmation_password_renderer_id); + it->second.confirmation_password_renderer_id, /*form_cache=*/{}); } else { blink::WebDocument document = render_frame() ? render_frame()->GetWebFrame()->GetDocument() @@ -515,7 +515,8 @@ MaybeCreateCurrentGenerationItem( last_focused_password_element, FindConfirmationPasswordFieldId(control_elements, - last_focused_password_element)); + last_focused_password_element), + /*form_cache=*/{}); } if (!current_generation_item_) @@ -532,14 +533,15 @@ } bool PasswordGenerationAgent::ShowPasswordGenerationSuggestions( - const WebInputElement& element) { + const WebInputElement& element, + const SynchronousFormCache& form_cache) { CHECK(element); auto it = generation_enabled_fields_.find(form_util::GetFieldRendererId(element)); if (it != generation_enabled_fields_.end()) { MaybeCreateCurrentGenerationItem( - element, it->second.confirmation_password_renderer_id); + element, it->second.confirmation_password_renderer_id, form_cache); } if (!current_generation_item_ || element != current_generation_item_->generation_element_) { @@ -551,7 +553,7 @@ current_generation_item_->generation_element_.Value().length(); if (password_length < kMinimumLengthForEditedPassword) { // Password is too short to be considered generated. - PasswordNoLongerGenerated(); + PasswordNoLongerGenerated(form_cache); if (password_length == 0) { current_generation_item_->generation_element_.SetShouldRevealPassword( false); @@ -559,7 +561,7 @@ return MaybeOfferAutomaticGeneration(); } current_generation_item_->generation_element_.SetShouldRevealPassword(true); - ShowEditingPopup(); + ShowEditingPopup(form_cache); return true; } @@ -590,7 +592,7 @@ if (current_generation_item_ && current_generation_item_->generation_element_ == element) { if (current_generation_item_->password_is_generated_) { - PasswordNoLongerGenerated(); + PasswordNoLongerGenerated(/*form_cache=*/{}); } current_generation_item_->password_revealed_after_editing_ = false; current_generation_item_->generation_element_.SetShouldRevealPassword( @@ -601,8 +603,8 @@ bool PasswordGenerationAgent::TextDidChangeInTextField( const WebInputElement& element, const SynchronousFormCache& form_cache) { - if (!(current_generation_item_ && - current_generation_item_->generation_element_ == element)) { + if (!current_generation_item_ || + current_generation_item_->generation_element_ != element) { // Presave the username if it has been changed. if (current_generation_item_ && current_generation_item_->password_is_generated_ && element && @@ -614,7 +616,7 @@ if (generated_password.empty()) { // JS cleared the generated password in the meantime. Consider the user // left the generation state. - PasswordNoLongerGenerated(); + PasswordNoLongerGenerated(form_cache); } else { std::optional<FormData> presaved_form_data = CreateFormDataToPresave(form_cache); @@ -652,7 +654,7 @@ // Tell the browser that the state isn't "editing" anymore. The browser // should hide the editing prompt if it wasn't replaced above. current_generation_item_->password_revealed_after_editing_ = true; - PasswordNoLongerGenerated(); + PasswordNoLongerGenerated(form_cache); } else if (current_generation_item_->password_is_generated_) { current_generation_item_->password_edited_ = true; base::AutoReset<bool> auto_reset_update_confirmation_password( @@ -722,15 +724,15 @@ password_generation_ui_data); } -void PasswordGenerationAgent::ShowEditingPopup() { +void PasswordGenerationAgent::ShowEditingPopup( + const SynchronousFormCache& form_cache) { if (!render_frame()) return; gfx::RectF bounding_box(render_frame()->ConvertViewportToWindow( current_generation_item_->generation_element_.BoundsInWidget())); - std::optional<FormData> form_data = - CreateFormDataToPresave(/*form_cache=*/{}); + std::optional<FormData> form_data = CreateFormDataToPresave(form_cache); DCHECK(form_data); FieldRendererId generation_element_renderer_id = @@ -748,7 +750,8 @@ GetPasswordGenerationDriver().PasswordGenerationRejectedByTyping(); } -void PasswordGenerationAgent::PasswordNoLongerGenerated() { +void PasswordGenerationAgent::PasswordNoLongerGenerated( + const SynchronousFormCache& form_cache) { DCHECK(current_generation_item_); DCHECK(current_generation_item_->password_is_generated_); // Do not treat the password as generated, either here or in the browser. @@ -769,7 +772,7 @@ element.SetAutofillValue(blink::WebString()); } std::optional<FormData> presaved_form_data = - CreateFormDataToPresave(/*form_cache=*/{}); + CreateFormDataToPresave(form_cache); if (presaved_form_data) GetPasswordGenerationDriver().PasswordNoLongerGenerated( *presaved_form_data); @@ -777,7 +780,8 @@ void PasswordGenerationAgent::MaybeCreateCurrentGenerationItem( WebInputElement generation_element, - FieldRendererId confirmation_password_renderer_id) { + FieldRendererId confirmation_password_renderer_id, + const SynchronousFormCache& form_cache) { // Do not create |current_generation_item_| if it already is created for // |generation_element| or the user accepted generated password. So if the // user accepted the generated password, generation is not offered on any @@ -789,10 +793,9 @@ WebFormElement form_element = form_util::GetOwningForm(generation_element); std::optional<FormData> form_data = - form_element ? password_agent_->GetFormDataFromWebForm(form_element, - /*form_cache=*/{}) - : password_agent_->GetFormDataFromUnownedInputElements( - /*form_cache=*/{}); + form_element + ? password_agent_->GetFormDataFromWebForm(form_element, form_cache) + : password_agent_->GetFormDataFromUnownedInputElements(form_cache); if (!form_data) return;
diff --git a/components/autofill/content/renderer/password_generation_agent.h b/components/autofill/content/renderer/password_generation_agent.h index c0d971b..47d9f88 100644 --- a/components/autofill/content/renderer/password_generation_agent.h +++ b/components/autofill/content/renderer/password_generation_agent.h
@@ -76,7 +76,9 @@ const SynchronousFormCache& form_cache); // Returns true if the newly focused node caused the generation UI to show. - bool ShowPasswordGenerationSuggestions(const blink::WebInputElement& element); + bool ShowPasswordGenerationSuggestions( + const blink::WebInputElement& element, + const SynchronousFormCache& form_cache); // Event forwarded by AutofillAgent from WebAutofillClient, informing that // the text field editing has ended, which means that the field is not @@ -146,7 +148,7 @@ void AutomaticGenerationAvailable(); // Show UI for editing a generated password at |generation_element_|. - void ShowEditingPopup(); + void ShowEditingPopup(const SynchronousFormCache& form_cache); // Signals the browser that generation was rejected. This happens when the // user types more characters than the maximum offer size into the password @@ -155,14 +157,15 @@ void GenerationRejectedByTyping(); // Stops treating a password as generated. - void PasswordNoLongerGenerated(); + void PasswordNoLongerGenerated(const SynchronousFormCache& form_cache); // Creates |current_generation_item_| for |element| if |element| is a // generation enabled element. If |current_generation_item_| is already // created for |element| it is not recreated. void MaybeCreateCurrentGenerationItem( blink::WebInputElement element, - FieldRendererId confirmation_password_renderer_id); + FieldRendererId confirmation_password_renderer_id, + const SynchronousFormCache& form_cache); void LogMessage(SavePasswordProgressLogger::StringID message_id); void LogBoolean(SavePasswordProgressLogger::StringID message_id,
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc index b1f9863..1358e7c 100644 --- a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
@@ -1029,12 +1029,14 @@ AutofillProfile p1 = CreateProfileWithName(CreateNameInfo( u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", u"")); // The same phonetic name, but saved as alternative_full_name with separator. - AutofillProfile p2 = CreateProfileWithName(CreateNameInfo( - u"葵", u"", u"山本", u"山本・葵", u"", u"", u"やまもと・あおい")); + AutofillProfile p2 = CreateProfileWithName( + CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", + u"やまもと・あおい")); // The same phonetic name, but saved as alternative_full_name with white space // separator. - AutofillProfile p3 = CreateProfileWithName(CreateNameInfo( - u"葵", u"", u"山本", u"山本・葵", u"", u"", u"やまもと あおい")); + AutofillProfile p3 = CreateProfileWithName( + CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", + u"やまもと あおい")); // Semantically the same profiles as `p2`, `p3`, `p4`, but using Katakana for // alternative name. @@ -1046,7 +1048,11 @@ u"葵", u"", u"山本", u"山本・葵", u"", u"", u"ヤマモト アオイ")); MergeNamesAndExpect( - p1, p1_katakana, + p2, p1_katakana, + CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", + u"やまもと・あおい")); + MergeNamesAndExpect( + p3, p1_katakana, CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", u"やまもと あおい")); MergeNamesAndExpect( @@ -1054,17 +1060,29 @@ CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", u"やまもと・あおい")); MergeNamesAndExpect( + p3, p2_katakana, + CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", + u"やまもと あおい")); + MergeNamesAndExpect( + p2, p3_katakana, + CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", + u"やまもと・あおい")); + MergeNamesAndExpect( p3, p3_katakana, CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", u"やまもと あおい")); - // This scenario is not possible in real life(since everything is converted to - // Hiragana for storage), but it's worth testing to ensure that the merge - // result is correct. + // As long as the values in profile are semantically correct, it doesn't + // matter what it the result of merging since db will do the transliteration + // on save. MergeNamesAndExpect( - p1_katakana, p3_katakana, + p1, p1_katakana, CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"アオイ", u"ヤマモト", u"ヤマモト アオイ")); + MergeNamesAndExpect( + p1_katakana, p1, + CreateNameInfo(u"葵", u"", u"山本", u"山本・葵", u"あおい", u"やまもと", + u"やまもと あおい")); } TEST_F(AutofillProfileComparatorTest, MergeEmailAddresses) {
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc index 162cee7..54bf43c6 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc
@@ -214,6 +214,12 @@ return base::EmptyString16(); } +std::u16string AddressComponent::GetValueForComparison( + const std::u16string& value, + const AddressComponent& other) const { + return NormalizeValue(value); +} + std::optional<std::u16string> AddressComponent::GetCanonicalizedValue() const { return std::nullopt; } @@ -1551,10 +1557,4 @@ return GetValueForComparison(GetValue(), other); } -std::u16string AddressComponent::GetValueForComparison( - const std::u16string& value, - const AddressComponent& other) const { - return NormalizeValue(value); -} - } // namespace autofill
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_component.h b/components/autofill/core/browser/data_model/autofill_structured_address_component.h index 3171c5b..d2199a5 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_component.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address_component.h
@@ -173,7 +173,7 @@ // Compares the values and verification statuses with |other| recursively // down the tree. Returns true iff all values and verification statuses of // this node and its subtree and |other| with its subtree are the same. - bool SameAs(const AddressComponent& other) const; + virtual bool SameAs(const AddressComponent& other) const; // Copies the values and verification statuses from |other| recursively down // the tree. @@ -200,6 +200,15 @@ // assigned, an empty string is returned. const std::u16string& GetValue() const; + // Formats `value` to be used for comparison. + // In the default implementation this is `value` normalized but this function + // can be overridden in subclasses to apply further operations on `value`. + // `other` represents the component we are comparing with and is required + // for consistent rewriting rules. + virtual std::u16string GetValueForComparison( + const std::u16string& value, + const AddressComponent& other) const; + // Returns a canonicalized version of the value or std::nullopt if // canonicalization is not possible or not implemented. virtual std::optional<std::u16string> GetCanonicalizedValue() const; @@ -474,15 +483,6 @@ // for consistent rewriting rules. std::u16string GetValueForComparison(const AddressComponent& other) const; - // Formats `value` to be used for comparison. - // In the default implementation this is `value` normalized but this function - // can be overridden in subclasses to apply further operations on `value`. - // `other` represents the component we are comparing with and is required - // for consistent rewriting rules. - virtual std::u16string GetValueForComparison( - const std::u16string& value, - const AddressComponent& other) const; - // Returns true if the merging of two token identical values should give // precedence to the newer value. virtual bool HasNewerValuePrecedenceInMerging(
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_name.cc b/components/autofill/core/browser/data_model/autofill_structured_address_name.cc index 09775f8..823b39d0 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_name.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_name.cc
@@ -226,32 +226,62 @@ NameFull::~NameFull() = default; +AlternativeNameAddressComponent::AlternativeNameAddressComponent( + FieldType storage_type, + SubcomponentsList subcomponents, + unsigned int merge_mode) + : AddressComponent(storage_type, subcomponents, merge_mode) {} + +bool AlternativeNameAddressComponent::SameAs( + const AddressComponent& other) const { + if (this == &other) { + return true; + } + + if (GetStorageType() != other.GetStorageType()) { + return false; + } + + if (GetValueForComparison(GetValue(), other) != + other.GetValueForComparison(other.GetValue(), *this) || + GetVerificationStatus() != other.GetVerificationStatus()) { + return false; + } + + for (size_t i = 0; i < other.Subcomponents().size(); i++) { + if (!(Subcomponents()[i]->SameAs(*other.Subcomponents()[i]))) { + return false; + } + } + + return true; +} + +std::u16string AlternativeNameAddressComponent::GetValueForComparison( + const std::u16string& value, + const AddressComponent& other) const { + return TransliterateAlternativeName( + AddressComponent::GetValueForComparison(GetValue(), other)); +} + AlternativeGivenName::AlternativeGivenName() - : AddressComponent(ALTERNATIVE_GIVEN_NAME, {}, MergeMode::kDefault) {} + : AlternativeNameAddressComponent(ALTERNATIVE_GIVEN_NAME, + {}, + MergeMode::kDefault) {} AlternativeGivenName::~AlternativeGivenName() = default; -std::u16string AlternativeGivenName::GetValueForComparison( - const std::u16string& value, - const AddressComponent& other) const { - return TransliterateAlternativeName( - AddressComponent::GetValueForComparison(GetValue(), other)); -} - AlternativeFamilyName::AlternativeFamilyName() - : AddressComponent(ALTERNATIVE_FAMILY_NAME, {}, MergeMode::kDefault) {} + : AlternativeNameAddressComponent(ALTERNATIVE_FAMILY_NAME, + {}, + MergeMode::kDefault) {} AlternativeFamilyName::~AlternativeFamilyName() = default; -std::u16string AlternativeFamilyName::GetValueForComparison( - const std::u16string& value, - const AddressComponent& other) const { - return TransliterateAlternativeName( - AddressComponent::GetValueForComparison(GetValue(), other)); -} - AlternativeFullName::AlternativeFullName() - : AddressComponent(ALTERNATIVE_FULL_NAME, {}, MergeMode::kDefault) { + : AlternativeNameAddressComponent(ALTERNATIVE_FULL_NAME, + {}, + MergeMode::kDefault) { RegisterChildNode(&given_name_); RegisterChildNode(&family_name_); } @@ -290,11 +320,4 @@ info); } -std::u16string AlternativeFullName::GetValueForComparison( - const std::u16string& value, - const AddressComponent& other) const { - return TransliterateAlternativeName( - AddressComponent::GetValueForComparison(GetValue(), other)); -} - } // namespace autofill
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_name.h b/components/autofill/core/browser/data_model/autofill_structured_address_name.h index 5dbf8bb..3b8d66e 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_name.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address_name.h
@@ -140,12 +140,16 @@ NameLast last_; }; -// Atomic component that represents the first part of an alternative name(e.g. -// Japanese phonetic given name). -class AlternativeGivenName : public AddressComponent { +// A common class used by the alternative name nodes to implement their shared +// methods. +class AlternativeNameAddressComponent : public AddressComponent { public: - AlternativeGivenName(); - ~AlternativeGivenName() override; + // AddressComponent: + AlternativeNameAddressComponent(FieldType storage_type, + SubcomponentsList subcomponents, + unsigned int merge_mode); + + bool SameAs(const AddressComponent& other) const override; protected: // Returns the value with all Katakana characters converted to Hiragana. @@ -154,18 +158,20 @@ const AddressComponent& other) const override; }; +// Atomic component that represents the first part of an alternative name(e.g. +// Japanese phonetic given name). +class AlternativeGivenName : public AlternativeNameAddressComponent { + public: + AlternativeGivenName(); + ~AlternativeGivenName() override; +}; + // Atomic component that represents the last part of an alternative name(e.g. // Japanese phonetic last name). -class AlternativeFamilyName : public AddressComponent { +class AlternativeFamilyName : public AlternativeNameAddressComponent { public: AlternativeFamilyName(); ~AlternativeFamilyName() override; - - protected: - // Returns the value with all Katakana characters converted to Hiragana. - std::u16string GetValueForComparison( - const std::u16string& value, - const AddressComponent& other) const override; }; // Compound node that represents an alternative full name (e.g. full phonetic @@ -185,7 +191,7 @@ // | ALTERNATIVE_GIVEN_NAME | | ALTERNATIVE_FAMILY_NAME | // +------------------------+ +-------------------------+ // -class AlternativeFullName : public AddressComponent { +class AlternativeFullName : public AlternativeNameAddressComponent { public: AlternativeFullName(); AlternativeFullName(const AlternativeFullName& other); @@ -199,11 +205,6 @@ // subcomponents. std::u16string GetFormatString() const override; - // Returns the value with all Katakana characters converted to Hiragana. - std::u16string GetValueForComparison( - const std::u16string& value, - const AddressComponent& other) const override; - AlternativeGivenName given_name_; AlternativeFamilyName family_name_; };
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_name_unittest.cc b/components/autofill/core/browser/data_model/autofill_structured_address_name_unittest.cc index 3cf4340..b84fc57f 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_name_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_name_unittest.cc
@@ -333,6 +333,111 @@ // Latin characters. AlternativeNameParserTestRecord{"Karol Kotynia", "Karol", "Kotynia"})); +TEST(AutofillStructuredAlternativeNameSameAsTest, SameAsAlternativeFullName) { + AlternativeFullName name; + name.SetValueForType(ALTERNATIVE_FULL_NAME, u"やまもと あおい", + VerificationStatus::kObserved); + name.CompleteFullTree(); + + // The same component but using Katakana. + AlternativeFullName other_name; + other_name.SetValueForType(ALTERNATIVE_FULL_NAME, u"ヤマモト アオイ", + VerificationStatus::kObserved); + other_name.CompleteFullTree(); + + EXPECT_TRUE(name.SameAs(name)); + EXPECT_TRUE(name.SameAs(other_name)); + EXPECT_TRUE(other_name.SameAs(name)); +} + +TEST(AutofillStructuredAlternativeNameSameAsTest, + DifferentSameAsAlternativeFullName) { + AlternativeFullName name; + name.SetValueForType(ALTERNATIVE_FULL_NAME, u"やまもと あおい", + VerificationStatus::kObserved); + name.CompleteFullTree(); + + // Different component using Katakana. + AlternativeFullName other_name; + other_name.SetValueForType(ALTERNATIVE_FULL_NAME, u"サクラ レイ", + VerificationStatus::kObserved); + other_name.CompleteFullTree(); + + EXPECT_TRUE(name.SameAs(name)); + EXPECT_FALSE(name.SameAs(other_name)); + EXPECT_FALSE(other_name.SameAs(name)); +} + +TEST(AutofillStructuredAlternativeNameSameAsTest, SameAsAlternativeGivenName) { + AlternativeGivenName name; + name.SetValueForType(ALTERNATIVE_GIVEN_NAME, u"あおい", + VerificationStatus::kObserved); + name.CompleteFullTree(); + + // The same component but using Katakana. + AlternativeGivenName other_name; + other_name.SetValueForType(ALTERNATIVE_GIVEN_NAME, u"アオイ", + VerificationStatus::kObserved); + other_name.CompleteFullTree(); + + EXPECT_TRUE(name.SameAs(name)); + EXPECT_TRUE(name.SameAs(other_name)); + EXPECT_TRUE(other_name.SameAs(name)); +} + +TEST(AutofillStructuredAlternativeNameSameAsTest, + DifferentSameAsAlternativeGivenName) { + AlternativeGivenName name; + name.SetValueForType(ALTERNATIVE_GIVEN_NAME, u"あおい", + VerificationStatus::kObserved); + name.CompleteFullTree(); + + // Different component using Katakana. + AlternativeGivenName other_name; + other_name.SetValueForType(ALTERNATIVE_GIVEN_NAME, u"レイ", + VerificationStatus::kObserved); + other_name.CompleteFullTree(); + + EXPECT_TRUE(name.SameAs(name)); + EXPECT_FALSE(name.SameAs(other_name)); + EXPECT_FALSE(other_name.SameAs(name)); +} + +TEST(AutofillStructuredAlternativeNameSameAsTest, SameAsAlternativeFamilyName) { + AlternativeFamilyName name; + name.SetValueForType(ALTERNATIVE_FAMILY_NAME, u"やまもと", + VerificationStatus::kObserved); + name.CompleteFullTree(); + + // The same component but using Katakana. + AlternativeFamilyName other_name; + other_name.SetValueForType(ALTERNATIVE_FAMILY_NAME, u"ヤマモト", + VerificationStatus::kObserved); + other_name.CompleteFullTree(); + + EXPECT_TRUE(name.SameAs(name)); + EXPECT_TRUE(name.SameAs(other_name)); + EXPECT_TRUE(other_name.SameAs(name)); +} + +TEST(AutofillStructuredAlternativeNameSameAsTest, + DifferentSameAsAlternativeFamilyName) { + AlternativeFamilyName name; + name.SetValueForType(ALTERNATIVE_FAMILY_NAME, u"やまもと", + VerificationStatus::kObserved); + name.CompleteFullTree(); + + // Different component using Katakana. + AlternativeFamilyName other_name; + other_name.SetValueForType(ALTERNATIVE_FAMILY_NAME, u"サクラ", + VerificationStatus::kObserved); + other_name.CompleteFullTree(); + + EXPECT_TRUE(name.SameAs(name)); + EXPECT_FALSE(name.SameAs(other_name)); + EXPECT_FALSE(other_name.SameAs(name)); +} + // Tests the detection of CJK name characteristics. TEST(AutofillStructuredName, HasCjkNameCharacteristics) { EXPECT_FALSE(HasCjkNameCharacteristics("Peterson"));
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb index d45b6e5..9a7b59cee 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
@@ -13,7 +13,7 @@ <translation id="1201402288615127009">הבא</translation> <translation id="1240190568154816272">טיפים של Chrome</translation> <translation id="1242008676835033345">מוטמע ב-<ph name="WEBSITE_URL" /></translation> -<translation id="1263609676484797429">מקישים על 'אפליקציות' > 'אפליקציות ברירת מחדל'</translation> +<translation id="1263609676484797429">לוחצים על 'אפליקציות' > 'אפליקציות ברירת מחדל'</translation> <translation id="1272079795634619415">הפסקה</translation> <translation id="1289742167380433257">כדי לחסוך לך נתונים, התמונות בדף הזה עברו אופטימיזציה על ידי Google.</translation> <translation id="129382876167171263">קבצים שנשמרו על ידי אתרים מופיעים כאן</translation> @@ -60,7 +60,7 @@ <translation id="1994173015038366702">כתובת אתר</translation> <translation id="2004697686368036666">ייתכן שתכונות באתרים מסוימים לא יפעלו</translation> <translation id="2025115093177348061">מציאות רבודה</translation> -<translation id="2030769033451695672">כדי לחזור אל <ph name="URL_OF_THE_CURRENT_TAB" />, יש להקיש כאן</translation> +<translation id="2030769033451695672">כדי לחזור אל <ph name="URL_OF_THE_CURRENT_TAB" />, יש ללחוץ כאן</translation> <translation id="2079545284768500474">ביטול הפעולה</translation> <translation id="2091887806945687916">צליל</translation> <translation id="2096716221239095980">מחיקת כל הנתונים</translation> @@ -273,7 +273,7 @@ <translation id="5091663350197390230">כשהאפשרות מופעלת, אתרים יכולים להשתמש ב-JavaScript. כשהאפשרות מושבתת, אתרים לא יכולים להשתמש ב-JavaScript.</translation> <translation id="5099358668261120049">הפעולה הזו תמחק את כל הנתונים וקובצי ה-Cookie שנשמרו על ידי האתר <ph name="ORIGIN" /> או האפליקציה שלו במסך הבית.</translation> <translation id="5100237604440890931">מכווץ – יש ללחוץ כדי להרחיב.</translation> -<translation id="5116239826668864748">אפשר להשתמש ב-Chrome בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="5116239826668864748">אפשר להשתמש ב-Chrome בכל פעם שלוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="5123685120097942451">כרטיסייה אנונימית</translation> <translation id="5139253256813381453">{PRICE_DROP_COUNT,plural, =1{זוהתה ירידה במחיר בכרטיסיות הפתוחות}one{זוהו ירידות במחירים בכרטיסיות הפתוחות}two{זוהו ירידות במחירים בכרטיסיות הפתוחות}other{זוהו ירידות במחירים בכרטיסיות הפתוחות}}</translation> <translation id="5186036860380548585">האפשרות זמינה בחלק העליון של המסך</translation> @@ -357,7 +357,7 @@ <translation id="6205314730813004066">פרטיות בפרסום</translation> <translation id="6207207788774442484">מחיקת הנתונים ואיפוס ההרשאות</translation> <translation id="6231752747840485235">להסיר את '<ph name="APP_NAME" />'?</translation> -<translation id="6234351944623978659">מקישים על אפליקציית הדפדפן > Chrome</translation> +<translation id="6234351944623978659">לוחצים על אפליקציית הדפדפן > Chrome</translation> <translation id="6262191102408817757">על סמך הכרטיסייה האחרונה שלך</translation> <translation id="6262279340360821358">ההרשאות <ph name="PERMISSION_1" /> וגם <ph name="PERMISSION_2" /> חסומות</translation> <translation id="6270391203985052864">אתרים יכולים לבקש לשלוח התראות</translation> @@ -502,7 +502,7 @@ <translation id="8372893542064058268">אישור סנכרון ברקע לאתר ספציפי.</translation> <translation id="83792324527827022">אתר כלשהו משתמש במצלמה ובמיקרופון שלך</translation> <translation id="8380167699614421159">באתר הזה מוצגות מודעות מפריעות או מטעות</translation> -<translation id="8394832520002899662">כדי לחזור לאתר, יש להקיש כאן</translation> +<translation id="8394832520002899662">כדי לחזור לאתר, יש ללחוץ כאן</translation> <translation id="8409345997656833551">קבלת התראה כשאפשר להציג מאמר בתצוגה פשוטה</translation> <translation id="8423565414844018592">גודל הטקסט שהוגדר: <ph name="TEXT_SCALING" /></translation> <translation id="8428213095426709021">הגדרות</translation> @@ -517,7 +517,7 @@ <translation id="851751545965956758">חסימת התחברות של אתרים אל התקנים</translation> <translation id="8525306231823319788">מסך מלא</translation> <translation id="8541410041357371550">האתר הזה מקבל מידע על נושאי המודעות שלך מ-Chrome כדי להציג לך מודעות רלוונטיות יותר</translation> -<translation id="8558480467877843976">אפשר עכשיו להשתמש ב-Chrome בכל פעם שגולשים או מקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="8558480467877843976">אפשר עכשיו להשתמש ב-Chrome בכל פעם שגולשים או לוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="857943718398505171">מותרת (מומלץ)</translation> <translation id="8609465669617005112">הזזה למעלה</translation> <translation id="8617611086246832542">כשהאפשרות מופעלת, אפשר לראות אתרים בתצוגה למחשב. כשהאפשרות מושבתת, אפשר לראות אתרים בתצוגה לנייד.</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 1d24932..7b12dd8 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "50.67", - "log_list_timestamp": "2025-01-12T12:55:41Z", + "version": "50.68", + "log_list_timestamp": "2025-01-13T12:54:41Z", "operators": [ { "name": "Google",
diff --git a/components/cronet/gn2bp/copy.bara.sky b/components/cronet/gn2bp/copy.bara.sky index e4f702a4..8d2d5e30 100644 --- a/components/cronet/gn2bp/copy.bara.sky +++ b/components/cronet/gn2bp/copy.bara.sky
@@ -167,133 +167,151 @@ ], ) +def workflow(name, destination, mode): + core.workflow( + name = name, + authoring = authoring.overwrite("Cronet Mainline Eng <cronet-mainline-eng+copybara@google.com>"), + # Origin folder is specified via source_ref argument, see import_cronet.sh + origin = folder.origin(), + origin_files = cronet_origin_files + glob( + include = [ + # Generated by gen_android_bp.py + "Android.bp.gn2bp", + "**/Android.bp.gn2bp", + "third_party/boringssl/sources.bp", + "third_party/boringssl/sources.mk", + ] + ), + destination = destination, + destination_files = cronet_origin_files + glob( + include = [ + "Android.bp", + "**/Android.bp", + "third_party/boringssl/sources.bp", + "third_party/boringssl/sources.mk", + ] + ), + mode = mode, + transformations = [ + metadata.squash_notes( + prefix= "Import Cronet from Chromium to AOSP." + + "\n\nGenerated by Copybara" + "\n\n"+ "Included changes:\n\n",), + core.rename("Android.bp.gn2bp", "Android.bp") + ], + # See the copybara command line flags in run_gn2bp.py for details on how + # merging is done. + merge_import = core.merge_import_config( + package_path = "", + paths = glob(["**"], + exclude = [ + # Exclude binary files and files containing symbols until + # crbug.com/305035334 is fixed. + "**/*.png", + "**/*.bin", + "**/*.dll", + "**/*.exe", + "base/test/data/pma_corpus/**", + "**/*.res", + "base/tracing/test/data/**", + "**/*.pyc", + "**/*.keystore", + "**/*.jar", + "**/*.so", + "components/cronet/testing/test_server/data/gzipped.html", + "net/data/cache_tests/**", + "net/data/cert_net_fetcher_impl_unittest/gzipped_crl", + "**/*.br", + "**/*.sbr", + "**/*.szst", + "**/*.zst", + "net/data/fuzzer_data/**", + "net/data/pac_file_fetcher_unittest/gzipped_pac", + "**/*.pk8", + "**/*.ico", + "**/*.jpg", + "**/*.hpack", + "**/*.p12", + "**/*.raw", + "**/*.key", + "**/*.der", + "**/*.p7b", + "**/*.keychain", + "**/*.deflate", + "net/data/url_request_unittest/gzip-encoded", + "**/*.pyd", + "**/*.mon", + "testing/libfuzzer/fuzzers/woff2_corpus/**", + "testing/scripts/variations_smoke_test_data/webview_test_seed", + "third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/**", + "**/*.binarypb", + "**/*.docx", + "third_party/boringssl/src/fuzz/*_corpus*/**", + "**/*.crt", + "**/*.crl", + "**/*.o", + "**/*.a", + "**/*.obj", + "**/*.lib", + "**/*.bz2", + "third_party/ced/compact_enc_det_corpus/**", + "**/*.xcf", + "**/*.dat", + "**/*.hash", + "**/*.icu", + "**/*.nrm", + "third_party/icu/source/extra/uconv/samples/**", + "third_party/icu/source/samples/**/*.txt", + "third_party/icu/source/test/fuzzer/**", + "**/*.fuzz", + "**/*.otf", + "third_party/icu/source/test/testdata/**", + "**/*.class", + "third_party/libxml/fuzz/seed_corpus/**", + "**/*.jar", + "**/*.pb", + "**/*.snk", + "third_party/protobuf/php/src/GPBMetadata/Google/Protobuf/*.php", + "third_party/protobuf/objectivec/Tests/golden_*", + "third_party/protobuf/src/google/protobuf/testdata/**", + "third_party/rust/chromium_crates_io/vendor/regex-automata-*/tests/fuzz/testdata/**", + "**/*.gz", + "**/*.qtr", + "**/*.ttf", + "**/*.dfa", + "**/*.fst", + "**/*.bmp", + + # TODO: figure out what's going on with this one - may not be valid + # UTF-8? + "third_party/icu/source/extra/uconv/README", + ] + ), + ), + ) + # Workflow for importing code from Chromium to AOSP Gerrit via a Chromium CI # as a pending CL, including Android build files generated by gn2bp. -core.workflow( - name = "import_cronet_to_aosp_gerrit", - authoring = authoring.overwrite("Cronet Mainline Eng <cronet-mainline-eng+copybara@google.com>"), - # Origin folder is specified via source_ref argument, see import_cronet.sh - origin = folder.origin(), - origin_files = cronet_origin_files + glob( - include = [ - # Generated by gen_android_bp.py - "Android.bp.gn2bp", - "**/Android.bp.gn2bp", - "third_party/boringssl/sources.bp", - "third_party/boringssl/sources.mk", - ] - ), - destination = git.gerrit_destination( +workflow( + "import_cronet_to_aosp_gerrit", + git.gerrit_destination( url = "https://android-review.googlesource.com/platform/external/cronet", fetch = "main", push_to_refs_for = "main", # TODO(crbug.com/372534509): Replace reviewer with team-based Gerrit # account once it is set up. reviewers = ["aymanm@google.com"], - labels = ["Presubmit-Ready+1"], - ), - destination_files = cronet_origin_files + glob( - include = [ - "Android.bp", - "**/Android.bp", - "third_party/boringssl/sources.bp", - "third_party/boringssl/sources.mk", - ] - ), - mode = "CHANGE_REQUEST", - transformations = [ - metadata.squash_notes( - prefix= "Import Cronet from Chromium to AOSP." - + "\n\nGenerated by Copybara" + "\n\n"+ "Included changes:\n\n",), - core.rename("Android.bp.gn2bp", "Android.bp") - ], - # See the copybara command line flags in run_gn2bp.py for details on how - # merging is done. - merge_import = core.merge_import_config( - package_path = "", - paths = glob(["**"], - exclude = [ - # Exclude binary files and files containing symbols until - # crbug.com/305035334 is fixed. - "**/*.png", - "**/*.bin", - "**/*.dll", - "**/*.exe", - "base/test/data/pma_corpus/**", - "**/*.res", - "base/tracing/test/data/**", - "**/*.pyc", - "**/*.keystore", - "**/*.jar", - "**/*.so", - "components/cronet/testing/test_server/data/gzipped.html", - "net/data/cache_tests/**", - "net/data/cert_net_fetcher_impl_unittest/gzipped_crl", - "**/*.br", - "**/*.sbr", - "**/*.szst", - "**/*.zst", - "net/data/fuzzer_data/**", - "net/data/pac_file_fetcher_unittest/gzipped_pac", - "**/*.pk8", - "**/*.ico", - "**/*.jpg", - "**/*.hpack", - "**/*.p12", - "**/*.raw", - "**/*.key", - "**/*.der", - "**/*.p7b", - "**/*.keychain", - "**/*.deflate", - "net/data/url_request_unittest/gzip-encoded", - "**/*.pyd", - "**/*.mon", - "testing/libfuzzer/fuzzers/woff2_corpus/**", - "testing/scripts/variations_smoke_test_data/webview_test_seed", - "third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/**", - "**/*.binarypb", - "**/*.docx", - "third_party/boringssl/src/fuzz/*_corpus*/**", - "**/*.crt", - "**/*.crl", - "**/*.o", - "**/*.a", - "**/*.obj", - "**/*.lib", - "**/*.bz2", - "third_party/ced/compact_enc_det_corpus/**", - "**/*.xcf", - "**/*.dat", - "**/*.hash", - "**/*.icu", - "**/*.nrm", - "third_party/icu/source/extra/uconv/samples/**", - "third_party/icu/source/samples/**/*.txt", - "third_party/icu/source/test/fuzzer/**", - "**/*.fuzz", - "**/*.otf", - "third_party/icu/source/test/testdata/**", - "**/*.class", - "third_party/libxml/fuzz/seed_corpus/**", - "**/*.jar", - "**/*.pb", - "**/*.snk", - "third_party/protobuf/php/src/GPBMetadata/Google/Protobuf/*.php", - "third_party/protobuf/objectivec/Tests/golden_*", - "third_party/protobuf/src/google/protobuf/testdata/**", - "third_party/rust/chromium_crates_io/vendor/regex-automata-*/tests/fuzz/testdata/**", - "**/*.gz", - "**/*.qtr", - "**/*.ttf", - "**/*.dfa", - "**/*.fst", - "**/*.bmp", + labels = ["Presubmit-Ready+1"] + ), + "CHANGE_REQUEST", +) - # TODO: figure out what's going on with this one - may not be valid - # UTF-8? - "third_party/icu/source/extra/uconv/README", - ] - ), - ), +# Same as above, but importing to some git branch. Used for manual testing. +workflow( + "import_cronet_to_git_branch", + git.destination( + # Parameters intentionally left blank, to be filled out through the copybara + # command line. + url = "Git destination to be passed through command line", + ), + "SQUASH", )
diff --git a/components/cronet/gn2bp/run_gn2bp.py b/components/cronet/gn2bp/run_gn2bp.py index ceb6f58..0cb3329 100755 --- a/components/cronet/gn2bp/run_gn2bp.py +++ b/components/cronet/gn2bp/run_gn2bp.py
@@ -21,7 +21,7 @@ import sys import tempfile import time -from typing import List, Set +from typing import List, Optional, Set, Tuple REPOSITORY_ROOT = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir)) @@ -47,7 +47,6 @@ _JAVA_HOME = os.path.join(REPOSITORY_ROOT, 'third_party', 'jdk', 'current') _JAVA_PATH = os.path.join(_JAVA_HOME, 'bin', 'java') _OUT_DIR = os.path.join(REPOSITORY_ROOT, 'out') -_WORKFLOW_NAME = 'import_cronet_to_aosp_gerrit' def _run_license_generation() -> int: @@ -106,31 +105,35 @@ return cronet_utils.run(cmd, shell=True) -def _run_copybara_to_aosp(config: str = _COPYBARA_CONFIG_PATH, - workflow: str = _WORKFLOW_NAME, - copybara_binary: str = _COPYBARA_PATH) -> int: +def _run_copybara_to_aosp( + config: str = _COPYBARA_CONFIG_PATH, + copybara_binary: str = _COPYBARA_PATH, + git_url_and_branch: Optional[Tuple[str, str]] = None) -> int: """Run Copybara CLI to generate an AOSP Gerrit CL with the generated files. Get the commit hash of AOSP `external/cronet` tip of tree to merge into. It will print the generated Gerrit url to stdout. """ - parent_commit_raw = subprocess.check_output( - ('git ls-remote ' - 'https://android.googlesource.com/platform/external/cronet ' - '| grep "refs/heads/main$" | cut -f 1'), shell=True) - parent_commit = parent_commit_raw.decode('utf-8').strip('\n') - print(f'AOSP {parent_commit=}') - # TODO(crbug.com/349099325): Generate gerrit change id until - # --gerrit-new-change flag is fixed. - msg = f'gn2bp{time.time_ns()}' - change_id = f'I{hashlib.sha1(msg.encode()).hexdigest()}' - print(f'Generated {change_id=}') + if not git_url_and_branch: + parent_commit_raw = subprocess.check_output( + ('git ls-remote ' + 'https://android.googlesource.com/platform/external/cronet ' + '| grep "refs/heads/main$" | cut -f 1'), + shell=True) + parent_commit = parent_commit_raw.decode('utf-8').strip('\n') + print(f'AOSP {parent_commit=}') + # TODO(crbug.com/349099325): Generate gerrit change id until + # --gerrit-new-change flag is fixed. + msg = f'gn2bp{time.time_ns()}' + change_id = f'I{hashlib.sha1(msg.encode()).hexdigest()}' + print(f'Generated {change_id=}') with tempfile.TemporaryDirectory() as empty_dir: return cronet_utils.run([ _JAVA_PATH, '-jar', copybara_binary, config, - workflow, + "import_cronet_to_aosp_gerrit" + if git_url_and_branch is None else "import_cronet_to_git_branch", REPOSITORY_ROOT, # We use copybara in merge_import mode to preserve local changes in AOSP # that were not upstreamed to Chromium (in practice, that means @@ -170,15 +173,12 @@ # TODO: https://crbug.com/382268057 - improve on the above. '--baseline-for-merge-import', empty_dir, - '--change-request-parent', - parent_commit, - '--git-push-option', - 'nokeycheck', - '--git-push-option', - 'uploadvalidator~skip', '--ignore-noop', - '--gerrit-change-id', - change_id + *(('--change-request-parent', parent_commit, '--git-push-option', + 'nokeycheck', '--git-push-option', 'uploadvalidator~skip', + '--gerrit-change-id', change_id) if git_url_and_branch is None else + ('--git-destination-url', git_url_and_branch[0], + '--git-destination-push', git_url_and_branch[1])) ]) @@ -190,11 +190,6 @@ help='Copy.bara.sky file path to run Copybara on', default=_COPYBARA_CONFIG_PATH, required=False) - parser.add_argument('--workflow', - type=str, - help='Name of workflow in copy.bara.sky to run', - default=_WORKFLOW_NAME, - required=False) parser.add_argument('--copybara', type=str, help=('Path to copybara executable binary downloaded ' @@ -211,6 +206,14 @@ "copybara afterwards. This is useful if you only " "want to take a look at the generated files " "without doing an actual import.")) + parser.add_argument('--git-url-and-branch', + type=str, + help=("Git URL and branch to push to. If not specified, " + "creates an AOSP Gerrit CL. This option is useful " + "to push to a local git repo for manual testing, " + "for example: " + "file:////home/foo/aosp/external/cronet mybranch"), + nargs=2) args = parser.parse_args() run_copybara = not args.skip_copybara @@ -248,8 +251,8 @@ # Only run Copybara if all build files generated successfully. res_copybara = _run_copybara_to_aosp( config=args.config, - workflow=args.workflow, - copybara_binary=args.copybara) + copybara_binary=args.copybara, + git_url_and_branch=args.git_url_and_branch) finally: for file in arch_to_temp_desc_file.values():
diff --git a/components/embedder_support/android/delegate/web_contents_delegate_android.cc b/components/embedder_support/android/delegate/web_contents_delegate_android.cc index ff8fe40d..be627a34 100644 --- a/components/embedder_support/android/delegate/web_contents_delegate_android.cc +++ b/components/embedder_support/android/delegate/web_contents_delegate_android.cc
@@ -484,6 +484,16 @@ return false; } +bool WebContentsDelegateAndroid::SupportsForwardTransitionAnimation() { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) { + return false; + } + return Java_WebContentsDelegateAndroid_supportsForwardTransitionAnimation( + env, obj); +} + SkBitmap WebContentsDelegateAndroid::MaybeCopyContentAreaAsBitmapSync() { TRACE_EVENT("content", "WebContentsDelegateAndroid::MaybeCopyContentAreaAsBitmapSync");
diff --git a/components/embedder_support/android/delegate/web_contents_delegate_android.h b/components/embedder_support/android/delegate/web_contents_delegate_android.h index 9484a32..d97d107 100644 --- a/components/embedder_support/android/delegate/web_contents_delegate_android.h +++ b/components/embedder_support/android/delegate/web_contents_delegate_android.h
@@ -128,6 +128,7 @@ // empty bitmap if the capture fails) only if this returns true. bool MaybeCopyContentAreaAsBitmap( base::OnceCallback<void(const SkBitmap&)> callback) override; + bool SupportsForwardTransitionAnimation() override; SkBitmap MaybeCopyContentAreaAsBitmapSync() override; void DidBackForwardTransitionAnimationChange() override; content::BackForwardTransitionAnimationManager::FallbackUXConfig
diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java index d5c8aa4..ad5e388e 100644 --- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java +++ b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate/WebContentsDelegateAndroid.java
@@ -214,6 +214,11 @@ }); } + @CalledByNative + public boolean supportsForwardTransitionAnimation() { + return false; + } + /** * Used to fetch the color info to compose the fallback UX for the navigation transitions when * no valid screenshots are available.
diff --git a/components/guest_view/browser/test_guest_view_manager.cc b/components/guest_view/browser/test_guest_view_manager.cc index e40bd6de..aff8033 100644 --- a/components/guest_view/browser/test_guest_view_manager.cc +++ b/components/guest_view/browser/test_guest_view_manager.cc
@@ -12,6 +12,7 @@ #include "components/guest_view/browser/guest_view_base.h" #include "components/guest_view/browser/guest_view_manager_delegate.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/common/content_features.h" #include "content/public/test/browser_test_utils.h" namespace guest_view { @@ -133,6 +134,19 @@ EXPECT_TRUE(base::test::RunUntil([&]() { return guest_view->attached(); })); } +bool TestGuestViewManager::WaitUntilAttachedAndLoaded( + GuestViewBase* guest_view) { + WaitUntilAttached(guest_view); + if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) { + return base::test::RunUntil([&]() { + return guest_view->GetGuestMainFrame() + ->IsDocumentOnLoadCompletedInMainFrame(); + }); + } else { + return content::WaitForLoadStop(guest_view->web_contents()); + } +} + void TestGuestViewManager::WaitForViewGarbageCollected() { gc_run_loop_ = std::make_unique<base::RunLoop>(); gc_run_loop_->Run();
diff --git a/components/guest_view/browser/test_guest_view_manager.h b/components/guest_view/browser/test_guest_view_manager.h index 867bb0fd..3418ace 100644 --- a/components/guest_view/browser/test_guest_view_manager.h +++ b/components/guest_view/browser/test_guest_view_manager.h
@@ -50,6 +50,7 @@ content::RenderFrameHost* GetLastGuestRenderFrameHostCreated(); void WaitUntilAttached(GuestViewBase* guest_view); + [[nodiscard]] bool WaitUntilAttachedAndLoaded(GuestViewBase* guest_view); // Returns the number of guests currently still alive at the time of calling // this method.
diff --git a/components/image_fetcher/core/image_data_fetcher.cc b/components/image_fetcher/core/image_data_fetcher.cc index 65de5590..217f196f 100644 --- a/components/image_fetcher/core/image_data_fetcher.cc +++ b/components/image_fetcher/core/image_data_fetcher.cc
@@ -122,9 +122,12 @@ request->url = image_url; request->referrer_policy = referrer_policy; request->referrer = GURL(referrer); - request->credentials_mode = send_cookies - ? network::mojom::CredentialsMode::kInclude - : network::mojom::CredentialsMode::kOmit; + if (send_cookies) { + request->credentials_mode = network::mojom::CredentialsMode::kInclude; + request->site_for_cookies = net::SiteForCookies::FromUrl(image_url); + } else { + request->credentials_mode = network::mojom::CredentialsMode::kOmit; + } std::unique_ptr<network::SimpleURLLoader> loader = network::SimpleURLLoader::Create(std::move(request),
diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnibox/browser/autocomplete_input.cc index 079a25a..400c4d0d 100644 --- a/components/omnibox/browser/autocomplete_input.cc +++ b/components/omnibox/browser/autocomplete_input.cc
@@ -324,20 +324,30 @@ return type; // We don't know about this scheme. It might be that the user typed a - // URL of the form "username:password@foo.com". + // URL of the form "username:password@foo.com", or a custom query, such as + // "site:socialmedia.com @tagname". const std::u16string http_scheme_prefix = base::ASCIIToUTF16( std::string(url::kHttpScheme) + url::kStandardSchemeSeparator); + const std::u16string tentative_url_candidate = http_scheme_prefix + text; url::Parsed http_parts; std::u16string http_scheme; GURL http_canonicalized_url; metrics::OmniboxInputType http_type = - Parse(http_scheme_prefix + text, desired_tld, scheme_classifier, + Parse(tentative_url_candidate, desired_tld, scheme_classifier, &http_parts, &http_scheme, &http_canonicalized_url); DCHECK_EQ(std::string(url::kHttpScheme), base::UTF16ToUTF8(http_scheme)); if ((http_type == metrics::OmniboxInputType::URL) && http_parts.username.is_nonempty() && http_parts.password.is_nonempty()) { + // Recognize and re-classify queries like: `site:web.com @query` + auto tentative_password_sv = http_parts.password.as_string_view_on( + tentative_url_candidate.c_str()); + if (tentative_password_sv.find(u' ') != tentative_password_sv.npos) { + *canonicalized_url = GURL::EmptyGURL(); + return metrics::OmniboxInputType::QUERY; + } + // Manually re-jigger the parsed parts to match |text| (without the // http scheme added). http_parts.scheme.reset();
diff --git a/components/omnibox/browser/autocomplete_input_unittest.cc b/components/omnibox/browser/autocomplete_input_unittest.cc index 97db29dd..f8c6220e 100644 --- a/components/omnibox/browser/autocomplete_input_unittest.cc +++ b/components/omnibox/browser/autocomplete_input_unittest.cc
@@ -535,3 +535,46 @@ EXPECT_EQ(input.GetFeaturedKeywordMode(), test_case.expected_mode); } } + +TEST(AutocompleteInputTest, ParseUrlLookalikeWithCredentials) { + std::u16string input = u"login:password@domain:1234/path"; + std::u16string scheme; + url::Parsed parts; + GURL canonicalized_url; + auto input_type = AutocompleteInput::Parse( + input, "", TestSchemeClassifier(), &parts, &scheme, &canonicalized_url); + + EXPECT_TRUE(parts.username.is_nonempty()); + EXPECT_TRUE(parts.password.is_nonempty()); + EXPECT_EQ(metrics::OmniboxInputType::URL, input_type); + EXPECT_EQ("http://login:password@domain:1234/path", canonicalized_url.spec()); +} + +TEST(AutocompleteInputTest, ParseUrlLookalikeWithScheme) { + std::u16string input = u"http://login:pass word@domain:1234/path"; + std::u16string scheme; + url::Parsed parts; + GURL canonicalized_url; + auto input_type = AutocompleteInput::Parse( + input, "", TestSchemeClassifier(), &parts, &scheme, &canonicalized_url); + + EXPECT_TRUE(parts.username.is_nonempty()); + EXPECT_TRUE(parts.password.is_nonempty()); + EXPECT_EQ(metrics::OmniboxInputType::URL, input_type); + EXPECT_EQ("http://login:pass%20word@domain:1234/path", + canonicalized_url.spec()); +} + +TEST(AutocompleteInputTest, ParseUrlLookalikeWithSearchQuery) { + std::u16string input = u"site:wikipedia.org ch4@zeolite"; + std::u16string scheme; + url::Parsed parts; + GURL canonicalized_url; + auto input_type = AutocompleteInput::Parse( + input, "", TestSchemeClassifier(), &parts, &scheme, &canonicalized_url); + + EXPECT_FALSE(parts.username.is_nonempty()); + EXPECT_FALSE(parts.password.is_nonempty()); + EXPECT_EQ(metrics::OmniboxInputType::QUERY, input_type); + EXPECT_FALSE(canonicalized_url.is_valid()); +}
diff --git a/components/omnibox_pedal_ui_strings.grdp b/components/omnibox_pedal_ui_strings.grdp index f055f64..e959368 100644 --- a/components/omnibox_pedal_ui_strings.grdp +++ b/components/omnibox_pedal_ui_strings.grdp
@@ -82,9 +82,6 @@ Update Chrome button, activate to update Chrome from your Chrome settings </message> - <message name="IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT" desc="The button text contents to suggest pedal action, RUN_CHROME_SAFETY_CHECK"> - Run Chrome safety check - </message> <message name="IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUGGESTION_CONTENTS" desc="The button hover tooltip text to describe pedal action, RUN_CHROME_SAFETY_CHECK"> Run a safety check in Chrome settings </message>
diff --git a/components/omnibox_pedal_ui_strings_grdp/IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT.png.sha1 b/components/omnibox_pedal_ui_strings_grdp/IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT.png.sha1 deleted file mode 100644 index 6ee7293..0000000 --- a/components/omnibox_pedal_ui_strings_grdp/IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -396ed356a2c3b857d1dfd7a3647bb11f6a510302 \ No newline at end of file
diff --git a/components/page_info_strings.grdp b/components/page_info_strings.grdp index d4b188bc..6546ffc 100644 --- a/components/page_info_strings.grdp +++ b/components/page_info_strings.grdp
@@ -847,6 +847,9 @@ <message name="IDS_PAGE_INFO_MERCHANT_TRUST_REVIEWS_SUMMARY_TITLE" desc="The title of the reviews summary section of the merchant trust feature in the page info" translateable="false"> What customers say </message> + <message name="IDS_PAGE_INFO_MERCHANT_TRUST_HATS_BUTTON" desc="The button in merchant trust page info subpage that open HaTS dialog which allows users to submit a survey about the feature." translateable="false"> + Is this helpful? + </message> <!-- History strings --> <if expr="is_ios">
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc index a18c40f..2f3319c 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -171,7 +171,8 @@ AdsPageLoadMetricsObserver::CreateIfNeeded( content::WebContents* web_contents, heavy_ad_intervention::HeavyAdService* heavy_ad_service, - const ApplicationLocaleGetter& application_locale_getter) { + const ApplicationLocaleGetter& application_locale_getter, + bool is_incognito) { // TODO(bokan): ContentSubresourceFilterThrottleManager is now associated // with a FrameTree. When AdsPageLoadMetricsObserver becomes aware of MPArch // this should use the associated page rather than the primary page. @@ -179,8 +180,9 @@ !subresource_filter::ContentSubresourceFilterWebContentsHelper:: FromWebContents(web_contents)) return nullptr; + return std::make_unique<AdsPageLoadMetricsObserver>( - heavy_ad_service, application_locale_getter); + heavy_ad_service, application_locale_getter, is_incognito); } // static @@ -240,6 +242,7 @@ AdsPageLoadMetricsObserver::AdsPageLoadMetricsObserver( heavy_ad_intervention::HeavyAdService* heavy_ad_service, const ApplicationLocaleGetter& application_locale_getter, + bool is_incognito, base::TickClock* clock, heavy_ad_intervention::HeavyAdBlocklist* blocklist) : clock_(clock ? clock : base::DefaultTickClock::GetInstance()), @@ -251,7 +254,8 @@ heavy_ad_threshold_noise_provider_( std::make_unique<HeavyAdThresholdNoiseProvider>( heavy_ad_privacy_mitigations_enabled_ /* use_noise */)), - page_ad_density_tracker_(clock) { + page_ad_density_tracker_(clock), + is_incognito_(is_incognito) { // Manual setting of the heavy ad blocklist should be used only as a // convenience for tests that don't create HeavyAdService. DCHECK(!heavy_ad_service_ || !heavy_ad_blocklist_); @@ -1237,6 +1241,15 @@ earliest_fcp_since_top_nav_start.value()); } } + + if (is_incognito_) { + if (auto first_contentful_paint = + ad_frame_data.earliest_first_contentful_paint()) { + ADS_HISTOGRAM("AdPaintTiming.NavigationToFirstContentfulPaint3.Incognito", + PAGE_LOAD_LONG_HISTOGRAM, FrameVisibility::kAnyVisibility, + first_contentful_paint.value()); + } + } } void AdsPageLoadMetricsObserver::RecordPerFrameHistogramsForHeavyAds(
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h index d4213a5..eeec556b 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h
@@ -77,7 +77,8 @@ static std::unique_ptr<AdsPageLoadMetricsObserver> CreateIfNeeded( content::WebContents* web_contents, heavy_ad_intervention::HeavyAdService* heavy_ad_service, - const ApplicationLocaleGetter& application_local_getter); + const ApplicationLocaleGetter& application_local_getter, + bool is_incognito); // For a given frame, returns whether or not the frame's url would be // considered same origin to the outermost main frame's url. @@ -89,6 +90,7 @@ explicit AdsPageLoadMetricsObserver( heavy_ad_intervention::HeavyAdService* heavy_ad_service, const ApplicationLocaleGetter& application_local_getter, + bool is_incognito, base::TickClock* clock = nullptr, heavy_ad_intervention::HeavyAdBlocklist* blocklist = nullptr); @@ -330,6 +332,9 @@ // Tracks number of memory updates received. int memory_update_count_ = 0; + + // Whether the WebContents being observed is for an Incognito profile. + bool is_incognito_; }; } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc index e24616b..8c8d1f5 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -868,6 +868,8 @@ bool WithFencedFrames() { return GetParam(); } + virtual bool IsIncognito() { return false; } + base::test::ScopedFeatureList scoped_feature_list_; std::unique_ptr<PageLoadMetricsObserverTester> tester_; @@ -887,7 +889,7 @@ auto observer = std::make_unique<AdsPageLoadMetricsObserver>( /*heavy_ad_service=*/nullptr, base::BindRepeating([]() { return std::string("en-US"); }), - clock_.get(), test_blocklist_.get()); + IsIncognito(), clock_.get(), test_blocklist_.get()); // Mock the noise provider to make tests deterministic. Tests can override // this again to test non-zero noise. observer->SetHeavyAdThresholdNoiseProviderForTesting( @@ -2958,6 +2960,8 @@ histogram_tester().ExpectTotalCount( "AdPaintTiming.NavigationToFirstContentfulPaint3", 0); histogram_tester().ExpectTotalCount( + "AdPaintTiming.NavigationToFirstContentfulPaint3.Incognito", 0); + histogram_tester().ExpectTotalCount( "AdPaintTiming.TopFrameNavigationToFirstAdFirstContentfulPaint", 0); histogram_tester().ExpectTotalCount( SuffixedHistogram( @@ -3020,6 +3024,10 @@ histogram_tester().ExpectUniqueSample( SuffixedHistogram("AdPaintTiming.NavigationToFirstContentfulPaint3"), 100, 1); + histogram_tester().ExpectUniqueSample( + SuffixedHistogram( + "AdPaintTiming.NavigationToFirstContentfulPaint3.Incognito"), + 100, 0); histogram_tester().ExpectUniqueSample( SuffixedHistogram( @@ -3672,4 +3680,40 @@ histogram_tester().ExpectUniqueSample(kMemoryUpdateCountHistogramId, 3, 1); } +class AdsPageLoadMetricsObserverIncognitoTest + : public AdsPageLoadMetricsObserverTest { + private: + bool IsIncognito() override { return true; } +}; + +INSTANTIATE_TEST_SUITE_P(All, + AdsPageLoadMetricsObserverIncognitoTest, + testing::Bool()); + +TEST_P(AdsPageLoadMetricsObserverIncognitoTest, FirstContentfulPaint_Recorded) { + base::TimeTicks start = base::TimeTicks::Now(); + RenderFrameHost* main_frame = + NavigateFrame(kNonAdUrl, web_contents()->GetPrimaryMainFrame(), start); + + RenderFrameHost* ad_frame = CreateAndNavigateSubFrame( + kAdUrl, main_frame, start + base::Milliseconds(100)); + + // Load some bytes so that the frame is recorded. + ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, 100); + + // Set FirstContentfulPaint. + SimulateFirstContentfulPaint(ad_frame, base::Milliseconds(100)); + + // Navigate away and check the histogram. + NavigateFrame(kNonAdUrl, main_frame); + + histogram_tester().ExpectUniqueSample( + SuffixedHistogram("AdPaintTiming.NavigationToFirstContentfulPaint3"), 100, + 1); + histogram_tester().ExpectUniqueSample( + SuffixedHistogram( + "AdPaintTiming.NavigationToFirstContentfulPaint3.Incognito"), + 100, 1); +} + } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc index 643f164..995f73e 100644 --- a/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc +++ b/components/page_load_metrics/browser/observers/page_load_metrics_observer_tester.cc
@@ -79,6 +79,10 @@ bool ShouldObserveScheme(std::string_view scheme) override { return false; } + bool IsIncognito(content::WebContents* web_contents) override { + return false; + } + page_load_metrics::PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext( content::BrowserContext* browser_context) override {
diff --git a/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h b/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h index 22d00cc..4b2efaf3 100644 --- a/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h +++ b/components/page_load_metrics/browser/page_load_metrics_embedder_interface.h
@@ -39,6 +39,7 @@ virtual bool IsExtensionUrl(const GURL& url) = 0; virtual bool IsNonTabWebUI(const GURL& url) = 0; virtual bool ShouldObserveScheme(std::string_view scheme) = 0; + virtual bool IsIncognito(content::WebContents* web_contents) = 0; // Returns the PageLoadMetricsMemoryTracker for the given BrowserContext if // tracking is enabled.
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc b/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc index 01ff9bc..e0a85d07 100644 --- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc +++ b/components/page_load_metrics/browser/page_load_metrics_memory_tracker_unittest.cc
@@ -50,6 +50,9 @@ } bool IsExtensionUrl(const GURL& url) override { return false; } bool IsNonTabWebUI(const GURL& url) override { return false; } + bool IsIncognito(content::WebContents* web_contents) override { + return false; + } page_load_metrics::PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext(
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc index d9d5fd0..22fae98 100644 --- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc +++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.cc
@@ -239,6 +239,11 @@ return false; } +bool TestMetricsWebContentsObserverEmbedder::IsIncognito( + content::WebContents* web_contents) { + return false; +} + PageLoadMetricsMemoryTracker* TestMetricsWebContentsObserverEmbedder::GetMemoryTrackerForBrowserContext( content::BrowserContext* browser_context) {
diff --git a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h index 15d1c53..a4c7e1a6 100644 --- a/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h +++ b/components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h
@@ -36,6 +36,7 @@ bool ShouldObserveScheme(std::string_view scheme) override; PageLoadMetricsMemoryTracker* GetMemoryTrackerForBrowserContext( content::BrowserContext* browser_context) override; + bool IsIncognito(content::WebContents* web_contents) override; void set_is_ntp(bool is_ntp) { is_ntp_ = is_ntp; }
diff --git a/components/password_manager/core/browser/mock_password_manager.h b/components/password_manager/core/browser/mock_password_manager.h index d131909..3d15dfcb 100644 --- a/components/password_manager/core/browser/mock_password_manager.h +++ b/components/password_manager/core/browser/mock_password_manager.h
@@ -148,6 +148,7 @@ (const autofill::FieldDataManager&, const PasswordManagerDriver*), (override)); #endif + MOCK_METHOD(bool, IsFormManagerPendingPasswordUpdate, (), (const override)); }; } // namespace password_manager
diff --git a/components/password_manager/core/browser/password_manager.h b/components/password_manager/core/browser/password_manager.h index c0d926d5..477ad41 100644 --- a/components/password_manager/core/browser/password_manager.h +++ b/components/password_manager/core/browser/password_manager.h
@@ -158,6 +158,7 @@ const autofill::FieldDataManager& field_data_manager, const PasswordManagerDriver* driver) override; #endif + bool IsFormManagerPendingPasswordUpdate() const override; // Notifies the renderer to start the generation flow or pops up additional UI // in case there is a danger to overwrite an existing password. @@ -271,9 +272,6 @@ } #endif // defined(UNIT_TEST) - // Returns true if a form manager is processing a password update. - bool IsFormManagerPendingPasswordUpdate() const; - // Returns the submitted PasswordForm if there exists one. std::optional<PasswordForm> GetSubmittedCredentials() const override;
diff --git a/components/password_manager/core/browser/password_manager_interface.h b/components/password_manager/core/browser/password_manager_interface.h index ce136ea..01233c4 100644 --- a/components/password_manager/core/browser/password_manager_interface.h +++ b/components/password_manager/core/browser/password_manager_interface.h
@@ -210,6 +210,9 @@ const autofill::FieldDataManager& field_data_manager, const PasswordManagerDriver* driver) = 0; #endif + + // Returns true if a form manager is processing a password update. + virtual bool IsFormManagerPendingPasswordUpdate() const = 0; }; } // namespace password_manager
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto index 502bb475..9449afb 100644 --- a/components/policy/proto/device_management_backend.proto +++ b/components/policy/proto/device_management_backend.proto
@@ -4693,6 +4693,34 @@ // Response to `FmRegistrationTokenUploadRequest`. message FmRegistrationTokenUploadResponse {} +enum PromotionType { + PROMOTION_TYPE_UNSPECIFIED = 0; + CHROME_ENTERPRISE_CORE = 1; + CHROME_ENTERPRISE_PREMIUM = 2; +} + +// The list of CEC, CEP promotions that the user is eligible for. +message PromotionEligibilityList { + optional PromotionType policy_page_promotion = 1; + + optional PromotionType management_page_promotion = 2; + + optional PromotionType interstitial_block_promotion = 3; + + optional PromotionType interstitial_warn_promotion = 4; + + optional PromotionType ntp_promotion = 5; + + optional PromotionType cws_extension_details_promotion = 6; + + optional PromotionType cws_privacy_details_promotion = 7; +} + +message GetUserEligiblePromotionsResponse { + // The list of promotions that the user is eligible for. + optional PromotionEligibilityList promotions = 1; +} + // Additional detail about the error which can be used to clarify user messaging // around the error or to influence Chrome's error-handling behavior. enum DeviceManagementErrorDetail { @@ -5109,7 +5137,10 @@ optional FmRegistrationTokenUploadResponse fm_registration_token_upload_response = 41; - // Next id: 42. + optional GetUserEligiblePromotionsResponse + get_user_eligible_promotions_response = 42; + + // Next id: 43. } // Device State Information stored in the server is retrieval at
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index b43bcdc..c42bf66 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -182,6 +182,17 @@ Si se inhabilita esta política, la función de lista de la compra no estará disponible. </translation> <translation id="1144147113722324623">Habilitar las actualizaciones automáticas a HTTPS en audio y vídeo, y mostrar una advertencia sobre las imágenes que indique que no son seguras</translation> +<translation id="1146804230175611166">La búsqueda en el historial basada en IA es una función que permite a los usuarios buscar en su historial de navegación y recibir respuestas generadas en función del contenido de las páginas, no solo de su título y URL. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="1147732569915511430">El hash SHA-256 de la imagen de avatar.</translation> <translation id="1148415065145333943">Inhabilitar el modo avanzado de carga de la batería</translation> <translation id="1149203480502386713">Habilitar acuerdo de claves poscuántico para TLS</translation> @@ -202,6 +213,19 @@ Si se inhabilita, no se activará el cuadro de diálogo de interceptación de inicio de sesión. Cuando esté inhabilitada, se seguirá mostrando un cuadro de diálogo si la separación de perfiles de cuentas gestionadas se aplica mediante <ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" />.</translation> <translation id="1158844608156732189">Configuración de Kerberos (una línea por elemento de matriz). Más información: https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html.</translation> +<translation id="1159241725763211010">Superposición de Lens permite a los usuarios hacer búsquedas de Google interactuando con una captura de pantalla de la página actual superpuesta al contenido web. También les permite hacer búsquedas en Google que tengan en cuenta el contexto de la página actual. Para proporcionar respuestas contextuales, Superposición de Lens envía el contenido de la página a Google para responder a la consulta del usuario con el contexto de la página en la que se encuentra. + +No hay ninguna configuración de usuario para controlar esta función, que generalmente está disponible para todos los usuarios que tienen Google como buscador predeterminado a menos que esta política la inhabilite. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="1160479894929412407">Permitir protocolo QUIC</translation> <translation id="1160939557934457296">Inhabilitar seguir navegando desde la página de advertencia sobre Navegación segura</translation> <translation id="1161685818042751282">No importar certificados de servidor TLS añadidos por el usuario desde almacenes de confianza de la plataforma.</translation> @@ -2147,6 +2171,17 @@ * La acción predeterminada que se deberá llevar a cabo en caso de inactividad cuando el dispositivo esté conectado a la red eléctrica es apagar el dispositivo. Si no se definen esta política ni ninguno de sus ajustes, se usarán los valores predeterminados de los distintos ajustes de energía.</translation> +<translation id="2589944745979739478">Esta política controla la configuración de la función de edición de fotos basada en IA generativa de <ph name="PRODUCT_OS_NAME" />. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="2591775699187375408">Poner siempre el proceso de audio en un entorno aislado</translation> <translation id="2592091433672667839">Duración de la inactividad antes de que se muestre el protector de pantalla en el modo de venta</translation> <translation id="259289618675490104">Si a esta política se le asigna el valor 0 ("All") o no se le asigna ningún valor, los usuarios podrán gestionar certificados. Si se le asigna el valor 2 ("None"), los usuarios solo podrán visualizar certificados, pero no podrán gestionarlos. @@ -2306,6 +2341,17 @@ Si esta política no se establece para un sitio, se le aplicará la política de <ph name="DEFAULT_LOCAL_FONTS_SETTING_POLICY_NAME" />, si se ha definido. En caso contrario, el permiso se ajustará a los valores predeterminados del navegador y los usuarios podrán elegir este permiso en función del sitio.</translation> <translation id="2727844239611930002">Permitir que <ph name="PRODUCT_NAME" /> determine si se muestra el mensaje de <ph name="PRIVACY_SANDBOX_NAME" />.</translation> +<translation id="2729889068935597630">Esta política define la configuración predeterminada de todas las funciones de IA generativa incluidas. Por ejemplo, si se le asigna el valor 1 a la política, esta será la configuración predeterminada de todas las funciones de IA generativa incluidas. No afectará a ningún valor de política definido manualmente. Consulta https://support.google.com/chrome/a?p=generative_ai_settings para ver la lista de funciones incluidas. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si una función incluida no tiene un valor de política equivalente, se usará el valor más alto más cercano. Consulta la documentación de esa función para obtener más información sobre cómo interactúa con los valores de esta política. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="2730200383593984228">Permitir que los usuarios no afiliados utilicen aplicaciones Android</translation> <translation id="2730419309754848345">Imprimir PDF como imagen de forma predeterminada</translation> <translation id="2730644640965800157">Si se habilita esta política, se desactivará la sincronización de <ph name="GOOGLE_DRIVE_NAME" /> en la aplicación Archivos de <ph name="PRODUCT_OS_NAME" />. No se subirán datos a Drive. @@ -4610,6 +4656,7 @@ Esta política no tendrá efecto si se habilita, se deja vacía o no se define.</translation> <translation id="449423975179525290">Configura las políticas relacionadas con <ph name="PLUGIN_VM_NAME" />.</translation> <translation id="449561952193478261">Color azul para la retroiluminación del teclado</translation> +<translation id="4497491764379007385">Particionar URLs blob durante la obtención y la navegación.</translation> <translation id="449784980858429908">Permite conceder permiso automáticamente a sitios para conectarse a todos los puertos serie.</translation> <translation id="4498626728750662965">El visor de PDFs usa el renderizador de Skia</translation> <translation id="4499376951770369935">Las actualizaciones de ChromeOS se configuran a la versión definida en el manifiesto de la aplicación de kiosco</translation> @@ -5067,6 +5114,17 @@ <translation id="4857223512478723171">No permitir el modo de pantalla completa</translation> <translation id="4857888176748302062">Permitir que los orígenes consulten atributos de dispositivos</translation> <translation id="4858735034935305895">Permitir modo de pantalla completa</translation> +<translation id="4858882153530729282">Esta política controla si las URLs blob se particionan durante la obtención y la navegación. +Si se habilita esta política o no se define, las URLs blob se particionarán. +Si se inhabilita esta política, las URLs blob no se particionarán. + +Si Partición del almacenamiento se inhabilita en un origen de nivel superior concreto mediante <ph name="THIRD_PARTY_STORAGE_PARTITIONING_BLOCKED_FOR_ORIGINS_POLICY_NAME" /> o <ph name="DEFAULT_THIRD_PARTY_STORAGE_PARTITIONING_SETTING_POLICY_NAME" />, las URLs blob tampoco se particionarán. + +Si tienes que usar esta política, registra un error en crbug.com, explica cómo la quieres usar y pon en copia a {janiceliu, awillia}@chromium.org. Se prevé que esta política esté disponible en la versión 138 de <ph name="PRODUCT_NAME" />. Después, la antigua implementación se eliminará. + +NOTA: Solo los procesos de renderizado que se hayan iniciado recientemente reflejarán los cambios de esta política mientras se esté ejecutando el navegador. + +Para obtener información detallada sobre la partición del almacenamiento de terceros, consulta https://developers.google.com/privacy-sandbox/cookies/storage-partitioning.</translation> <translation id="4860900625632464759">Permitir que los usuarios sincronicen mensajes SMS entre su teléfono y el Chromebook</translation> <translation id="486146220825734683">No permitir que los usuarios activen la opción de recordar contraseñas de Kerberos</translation> <translation id="4861767323695239729">Configurar los métodos de introducción admitidos en una sesión de usuario</translation> @@ -5356,6 +5414,17 @@ <translation id="504689994545234073">Habilitar el almacenamiento local de archivos de usuario</translation> <translation id="5048890362473520096">Habilitar el entorno aislado de LPAC para servicios de impresión</translation> <translation id="5055474681190962362">Día del mes [1-31] en el que se debe reiniciar, interpretado en la zona horaria local del dispositivo. Solo se utiliza si el valor de "frequency" (frecuencia) es "MONTHLY" (mensual). Si este valor es superior al número máximo de días de un mes concreto, se seleccionará el último día del mes.</translation> +<translation id="5055513974503523022">La IA generativa en VC Background permite a los usuarios expresarse mediante funciones de IA generativa con las que crear fondos personalizados para videoconferencias en <ph name="PRODUCT_OS_NAME" />. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="5056708224511062314">Lupa inhabilitada</translation> <translation id="5058573563327660283">Seleccionar la estrategia utilizada para liberar espacio en disco durante la limpieza automática (obsoleta)</translation> <translation id="5061114193960158745">Si se define esta política, controlará la lista de sitios web que nunca provocarán que se cambie de navegador. Cada elemento se tratará como una regla. Las reglas para las que se encuentre una coincidencia no abrirán un navegador alternativo. A diferencia de la política <ph name="URL_LIST_POLICY_NAME" />, estas reglas se aplicarán en ambas direcciones. Si el complemento de <ph name="IE_PRODUCT_NAME" /> está activado, también controlará si <ph name="IE_PRODUCT_NAME" /> debe abrir esas URL en <ph name="PRODUCT_NAME" />. @@ -5375,6 +5444,17 @@ Si se le asigna el valor <ph name="LACROS_BACKWARD_MIGRATION_KEEP_SAFE_DATA" />, se eliminarán la mayoría de los datos de usuario. Solo se conservarán los archivos que sean independientes del navegador (como las descargas). Si se le asigna el valor <ph name="LACROS_BACKWARD_MIGRATION_KEEP_ALL" />, se conservarán todos los datos de usuario. Esta opción tiene un alto riesgo de fallo. Si se produce un error, será necesario hacer un Powerwash para recuperar el dispositivo.</translation> +<translation id="507032775281485106">La función de fondos de pantalla creados con IA generativa permite a los usuarios expresarse mediante funciones de IA generativa para crear fondos de pantalla personalizados en <ph name="PRODUCT_OS_NAME" />. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="5071303485174858500">Inhabilitar sesión de invitado administrada y restringida.</translation> <translation id="5073609397321802133">Si se asigna el valor "false" a esta política, la página Nueva pestaña no permitirá a los usuarios personalizar la imagen de fondo. Aunque se cambie el valor a "true" posteriormente, las imágenes de fondo personalizadas se eliminarán de forma permanente. @@ -6177,6 +6257,17 @@ Esta política está obsoleta. Usa la política <ph name="USER_PRINTERS_ALLOWED" /> en su lugar. </translation> +<translation id="5582570632838248297">Comparación de pestañas es una herramienta basada en IA para comparar la información de las pestañas de un usuario. Por ejemplo, la función se puede ofrecer al usuario cuando se abran varias pestañas con productos de una categoría similar. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="5583806683960333345">Si se habilita esta opción, los usuarios podrán usar la conexión compartida instantánea para permitir que su teléfono de Google comparta los datos móviles con su dispositivo. Si se inhabilita esta opción, los usuarios no podrán usar la conexión compartida instantánea. @@ -6968,6 +7059,17 @@ <translation id="6203715554101884845">Si se define esta política, podrás añadir una lista con URLs que especifiquen qué sitios obtendrán permiso automáticamente para acceder a un dispositivo HID con los IDs de proveedor y producto facilitados en la pantalla de inicio de sesión. Cada elemento de la lista debe tener los campos <ph name="DEVICES_FIELD_NAME" /> y <ph name="URLS_FIELD_NAME" /> para ser válido. De lo contrario, el elemento se ignorará. Cada elemento del campo <ph name="DEVICES_FIELD_NAME" /> debe tener un campo <ph name="VENDOR_ID_FIELD_NAME" /> y puede tener un campo <ph name="PRODUCT_ID_FIELD_NAME" />. Si se omite el campo <ph name="PRODUCT_ID_FIELD_NAME" />, se creará una política referida a todos los dispositivos con el ID de proveedor especificado. Un elemento que tenga un campo <ph name="PRODUCT_ID_FIELD_NAME" />, pero que no tenga un campo <ph name="VENDOR_ID_FIELD_NAME" />, no se considerará válido y se ignorará. Si no se define esta política, se usará el valor predeterminado global para todos los sitios (sin acceso automático).</translation> +<translation id="6205472215607025971">Organizador de pestañas es una herramienta basada en IA que crea automáticamente grupos de pestañas a partir de las pestañas abiertas de un usuario. Las sugerencias se basan en pestañas abiertas, pero no en el contenido de la página. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="6207607210601267301">Inhabilitar la autenticación sin PIN para el host de acceso remoto</translation> <translation id="6208896993204286313">Proporcionar información de políticas de <ph name="PRODUCT_NAME" /></translation> <translation id="6210259502936598222">Proporcionar información de versiones del SO y de <ph name="PRODUCT_NAME" /></translation> @@ -7314,6 +7416,24 @@ Si esta política no se establece para un sitio, se le aplicará la política de <ph name="DEFAULT_LOCAL_FONTS_SETTING_POLICY_NAME" />, si se ha definido. En caso contrario, el permiso se ajustará a los valores predeterminados del navegador y los usuarios podrán elegir este permiso en función del sitio.</translation> <translation id="6383774771168138899">Configura el flujo de <ph name="CLOUD_UPLOAD_NAME" /> para <ph name="MICROSOFT_ONE_DRIVE_NAME" /> y <ph name="MICROSOFT_365_NAME" /></translation> <translation id="6384542789059421431">Habilitar que se muestren páginas de resultados del buscador predeterminado en un panel lateral del navegador.</translation> +<translation id="6389858262577493180">Habilitar el uso de <ph name="GLIC" /></translation> +<translation id="6390338862225976270">Estas funciones de DevTools de <ph name="PRODUCT_NAME" /> emplean modelos de IA generativa para proporcionar información de depuración adicional. Para usar estas funciones, <ph name="PRODUCT_NAME" /> tiene que recoger datos como mensajes de error, rastreos de la pila, fragmentos de código y solicitudes de red, y enviarlos a un servidor que pertenece a Google y ejecuta un modelo de IA generativa. En los datos enviados al servidor no se incluyen el cuerpo de las respuestas ni los encabezados de autenticación y cookies de las solicitudes de red. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Entre las funciones de IA generativa de DevTools se incluyen las siguientes: + +- Console Insights: explica los mensajes de la consola y ofrece sugerencias sobre cómo corregir errores de la consola. + +- Asistencia de IA: recibe ayuda para entender los estilos de CSS (desde la versión 131), las solicitudes de red, el rendimiento y los archivos (todos ellos desde la versión 132). + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="6394350458541421998">Esta política no está disponible desde la versión 29 de <ph name="PRODUCT_OS_NAME" />. Utiliza la política PresentationScreenDimDelayScale en su lugar.</translation> <translation id="6397588391180665797">Envía información sobre la configuración de red de los usuarios en los dispositivos registrados. @@ -7893,6 +8013,7 @@ <translation id="6766216162565713893">Permitir que los sitios le pidan permiso al usuario para acceder a dispositivos Bluetooth cercanos</translation> <translation id="6770454900105963262">Informar sobre sesiones del kiosco activas</translation> <translation id="6774132787348495175">No permitir que los usuarios usen las máquinas virtuales necesarias para el funcionamiento de las aplicaciones de Linux</translation> +<translation id="6776202826080834193">Si esta política se habilita o no se define, los usuarios podrán usar la función <ph name="GLIC" />. Si se inhabilita esta política, los usuarios no podrán interactuar con <ph name="GLIC" />. El botón de la barra de pestañas se ocultará y <ph name="GLIC" /> no estará disponible mediante una combinación de teclas, a menos que se habilite en otro perfil.</translation> <translation id="678121785914414680">Lista de tipos de archivo que deberían abrirse automáticamente al descargarse. No se debe incluir el separador inicial al añadir un tipo de archivo a la lista, así que añade "txt" en lugar de ".txt". Los archivos de los tipos que se deben abrir automáticamente seguirán estando sujetos a las comprobaciones de Navegación segura y no se abrirán si no las superan. @@ -8067,6 +8188,7 @@ <translation id="692096803256767290">Restaurar SO a la versión seleccionada</translation> <translation id="6921241119085515674">Permitir el flujo de <ph name="CLOUD_UPLOAD_NAME" /> para <ph name="MICROSOFT_ONE_DRIVE_NAME" /> y <ph name="MICROSOFT_365_NAME" /></translation> <translation id="6921544339867564740">Permitir que los dispositivos utilicen máquinas virtuales en ChromeOS</translation> +<translation id="6922265559343919728">Elegir si las URLs blob se particionan durante la obtención y la navegación</translation> <translation id="6922884955650325312">Bloquear el complemento <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="6924223708804692571">Permite forzar la inhabilitación del corrector ortográfico de idiomas. Se ignorarán los idiomas no reconocidos de esa lista. @@ -10144,6 +10266,17 @@ Esta política anula las políticas <ph name="DEFAULT_WEB_HID_GUARD_SETTING_POLICY_NAME" />, <ph name="WEB_HID_ASK_FOR_URLS_POLICY_NAME" /> y <ph name="WEB_HID_BLOCKED_FOR_URLS_POLICY_NAME" />, así como las preferencias del usuario.</translation> <translation id="8528951285051082869">No permitir que ninguna aplicación web acceda a ciertos tipos de archivo a través de la API File Handling</translation> +<translation id="8529958869261780079">Esta política controla la configuración de la función Ayúdame a leer de <ph name="PRODUCT_OS_NAME" />. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="8533145294731270627">Bloquea las descargas maliciosas y los tipos de archivos peligrosos.</translation> <translation id="8543108307976719751">Impedir conexiones de acceso remoto a este equipo</translation> <translation id="8543639085146778837">Permitir que se recojan registros de texto WebRTC de los servicios de Google</translation> @@ -10176,6 +10309,17 @@ Para definir esta política, se debe inhabilitar la política <ph name="PRIVACY_SANDBOX_PROMPT_ENABLED_POLICY_NAME" />.</translation> <translation id="8559221882677768248">Inhabilitar Enunciar selección en la pantalla de inicio de sesión</translation> <translation id="8561512522781085002">Los ajustes de Re Pág y Av Pág usan la combinación de teclas que incluye la tecla modificadora Búsqueda</translation> +<translation id="8562398722263115493">Ayúdame a escribir es un asistente de escritura basado en IA para contenido breve en la Web. El contenido sugerido se basa en las peticiones que introduce el usuario y en el contenido de la página web. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="8566842294717252664">Oculta tienda web en página Nueva pestaña y en menú de aplicaciones</translation> <translation id="8571119890730528225">Inhabilitar la partición del almacenamiento de terceros.</translation> <translation id="8571314270766672278">Restaurar y restablecer el dispositivo al cambiar a una versión inferior (intentar conservar el registro)</translation> @@ -10365,6 +10509,7 @@ Si se realizan cambios en esta política mientras <ph name="PRODUCT_NAME" /> está abierto, solo se aplicarán al abrir pestañas nuevas.</translation> <translation id="8685748277907759932">Evitar que los usuarios utilicen la función Tocar para buscar</translation> <translation id="8686700500128191717">Habilitar los informes sobre los usuarios del dispositivo</translation> +<translation id="8687570136798972353">Habilitar <ph name="GLIC" /></translation> <translation id="8687958770985542440">Volver a habilitar la API v0 de componentes web hasta M84.</translation> <translation id="8693243869659262736">Utilizar cliente DNS integrado</translation> <translation id="8695006038397632296">Crear y subir solicitudes de instalación de extensiones a la consola de administración</translation> @@ -10745,6 +10890,17 @@ <translation id="8983537551095611459">Configura la lista de IDs de extensiones que quedarán exentas del proceso de borrado de las sesiones de invitado gestionadas y restringidas.</translation> <translation id="8983539044126123594">Habilitar el inicio de sesión con cuentas de Google adicionales</translation> <translation id="8985219286836584291">Habilitar los informes sobre el sistema del dispositivo</translation> +<translation id="8986457452582123237">Con la opción de crear temas con IA, los usuarios pueden crear temas o fondos de pantalla personalizados seleccionando previamente opciones de una lista. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="8986738188516411168">Para mejorar la productividad, permite que la información de las aplicaciones y los servicios de Google aparezca en las superficies del sistema de <ph name="PRODUCT_OS_NAME" />. Si se habilita esta política o no se define, se habilitarán las integraciones seleccionadas en <ph name="CONTEXTUAL_GOOGLE_INTEGRATIONS_CONFIGURATION" />. @@ -10939,7 +11095,19 @@ <translation id="9107635531763682565">Si se asigna el valor 1 a esta política, los sitios web podrán mostrar notificaciones de escritorio. Si se le asigna el valor 2, no se permitirán las notificaciones de escritorio. Si no se establece, se aplicará la política <ph name="ASK_NOTIFICATIONS_POLICY_NAME" />, pero los usuarios podrán cambiar esta opción.</translation> +<translation id="910929592571075861">No particionar las URLs blob durante la obtención y la navegación.</translation> <translation id="9110194749335632373">Impedir conexiones de acceso remoto de administradores de empresa en este equipo</translation> +<translation id="9110198768621013941">Habilita la configuración de predicción de Autocompletar. + +Si se asigna el valor 0, permite que se use la función y que Google utilice datos relevantes para mejorar sus modelos de IA. Según la función, los datos pertinentes pueden ser peticiones, entradas, resultados, materiales de origen y comentarios escritos. También es posible que los revisen un equipo de personas para mejorar los modelos de IA. 0 es el valor predeterminado, excepto en los casos indicados abajo. + +Si se asigna el valor 1, permite que se use la función, pero no permite que Google mejore los modelos con el contenido de los usuarios (incluyendo peticiones, entradas, resultados, materiales de origen y comentarios escritos). 1 es el valor predeterminado de los usuarios de empresa que se gestionan en la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> y de las cuentas de centro educativo que se gestionan en <ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" />. + +Si se asigna el valor 2, no se permite la función. + +Si no se define esta política, su comportamiento lo determinará la política <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" />. + +Para obtener más información sobre el tratamiento de datos en las funciones de IA generativa, consulta https://support.google.com/chrome/a?p=generative_ai_settings.</translation> <translation id="9110251436602897914">Proporcionar información sobre los periféricos conectados al dispositivo</translation> <translation id="9110485853581788150">Lista de certificados que no son de confianza en <ph name="PRODUCT_NAME" />, pero que se pueden usar como sugerencias para la creación de rutas. Los certificados deben estar codificados en Base64.</translation> @@ -10979,6 +11147,7 @@ Si se le asigna el valor "Verdadero", se enviará información sobre el sistema del dispositivo.</translation> <translation id="9131419675479917141">Permitir que los usuarios definan un PIN poco seguro, pero mostrarles una advertencia</translation> <translation id="913195841488580904">Bloquear el acceso a una lista de URLs</translation> +<translation id="9132345265506256744">Inhabilitar el uso de <ph name="GLIC" /></translation> <translation id="9133526448421932754">Color amarillo para la retroiluminación del teclado</translation> <translation id="9135033364005346124">Habilitar el proxy de <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="9135095804754272364">Mostrar una notificación cuando se detecte un dispositivo USB</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 2c3a6d6..ee8c0f1b 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -178,6 +178,17 @@ このポリシーを無効に設定した場合、ショッピング リスト機能は使用できなくなります。 </translation> <translation id="1144147113722324623">音声と動画の HTTPS への自動アップグレードを有効にして、画像に関する「保護されていません」という警告を表示する。</translation> +<translation id="1146804230175611166">AI 履歴検索は、ページのタイトルや URL だけでなく、ページの内容に基づいて閲覧履歴を検索し、生成された回答を受け取ることができる機能です。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="1147732569915511430">アバター画像の SHA-256 ハッシュです。</translation> <translation id="1148415065145333943">高度なバッテリー充電モードを無効にする</translation> <translation id="1149203480502386713">TLS のポスト量子鍵交換を有効にする</translation> @@ -198,6 +209,19 @@ このポリシーを無効に設定した場合、ログイン インターセプト ダイアログは表示されません。 このポリシーを無効に設定した場合でも、管理対象アカウントのプロファイル分離が <ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> によって強制されると、ダイアログが表示されます。</translation> <translation id="1158844608156732189">Kerberos 設定(配列アイテムごとに 1 行)です。https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html を参照してください。</translation> +<translation id="1159241725763211010">レンズ オーバーレイを使用すると、実際のウェブ コンテンツに重ねた現在のページのスクリーンショットを操作して Google で検索することができます。また、現在のページのコンテンツに基づいて Google で検索することもできます。レンズ オーバーレイでは、コンテンツに基づく回答を提供するため、ページのコンテンツが Google に送信され、ユーザーが現在閲覧しているページのコンテキストに沿ってユーザーのクエリの回答が返されます。 + +この機能を制御するユーザー設定はありません。通常、このポリシーで無効にしない限り、Google をデフォルトの検索エンジンに設定しているすべてのユーザーが使用できます。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="1160479894929412407">QUIC プロトコルを許可する</translation> <translation id="1160939557934457296">セーフ ブラウジングの警告ページからの続行を無効にする</translation> <translation id="1161685818042751282">プラットフォームのトラストストアからユーザーが追加した TLS サーバー証明書をインポートしない。</translation> @@ -2063,6 +2087,17 @@ * AC 電源での実行時、アイドル時間に到達したときに行われるデフォルトの操作は、「システム終了」です。 このポリシーを未設定のままにするか、いずれかの設定を指定しなかった場合、各種電源設定のデフォルト値が使用されます。</translation> +<translation id="2589944745979739478">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> の生成 AI 写真編集機能の設定を制御します。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="2591775699187375408">音声処理を常にサンドボックス化する</translation> <translation id="2592091433672667839">小売りモードのログイン画面にスクリーンセーバーが表示されるまでの非アクティブな期間</translation> <translation id="259289618675490104">このポリシーを「All」(値 0)に設定するか未設定のままにした場合、ユーザーは証明書を管理できます。このポリシーを「None」(値 2)に設定した場合、ユーザーは証明書の閲覧のみ可能です(管理はできません)。 @@ -2217,6 +2252,17 @@ このポリシーでサイトを指定しない場合は、<ph name="DEFAULT_LOCAL_FONTS_SETTING_POLICY_NAME" /> のポリシーが適用されます。このポリシーでサイトを指定した場合は、ブラウザのデフォルトの権限設定が適用され、ユーザーはサイトごとに権限を選択できます。</translation> <translation id="2727844239611930002"><ph name="PRODUCT_NAME" /> が <ph name="PRIVACY_SANDBOX_NAME" /> のプロンプトを表示するかどうかを決定できるようにする。</translation> +<translation id="2729889068935597630">このポリシーでは、対象となるすべての生成 AI 機能のデフォルト設定を定義します。たとえば、このポリシーを値 1 に設定した場合、対象となるすべての生成 AI 機能のデフォルト設定は 1 になります。この設定は、手動で設定したポリシー値には影響しません。対象となる機能の一覧については、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +対象となる機能に同等のポリシー値がない場合は、次に大きい値が使用されます。このポリシーの値で各機能がどのように動作するかについては、該当の機能のドキュメントをご覧ください。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="2730200383593984228">Android アプリの使用を外部のユーザーに許可する</translation> <translation id="2730419309754848345">「PDF を画像として印刷する」のデフォルト</translation> <translation id="2730644640965800157">このポリシーを有効に設定した場合、<ph name="PRODUCT_OS_NAME" /> ファイルアプリで <ph name="GOOGLE_DRIVE_NAME" /> の同期がオフになり、データはドライブにアップロードされません。 @@ -4461,6 +4507,7 @@ このポリシーでは、企業の管理者が管理対象の <ph name="PRODUCT_OS_NAME" /> デバイスに接続できないようにします。このポリシーを有効にするか、空白または未設定のままにした場合、ポリシーは無視されます。</translation> <translation id="449423975179525290"><ph name="PLUGIN_VM_NAME" /> に関連するポリシーを設定します。</translation> <translation id="449561952193478261">青色のキーボード バックライト</translation> +<translation id="4497491764379007385">Blob URL を取得および処理する際にパーティション化する。</translation> <translation id="449784980858429908">すべてのシリアルポートへの接続を自動的にサイトに許可します。</translation> <translation id="4498626728750662965">PDF ビューアで Skia レンダラを使用する。</translation> <translation id="4499376951770369935">ChromeOS の更新が、キオスクアプリ マニフェストで定義されているバージョンに設定される</translation> @@ -4904,6 +4951,17 @@ <translation id="4857223512478723171">全画面モードを許可しない</translation> <translation id="4857888176748302062">オリジンにデバイス属性のクエリを許可する</translation> <translation id="4858735034935305895">全画面モードを許可する</translation> +<translation id="4858882153530729282">このポリシーでは、Blob URL を取得および処理する際にパーティション化するかどうかを制御します。 +このポリシーを有効に設定するか未設定のままにした場合、Blob URL はパーティション化されます。 +このポリシーを無効に設定した場合、Blob URL はパーティション化されません。 + +<ph name="THIRD_PARTY_STORAGE_PARTITIONING_BLOCKED_FOR_ORIGINS_POLICY_NAME" /> または <ph name="DEFAULT_THIRD_PARTY_STORAGE_PARTITIONING_SETTING_POLICY_NAME" /> によって特定の最上位オリジンのストレージ パーティションが無効になっている場合は、Blob URL もパーティション化されません。 + +このポリシーを使用する必要がある場合は、crbug.com でユースケースをご説明のうえバグを報告し、{janiceliu, awillia}@chromium.org を CC に含めてください。このポリシーは、<ph name="PRODUCT_NAME" /> バージョン 138 まで提供されます。その後、古い実装は削除されます。 + +注: ブラウザの実行中にこのポリシーを変更した場合は、新たに開始したレンダラ プロセスにのみ変更が反映されます。 + +サードパーティのストレージ パーティションについて詳しくは、https://developers.google.com/privacy-sandbox/cookies/storage-partitioning をご覧ください。</translation> <translation id="4860900625632464759">ユーザーがスマートフォンと Chromebook の間で SMS メッセージを同期できるようにする</translation> <translation id="486146220825734683">ユーザーが Kerberos のパスワードを保存できないようにする</translation> <translation id="4861767323695239729">ユーザー セッションで許可する入力方法を設定します</translation> @@ -5132,6 +5190,17 @@ <translation id="504689994545234073">ユーザー ファイルのローカル保存を有効にする</translation> <translation id="5048890362473520096">印刷サービスで LPAC サンドボックスを有効にする</translation> <translation id="5055474681190962362">再起動する日付 [1-31](デバイスのローカル タイムゾーン)です。frequency が「MONTHLY」に指定されている場合にのみ使用されます。値が対象月の最大日数を上回った場合は、その月末日が使用されます。</translation> +<translation id="5055513974503523022">生成 AI ビデオ通話背景では、<ph name="PRODUCT_OS_NAME" /> で生成 AI 機能を使用して、個性を生かしたビデオ会議の背景を作成できます。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="5056708224511062314">画面拡大鏡を無効にする</translation> <translation id="5058573563327660283">自動クリーンアップ時にディスクの空き容量を増やす方法を選択する(サポート終了)</translation> <translation id="5061114193960158745">このポリシーの設定により、ブラウザの切り替えを行わないウェブサイトのリストを管理します。個々のアイテムはルールとして扱われます。このルールに一致すると、代替ブラウザは開かれません。<ph name="URL_LIST_POLICY_NAME" /> ポリシーとは異なり、ルールは双方向に適用されます。<ph name="IE_PRODUCT_NAME" /> アドインが有効になっている場合は、<ph name="IE_PRODUCT_NAME" /> でこれらの URL を開くときに <ph name="PRODUCT_NAME" /> を使用するかどうかもこのポリシーで制御されます。 @@ -5151,6 +5220,17 @@ このポリシーを <ph name="LACROS_BACKWARD_MIGRATION_KEEP_SAFE_DATA" /> に設定した場合は、ほとんどのユーザーデータが削除され、ブラウザに依存しないファイルのみ(例: 「ダウンロード」)が保存されます。 このポリシーを <ph name="LACROS_BACKWARD_MIGRATION_KEEP_ALL" /> に設定した場合、ユーザーデータはすべて保持されます。この設定ではエラーが発生するリスクが高く、復旧するには Powerwash が必要になります。</translation> +<translation id="507032775281485106">生成 AI 壁紙では、<ph name="PRODUCT_OS_NAME" /> で生成 AI 機能を使用して、個性を生かした壁紙を作成できます。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="5071303485174858500">制限付き管理対象ゲスト セッションを無効にする</translation> <translation id="5073609397321802133">このポリシーを false に設定した場合、ユーザーは新しいタブページの背景をカスタイマイズできなくなります。既存のカスタムの背景は削除され、後からこのポリシーを true に設定しても元に戻すことはできません。 @@ -5899,6 +5979,17 @@ このポリシーが False に設定されている場合、ユーザーは自身のネイティブ プリンタを追加し構成することはできません。また、以前に設定したネイティブ プリンタを使用して印刷することもできません。 このポリシーはサポートが終了しています。代わりに <ph name="USER_PRINTERS_ALLOWED" /> を使用してください。 </translation> +<translation id="5582570632838248297">「タブ比較」は、ユーザーのタブ間の情報を AI によって比較するツールです。たとえば、類似したカテゴリの商品を含むタブが複数開いている場合に、ユーザーにこの機能を提供できます。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="5583806683960333345">この設定が有効な場合、ユーザーはインスタント テザリングを使用できます。インスタント テザリングを利用して、Google スマートフォンは関連デバイスとモバイルデータを共有できます。 この設定が無効な場合、ユーザーはインスタント テザリングを使用できません。 @@ -6663,6 +6754,17 @@ <translation id="6203715554101884845">このポリシーでは、ログイン画面で特定のベンダー ID と製品 ID の HID デバイスへのアクセスを自動的に許可するサイトの URL リストを設定できます。リストの各項目では、「<ph name="DEVICES_FIELD_NAME" />」と「<ph name="URLS_FIELD_NAME" />」フィールドの両方を指定する必要があり、そうでない場合は無視されます。「<ph name="DEVICES_FIELD_NAME" />」フィールドの各項目において、「<ph name="VENDOR_ID_FIELD_NAME" />」は必須ですが、「<ph name="PRODUCT_ID_FIELD_NAME" />」 フィールドは必須ではありません。「<ph name="PRODUCT_ID_FIELD_NAME" />」フィールドを省略した場合、指定したベンダー ID のあらゆるデバイスに一致するポリシーが作成されます。「<ph name="PRODUCT_ID_FIELD_NAME" />」フィールドを指定して「<ph name="VENDOR_ID_FIELD_NAME" />」フィールドは指定しなかった場合、項目は無効になり無視されます。 このポリシーを未設定のままにした場合、すべてのサイトでグローバル デフォルト値(自動アクセスなし)が使用されます。</translation> +<translation id="6205472215607025971">タブの整理機能は、ユーザーが開いているタブに基づいて自動的にタブグループを作成する AI ベースのツールです。候補は(ページのコンテンツではなく)開いているタブに基づいて表示されます。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="6207607210601267301">リモート アクセスホストの PIN 入力なしの認証を無効にする</translation> <translation id="6208896993204286313"><ph name="PRODUCT_NAME" /> のポリシー情報に関するレポートを作成</translation> <translation id="6210259502936598222">OS と <ph name="PRODUCT_NAME" /> のバージョン情報に関するレポートを作成</translation> @@ -6975,6 +7077,23 @@ このポリシーでサイトを指定しない場合は、<ph name="DEFAULT_LOCAL_FONTS_SETTING_POLICY_NAME" /> のポリシーが適用されます。このポリシーでサイトを指定した場合は、ブラウザのデフォルトの権限設定が適用され、ユーザーはサイトごとに権限を選択できます。</translation> <translation id="6383774771168138899"><ph name="MICROSOFT_ONE_DRIVE_NAME" /> と <ph name="MICROSOFT_365_NAME" /> の<ph name="CLOUD_UPLOAD_NAME" /> フローを設定する</translation> <translation id="6384542789059421431">ブラウザのサイドパネルにおけるデフォルトの検索エンジンの検索結果ページの表示を有効にします。</translation> +<translation id="6390338862225976270"><ph name="PRODUCT_NAME" /> の DevTools のこれらの機能は、生成 AI モデルを利用して追加のデバッグ情報を提供します。これらの機能を使用するには、<ph name="PRODUCT_NAME" /> がエラー メッセージ、スタック トレース、コード スニペット、ネットワーク リクエストなどのデータを収集し、Google が所有するサーバーに送信する必要があります。そこで生成 AI モデルが実行されます。サーバーに送信されるデータには、ネットワーク リクエストのレスポンスの本文、認証および Cookie ヘッダーは含まれません。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +DevTools の生成 AI 機能は次のとおりです。 + +- Console Insights: コンソール メッセージについて説明し、コンソールのエラーの修正方法を提案します。 + +- AI アシスタンス: CSS スタイル(バージョン 131 以降)、ネットワーク リクエスト、パフォーマンス、ファイル(すべてバージョン 132 以降)の解釈のサポートを利用します。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="6394350458541421998">このポリシーは <ph name="PRODUCT_OS_NAME" /> バージョン 29 で廃止されました。PresentationScreenDimDelayScale ポリシーを代わりに使用してください。</translation> <translation id="6397588391180665797">登録済みデバイスのユーザーのネットワーク設定を報告します。 @@ -7701,6 +7820,7 @@ <translation id="692096803256767290">OS を対象バージョンにロールバックする</translation> <translation id="6921241119085515674"><ph name="MICROSOFT_ONE_DRIVE_NAME" /> と <ph name="MICROSOFT_365_NAME" /> の<ph name="CLOUD_UPLOAD_NAME" /> フローを許可する</translation> <translation id="6921544339867564740">ChromeOS 上で仮想マシンを実行することをデバイスに許可する</translation> +<translation id="6922265559343919728">Blob URL を取得および処理する際にパーティション化するかどうかを選択する</translation> <translation id="6922884955650325312"><ph name="FLASH_PLUGIN_NAME" /> プラグインをブロックする</translation> <translation id="6924223708804692571">言語のスペルチェックを自動的に無効にします。指定した言語のうち認識されないものは無視されます。 @@ -9681,6 +9801,17 @@ <translation id="8525526490824335042">Linux コンテナ</translation> <translation id="8526745614158856826">このポリシーでは、使用可能なすべてのデバイスへのアクセスを自動的に許可するサイトのリストを指定できます。必ず有効な URL を指定してください。無効な URL を指定した場合、このポリシーは無視されます。URL のオリジン(スキーム、ホストとポート)のみが考慮されます。ChromeOS 上で、このポリシーは関連のあるユーザーにのみ適用されます。このポリシーは、<ph name="DEFAULT_WEB_HID_GUARD_SETTING_POLICY_NAME" />、<ph name="WEB_HID_ASK_FOR_URLS_POLICY_NAME" />、<ph name="WEB_HID_BLOCKED_FOR_URLS_POLICY_NAME" />、ユーザーの設定をオーバーライドします。</translation> <translation id="8528951285051082869">File Handling API を通じてファイル形式にアクセスすることをウェブアプリに許可しない</translation> +<translation id="8529958869261780079">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> の文書読解サポート機能の設定を制御します。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="8533145294731270627">不正なファイルのダウンロードと危険なファイル形式をブロックします。</translation> <translation id="8543108307976719751">このパソコンへのリモート アクセス接続を許可しない</translation> <translation id="8543639085146778837">Google サービスからの WebRTC テキストログの収集を許可する</translation> @@ -9713,6 +9844,17 @@ このポリシーを設定するには、<ph name="PRIVACY_SANDBOX_PROMPT_ENABLED_POLICY_NAME" /> ポリシーを無効に設定する必要があります。</translation> <translation id="8559221882677768248">ログイン画面で「選択して読み上げ」を無効にする</translation> <translation id="8561512522781085002">PageUp / PageDown の設定で「検索」修飾キーを含むショートカットを使用する</translation> +<translation id="8562398722263115493">文書作成サポートは、ウェブでの短文作成を支援する AI ベースのツールです。候補は、ユーザーが入力したプロンプトとウェブページのコンテンツに基づいて表示されます。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="8566842294717252664">新しいタブページとアプリ ランチャーでウェブストアを非表示にする</translation> <translation id="8571119890730528225">サードパーティのストレージ パーティションを無効にする。</translation> <translation id="8571314270766672278">チャンネル ダウングレードでデバイスをロールバックしてリセットし、登録を維持する</translation> @@ -10275,6 +10417,17 @@ <translation id="8983537551095611459">制限付きの管理対象ゲスト セッションのクリーンアップ手順から除外する拡張機能 ID のリストを設定する</translation> <translation id="8983539044126123594">他の Google アカウントでのログインを有効にする</translation> <translation id="8985219286836584291">デバイスのシステム情報レポートを有効にする</translation> +<translation id="8986457452582123237">[AI でテーマを作成する] では、選択したオプションに基づいて、カスタムのテーマや壁紙を作成できます。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="8986738188516411168">Google のアプリやサービスからの情報を <ph name="PRODUCT_OS_NAME" /> システム サーフェスに表示して、生産性を向上させます。 このポリシーを有効に設定するか未設定のままにした場合、<ph name="CONTEXTUAL_GOOGLE_INTEGRATIONS_CONFIGURATION" /> で選択した統合設定が有効になります。 @@ -10467,7 +10620,19 @@ <translation id="9107635531763682565">このポリシーを 1 に設定した場合、ウェブサイトによるデスクトップ通知の表示が許可されます。このポリシーを 2 に設定した場合、デスクトップ通知は拒否されます。 このポリシーを未設定のままにした場合、<ph name="ASK_NOTIFICATIONS_POLICY_NAME" /> は適用されますが、ユーザーはこの設定を変更できます。</translation> +<translation id="910929592571075861">Blob URL を取得および処理する際にパーティション化しない。</translation> <translation id="9110194749335632373">企業の管理者がこのパソコンにリモート アクセス接続できないようにする</translation> +<translation id="9110198768621013941">自動入力予測設定を有効にします。 + +0 = この機能の使用と、Google が AI モデルを改善する目的で関連データを使用することを許可します。関連データには、機能に応じてプロンプト、入力内容、出力内容、ソース資料、フィードバックの文面などが含まれます。AI モデルを改善するため、人間のレビュアーが確認する場合もあります。以下に記載している場合を除き、0 がデフォルト値です。 + +1 = この機能の使用を許可しますが、Google がモデルを改善する目的でユーザーのコンテンツ(プロンプト、入力内容、出力内容、ソース資料、フィードバックの文面など)を使用することは許可しません。1 は、<ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> で管理されている企業ユーザーと、<ph name="GOOGLE_WORKSPACE_PRODUCT_NAME" /> で管理されている教育機関向けアカウントのデフォルト値です。 + +2 = この機能を許可しません。 + +このポリシーを未設定のままにした場合、動作は <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME" /> ポリシーによって決まります。 + +生成 AI 機能のデータ処理について詳しくは、https://support.google.com/chrome/a?p=generative_ai_settings をご覧ください。</translation> <translation id="9110251436602897914">デバイスに接続されている周辺機器に関する情報を報告する</translation> <translation id="9110485853581788150"><ph name="PRODUCT_NAME" /> が信頼しないか信頼性を疑うものの、パス構築のヒントとして使用できる証明書のリストです。証明書は Base64 でエンコードする必要があります。</translation> <translation id="9111850884577810507">このフィールドは、<ph name="PRODUCT_NAME" /> 対応のプリンタを示す文字列のいずれかと一致する必要があります。この文字列は、プリンタに適した PPD の特定とインストールに使用されます。詳しくは、https://support.google.com/chrome?p=noncloudprint をご覧ください。</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index e5d73f9..87378ef3 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -7226,6 +7226,7 @@ Als dit beleid niet is ingesteld voor een site, is het beleid van <ph name="DEFAULT_LOCAL_FONTS_SETTING_POLICY_NAME" /> van toepassing op de site (als dit is ingesteld), anders worden de standaardinstellingen van de browser gevolgd en kunnen gebruikers per site kiezen of ze dit recht willen verlenen.</translation> <translation id="6383774771168138899">Hiermee stel je het <ph name="CLOUD_UPLOAD_NAME" />-proces in voor <ph name="MICROSOFT_ONE_DRIVE_NAME" /> en <ph name="MICROSOFT_365_NAME" /></translation> <translation id="6384542789059421431">Weergave van resultatenpagina's van standaard zoekmachine in een zijvenster van de browser aanzetten.</translation> +<translation id="6389858262577493180">Gebruik van <ph name="GLIC" /> aanzetten</translation> <translation id="6394350458541421998">Dit beleid wordt niet meer gebruikt sinds <ph name="PRODUCT_OS_NAME" /> versie 29. Gebruik het beleid PresentationScreenDimDelayScale.</translation> <translation id="6397588391180665797">De netwerkconfiguratie van gebruikers op ingeschreven apparaten rapporteren. @@ -7803,6 +7804,7 @@ <translation id="6766216162565713893">Toestaan dat sites de gebruiker vragen om toegang te verlenen tot een Bluetooth-apparaat in de buurt</translation> <translation id="6770454900105963262">Informatie over actieve kiosk-sessies melden</translation> <translation id="6774132787348495175">Gebruikers niet toestaan virtuele machines te gebruiken die nodig zijn om Linux-apps te ondersteunen</translation> +<translation id="6776202826080834193">Als je dit beleid toepast of niet instelt, kunnen gebruikers de functie <ph name="GLIC" /> gebruiken. Als je dit beleid niet toepast, kunnen gebruikers <ph name="GLIC" /> niet gebruiken. De knop in de tabbladstrook is dan verborgen en <ph name="GLIC" /> is niet beschikbaar via een sneltoets, tenzij de functie is aangezet in een ander profiel.</translation> <translation id="678121785914414680">Lijst met bestandstypen die automatisch moeten worden geopend nadat ze zijn gedownload. Het voorafgaande scheidingsteken mag niet worden opgenomen als je het bestandstype vermeldt. Vermeld dus 'txt' in plaats van '.txt'. Bestanden met typen die automatisch moeten worden geopend, vallen nog steeds onder de geactiveerde Safe Browsing-checks en worden niet geopend als ze die checks niet doorstaan. @@ -10252,6 +10254,7 @@ Als je dit beleid wijzigt terwijl <ph name="PRODUCT_NAME" /> wordt uitgevoerd, wordt het alleen toegepast op nieuw geopende tabbladen.</translation> <translation id="8685748277907759932">Niet toestaan dat gebruikers 'Tikken om te zoeken' gebruiken</translation> <translation id="8686700500128191717">Rapportage voor gebruikers van apparaat aanzetten</translation> +<translation id="8687570136798972353"><ph name="GLIC" /> aanzetten</translation> <translation id="8687958770985542440">Web Components v0 API opnieuw aanzetten tot M84.</translation> <translation id="8693243869659262736">Ingebouwde DNS-client gebruiken</translation> <translation id="8695006038397632296">Installatieverzoeken voor extensies maken en uploaden naar de Beheerdersconsole</translation> @@ -10861,6 +10864,7 @@ Als je het beleid instelt op True, worden de systeemgegevens van het apparaat gerapporteerd.</translation> <translation id="9131419675479917141">Toestaan dat gebruikers een zwakke pincode instellen, maar een waarschuwing tonen</translation> <translation id="913195841488580904">Toegang blokkeren voor een lijst met URL's</translation> +<translation id="9132345265506256744">Gebruik van <ph name="GLIC" /> uitzetten.</translation> <translation id="9133526448421932754">Gele achtergrondverlichting van toetsenbord</translation> <translation id="9135033364005346124">Proxy voor <ph name="CLOUD_PRINT_NAME" /> gebruiken</translation> <translation id="9135095804754272364">Een melding tonen als een USB-apparaat wordt gevonden</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 7a758c7..b58e69858 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -7236,6 +7236,7 @@ หากไม่ได้ตั้งค่านโยบายนี้สำหรับเว็บไซต์ นโยบายจาก <ph name="DEFAULT_LOCAL_FONTS_SETTING_POLICY_NAME" /> ก็จะมีผลกับเว็บไซต์เมื่อตั้งค่าไว้ ไม่เช่นนั้นสิทธิ์ดังกล่าวจะเป็นไปตามค่าเริ่มต้นของเบราว์เซอร์และอนุญาตให้ผู้ใช้เลือกสิทธิ์สำหรับแต่ละเว็บไซต์</translation> <translation id="6383774771168138899">กําหนดค่าการทำงานของ <ph name="CLOUD_UPLOAD_NAME" /> สําหรับ <ph name="MICROSOFT_ONE_DRIVE_NAME" /> และ <ph name="MICROSOFT_365_NAME" /></translation> <translation id="6384542789059421431">เปิดใช้การแสดงหน้าผลการค้นหาของเครื่องมือค้นหาเริ่มต้นในแผงด้านข้างของเบราว์เซอร์</translation> +<translation id="6389858262577493180">เปิดใช้ <ph name="GLIC" /></translation> <translation id="6394350458541421998">นโยบายนี้ได้ถูกยกเลิกไปตั้งแต่ <ph name="PRODUCT_OS_NAME" /> เวอร์ชัน 29 โปรดใช้นโยบาย PresentationScreenDimDelayScale แทน</translation> <translation id="6397588391180665797">รายงานการกำหนดค่าเครือข่ายของผู้ใช้ในอุปกรณ์ที่ลงทะเบียนไว้ @@ -7817,6 +7818,7 @@ <translation id="6766216162565713893">อนุญาตให้เว็บไซต์ขอสิทธิ์เข้าถึงอุปกรณ์บลูทูธที่อยู่ใกล้เคียงจากผู้ใช้</translation> <translation id="6770454900105963262">รายงานข้อมูลเกี่ยวกับเซสชันคีออสก์ที่ใช้งาน</translation> <translation id="6774132787348495175">ไม่อนุญาตให้ผู้ใช้ใช้เครื่องเสมือนที่จำเป็นต่อการรองรับแอป Linux</translation> +<translation id="6776202826080834193">หากเปิดใช้นโยบายนี้หรือไม่ได้ตั้งค่าไว้ ผู้ใช้จะใช้ฟีเจอร์ <ph name="GLIC" /> ได้ การตั้งค่านโยบายนี้เป็น "ปิดใช้" จะช่วยป้องกันไม่ให้ผู้ใช้โต้ตอบกับ <ph name="GLIC" /> ปุ่มในแนวแท็บจะถูกซ่อนไว้ และ <ph name="GLIC" /> จะไม่สามารถใช้งานได้ผ่านแป้นพิมพ์ลัด เว้นแต่จะเปิดใช้ในโปรไฟล์อื่น</translation> <translation id="678121785914414680">รายการของประเภทไฟล์ที่ควรเปิดโดยอัตโนมัติเมื่อดาวน์โหลดเสร็จ ไม่ควรใส่ตัวคั่นข้างหน้าเมื่อระบุประเภทไฟล์ เช่น ให้ใช้ "txt" แทน ".txt" ไฟล์ประเภทที่ควรเปิดโดยอัตโนมัติยังจะต้องผ่านการตรวจสอบของ Google Safe Browsing ที่เปิดใช้อยู่ และระบบจะไม่เปิดไฟล์หากไม่ผ่านการตรวจสอบ @@ -10267,6 +10269,7 @@ หากนโยบายนี้เปลี่ยนแปลงในขณะที่ <ph name="PRODUCT_NAME" /> ทำงานอยู่ จะมีผลกับแท็บที่เปิดใหม่เท่านั้น</translation> <translation id="8685748277907759932">ป้องกันไม่ให้ผู้ใช้ใช้ "แตะเพื่อค้นหา"</translation> <translation id="8686700500128191717">เปิดใช้การรายงานผู้ใช้อุปกรณ์</translation> +<translation id="8687570136798972353">เปิดใช้ <ph name="GLIC" /></translation> <translation id="8687958770985542440">เปิดใช้ Web Components v0 API ได้อีกครั้งจนกว่าจะถึงเวอร์ชัน M84</translation> <translation id="8693243869659262736">ใช้ไคลเอ็นต์ DNS ในตัว</translation> <translation id="8695006038397632296">สร้างและอัปโหลดคำขอติดตั้งส่วนขยายไปยังคอนโซลผู้ดูแลระบบ</translation> @@ -10874,6 +10877,7 @@ หากตั้งค่าเป็น "จริง" จะมีการรายงานข้อมูลระบบของอุปกรณ์</translation> <translation id="9131419675479917141">อนุญาตให้ผู้ใช้กำหนด PIN ที่ไม่รัดกุม แต่แสดงคำเตือน</translation> <translation id="913195841488580904">บล็อกการเข้าถึงรายการ URL</translation> +<translation id="9132345265506256744">ปิดใช้ <ph name="GLIC" /></translation> <translation id="9133526448421932754">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีเหลือง</translation> <translation id="9135033364005346124">เปิดใช้งานพร็อกซี <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="9135095804754272364">แสดงการแจ้งเตือนเมื่อตรวจพบอุปกรณ์ USB</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index c2a4669..25a6303 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -7425,6 +7425,7 @@ Nếu bạn không đặt chính sách này cho một trang web, thì hệ thống sẽ áp dụng chính sách của <ph name="DEFAULT_LOCAL_FONTS_SETTING_POLICY_NAME" /> cho trang web đó (nếu có), còn không thì quyền kiểm soát sẽ tuân theo chế độ mặc định của trình duyệt và cho phép người dùng chọn quyền này trên từng trang web.</translation> <translation id="6383774771168138899">Định cấu hình quy trình <ph name="CLOUD_UPLOAD_NAME" /> cho <ph name="MICROSOFT_ONE_DRIVE_NAME" /> và <ph name="MICROSOFT_365_NAME" /></translation> <translation id="6384542789059421431">Bật chế độ hiện trang kết quả của công cụ tìm kiếm mặc định trong bảng điều khiển bên của Trình duyệt</translation> +<translation id="6389858262577493180">Cho phép sử dụng <ph name="GLIC" /></translation> <translation id="6394350458541421998">Chính sách này đã chấm dứt kể từ phiên bản <ph name="PRODUCT_OS_NAME" /> 29. Vui lòng sử dụng chính sách PresentationScreenDimDelayScale thay vào đó.</translation> <translation id="6397588391180665797">Báo cáo cho người dùng về cấu hình mạng trên các thiết bị đã đăng ký. @@ -8018,6 +8019,8 @@ <translation id="6766216162565713893">Cho phép trang web yêu cầu người dùng cấp quyền truy cập vào thiết bị Bluetooth lân cận</translation> <translation id="6770454900105963262">Báo cáo thông tin về các phiên kiosk hiện hoạt</translation> <translation id="6774132787348495175">Không cho phép người dùng sử dụng máy ảo cần thiết để hỗ trợ các ứng dụng Linux</translation> +<translation id="6776202826080834193">Nếu bạn Bật hoặc không đặt chính sách này, thì người dùng có thể sử dụng tính năng +<ph name="GLIC" />. Nếu bạn đặt chính sách này thành Tắt, thì người dùng sẽ không thể tương tác với <ph name="GLIC" />; nút trong dải thẻ sẽ bị ẩn và <ph name="GLIC" /> sẽ không dùng được qua phím tắt trừ phi bạn bật trong hồ sơ khác.</translation> <translation id="678121785914414680">Danh sách những loại tệp tự động mở khi tải xuống. Bạn không được thêm dấu phân cách phía trước khi liệt kê loại tệp. Do đó, hãy dùng "txt" thay cho ".txt". Những tệp thuộc loại tự động mở sẽ vẫn phải trải qua các bước kiểm tra trong chế độ duyệt web an toàn mà người dùng đã bật. Các tệp này sẽ không mở nếu không vượt qua các bước kiểm tra đó. @@ -10509,6 +10512,7 @@ Nếu chính sách này thay đổi khi <ph name="PRODUCT_NAME" /> đang chạy, thì chính sách này chỉ áp dụng cho các thẻ mới mở.</translation> <translation id="8685748277907759932">Ngăn người dùng sử dụng tính năng Chạm để tìm kiếm</translation> <translation id="8686700500128191717">Bật tính năng báo cáo người dùng thiết bị</translation> +<translation id="8687570136798972353">Bật <ph name="GLIC" /></translation> <translation id="8687958770985542440">Bật lại API Thành phần web phiên bản 0 cho đến M84.</translation> <translation id="8693243869659262736">Sử dụng máy khách DNS tích hợp</translation> <translation id="8695006038397632296">Tạo hoặc tải yêu cầu cài đặt tiện ích lên Bảng điều khiển dành cho quản trị viên</translation> @@ -11123,6 +11127,7 @@ Nếu bạn đặt chính sách này thành true, thì thông tin về hệ thống của thiết bị sẽ được báo cáo.</translation> <translation id="9131419675479917141">Cho phép người dùng đặt mã PIN yếu nhưng có hiển thị cảnh báo</translation> <translation id="913195841488580904">Chặn truy cập vào danh sách các URL</translation> +<translation id="9132345265506256744">Không cho phép sử dụng <ph name="GLIC" />.</translation> <translation id="9133526448421932754">Đèn nền bàn phím màu vàng</translation> <translation id="9135033364005346124">Bật proxy <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="9135095804754272364">Hiện thông báo khi phát hiện thiết bị USB</translation>
diff --git a/components/shared_highlighting/core/common/text_fragment.cc b/components/shared_highlighting/core/common/text_fragment.cc index 041aa0d..7b8fc8a 100644 --- a/components/shared_highlighting/core/common/text_fragment.cc +++ b/components/shared_highlighting/core/common/text_fragment.cc
@@ -27,7 +27,7 @@ // Unescapes any special character from a fragment which may be coming from a // URL. Returns nullopt if the fragment can't be safely escaped (e.g., contains // non-UTF8 characters). -std::optional<std::string> Unescape(const std::string& str) { +std::optional<std::string> Unescape(std::string_view str) { std::string unescaped = base::UnescapeBinaryURLComponent(str); if (!base::IsStringUTF8(unescaped)) { return std::nullopt; @@ -67,7 +67,7 @@ // static std::optional<TextFragment> TextFragment::FromEscapedString( - std::string escaped_string) { + std::string_view escaped_string) { // Text fragments have the format: [prefix-,]textStart[,textEnd][,-suffix] // That is, textStart is the only required param, all params are separated by // commas, and prefix/suffix have a trailing/leading hyphen. @@ -77,21 +77,21 @@ // First, try to extract the optional prefix and suffix params. These have a // '-' as their last or first character, respectively, which should not be // carried over to the final dict. - std::string prefix; + std::string_view prefix; size_t prefix_delimiter_pos = escaped_string.find("-,"); - if (prefix_delimiter_pos != std::string::npos) { + if (prefix_delimiter_pos != std::string_view::npos) { prefix = escaped_string.substr(0, prefix_delimiter_pos); - escaped_string.erase(0, prefix_delimiter_pos + 2); + escaped_string = escaped_string.substr(prefix_delimiter_pos + 2); } - std::string suffix; + std::string_view suffix; size_t suffix_delimiter_pos = escaped_string.rfind(",-"); - if (suffix_delimiter_pos != std::string::npos) { + if (suffix_delimiter_pos != std::string_view::npos) { suffix = escaped_string.substr(suffix_delimiter_pos + 2); - escaped_string.erase(suffix_delimiter_pos); + escaped_string = escaped_string.substr(0, suffix_delimiter_pos); } - std::vector<std::string> pieces = base::SplitString( + std::vector<std::string_view> pieces = base::SplitStringPiece( escaped_string, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); if (pieces.size() > 2 || pieces.empty() || pieces[0].empty()) { @@ -99,22 +99,22 @@ return std::nullopt; } - std::string text_start = pieces[0]; - std::string text_end = pieces.size() == 2 ? pieces[1] : ""; + std::string_view text_start = pieces[0]; + std::string_view text_end = pieces.size() == 2 ? pieces[1] : ""; - if (prefix.find_first_of("&-,") != std::string::npos || - text_start.find_first_of("&-,") != std::string::npos || - text_end.find_first_of("&-,") != std::string::npos || - suffix.find_first_of("&-,") != std::string::npos) { + if (prefix.find_first_of("&-,") != std::string_view::npos || + text_start.find_first_of("&-,") != std::string_view::npos || + text_end.find_first_of("&-,") != std::string_view::npos || + suffix.find_first_of("&-,") != std::string_view::npos) { // Malformed if any of the pieces contain characters that are supposed to be // URL-encoded. return std::nullopt; } - std::optional<std::string> unescaped_text_start = Unescape(text_start), - unescaped_text_end = Unescape(text_end), - unescaped_prefix = Unescape(prefix), - unescaped_suffix = Unescape(suffix); + std::optional<std::string> unescaped_text_start = Unescape(text_start); + std::optional<std::string> unescaped_text_end = Unescape(text_end); + std::optional<std::string> unescaped_prefix = Unescape(prefix); + std::optional<std::string> unescaped_suffix = Unescape(suffix); if (!unescaped_text_start || !unescaped_text_end || !unescaped_prefix || !unescaped_suffix) {
diff --git a/components/shared_highlighting/core/common/text_fragment.h b/components/shared_highlighting/core/common/text_fragment.h index 79bfe0cc..f7068255 100644 --- a/components/shared_highlighting/core/common/text_fragment.h +++ b/components/shared_highlighting/core/common/text_fragment.h
@@ -7,6 +7,7 @@ #include <optional> #include <string> +#include <string_view> #include "base/values.h" @@ -32,7 +33,7 @@ // [prefix-,]textStart[,textEnd][,-suffix] // Returns |std::nullopt| if parsing failed. static std::optional<TextFragment> FromEscapedString( - std::string escaped_string); + std::string_view escaped_string); // Returns a TextFragment instance created from a dictionary |value| // containing the right set of values. The values stored in |value| must be
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index 2687d70..b722bc2 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Bladsy is besoek</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Geen}=1{Van 1 werf af (jy sal by jou Google-rekening aangemeld bly)}other{Van # werwe af (jy sal by jou Google-rekening aangemeld bly)}}</translation> <translation id="1167877250265821930">Kon nie <ph name="LANGUAGE" /> aflaai nie</translation> +<translation id="1173894706177603556">Hernoem</translation> <translation id="1174644974616730562">Koevert Chinees #1</translation> <translation id="1174723505405632867">Wil jy <ph name="EMBEDDED_URL" /> toelaat om webkoekies en werfdata te gebruik op <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index f410ea4..b3610e8 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">ገፅ ተጎብኝቷል</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ምንም}=1{ከ1 ጣቢያ (ወደ Google መለያዎ እንደገቡ ይቆያሉ)}one{ከ # ጣቢያዎች (ወደ Google መለያዎ እንደገቡ ይቆያሉ)}other{ከ # ጣቢያዎች (ወደ Google መለያዎ እንደገቡ ይቆያሉ)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ማውረድ አልተሳካም</translation> +<translation id="1173894706177603556">ዳግም ሰይም</translation> <translation id="1174644974616730562">#1 የቻይና ፖስታ</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> ኩኪዎችን እና የጣቢያ ውሂብን በ<ph name="TOP_LEVEL_URL" /> ላይ መጠቀም እንዲችል መፍቀድ ይፈልጋሉ?
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index bce3f534..78d11a6 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">تمّت زيارة صفحة</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ما مِن مواقع إلكترونية تستخدم ملفات تعريف ارتباط.}=1{ملفات تعريف ارتباط من موقع إلكتروني واحد (لن يتم تسجيل الخروج من حسابكِ على Google)}two{ملفات تعريف ارتباط من موقعَين إلكترونيَّين (لن يتم تسجيل الخروج من حسابك على Google)}few{ملفات تعريف ارتباط من # مواقع إلكترونية (لن يتم تسجيل الخروج من حسابك على Google)}many{ملفات تعريف ارتباط من # موقعًا إلكترونيًا (لن يتم تسجيل الخروج من حسابك على Google)}other{ملفات تعريف ارتباط من # موقع إلكتروني (لن يتم تسجيل الخروج من حسابك على Google)}}</translation> <translation id="1167877250265821930">تعذَّر تنزيل حزمة اللغة <ph name="LANGUAGE" />.</translation> +<translation id="1173894706177603556">إعادة تسمية</translation> <translation id="1174644974616730562">ظرف صيني رقم 1</translation> <translation id="1174723505405632867">هل تريد السماح للموقع الإلكتروني <ph name="EMBEDDED_URL" /> باستخدام بيانات الموقع الإلكتروني وملفات تعريف الارتباط على <ph name="TOP_LEVEL_URL" />؟ @@ -1938,6 +1939,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">تم مؤقتًا إيقاف عملية تحميل الملفات إلى Microsoft OneDrive</translation> <translation id="4390472908992056574">حافّة</translation> +<translation id="4395550503472021297">تتحكّم هذه السياسة في الإعداد التلقائي للسياسات التالية: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">يفتح هذا الخيار نافذة منبثقة لإثبات الهوية على الموقع الإلكتروني للمصرف الذي تتعامل معه.</translation> <translation id="4406883609789734330">النسخ النصي التلقائي</translation> <translation id="4406896451731180161">نتائج البحث</translation> @@ -3997,6 +3999,7 @@ <translation id="8116925261070264013">المواقع الإلكترونية التي تم كتم الصوت فيها</translation> <translation id="8118489163946903409">طريقة الدفع</translation> <translation id="8118506371121007279">تقديم ملاحظات</translation> +<translation id="8120720167840853945">لا تتحكّم هذه السياسة في الإعداد التلقائي لأي سياسات أخرى.</translation> <translation id="8127301229239896662">لم يتم تثبيت "<ph name="SOFTWARE_NAME" />" بطريقة صحيحة على جهاز الكمبيوتر أو الشبكة. اطلب من مشرف تقنية المعلومات حل هذه المشكلة.</translation> <translation id="8131740175452115882">تأكيد</translation> <translation id="8133495915926741232">اختَر فئات المواضيع العامة التي يمكن استخدامها للمساعدة في تخصيص الإعلانات، مع العِلم بأنّ إيقاف إحدى الفئات العامة سيؤدي أيضًا إلى حظر المواضيع ذات الصلة بها. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 7544fb0..3516d9a 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">পৃষ্ঠাখনলৈ গ’লে</translation> <translation id="1165813024716836071">{COUNT,plural, =0{একো নাই}=1{১ টা ছাইটৰ পৰা (আপুনি আপোনাৰ Google একাউণ্টত ছাইন ইন হৈ থাকিব)}one{# টা ছাইটৰ পৰা (আপুনি আপোনাৰ Google একাউণ্টত ছাইন ইন হৈ থাকিব)}other{# টা ছাইটৰ পৰা (আপুনি আপোনাৰ Google একাউণ্টত ছাইন ইন হৈ থাকিব)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ডাউলন’ড কৰিব পৰা নগ’ল</translation> +<translation id="1173894706177603556">নতুন নাম দিয়ক</translation> <translation id="1174644974616730562">এনভেল’প চীনা #১</translation> <translation id="1174723505405632867">আপুনি <ph name="EMBEDDED_URL" />ক <ph name="TOP_LEVEL_URL" />ত কুকীসমূহ আৰু ছাইটৰ ডেটা ব্যৱহাৰ কৰিবলৈ অনুমতি দিব বিচাৰেনে? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">১০ ছেকেণ্ড ফৰৱাৰ্ড কৰক</translation> <translation id="3157931365184549694">পুনঃস্থাপন কৰক</translation> <translation id="3158539265159265653">ডিস্ক</translation> +<translation id="3162070126914310576">আপোনাৰ সংস্থাৰ ইউনিটটোৱে নিজৰ প্ৰাৰম্ভিক পঞ্জীয়নৰ সীমাত উপনীত হোৱাৰ বাবে এই মুহূৰ্তত এই ডিভাইচটো পঞ্জীয়ন কৰিব নোৱাৰি। সহায় পাবলৈ আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation> <translation id="3162559335345991374">আপুনি ব্যৱহাৰ কৰি থকা ৱাই-ফাইটোৰ বাবে আপুনি এইটোৰ লগ ইন পৃষ্ঠালৈ যাব লগা হ'ব পাৰে।</translation> <translation id="316638481603975524">ৱেব এপ্ ইনষ্টল কৰিবলৈ ক’ব পাৰে</translation> <translation id="3168744840365648658">ৰেডিঅ’ৰ সা-সৰঞ্জাম</translation> @@ -1933,6 +1935,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Microsoft OneDriveত ফাইল আপল’ড কৰা পজ কৰা হৈছে</translation> <translation id="4390472908992056574">ব্ৰিম</translation> +<translation id="4395550503472021297">এই নীতিয়ে তলত উল্লেখিত নীতিসমূহৰ ডিফ’ল্ট আচৰণ নিয়ন্ত্ৰণ কৰি আছে: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">আপোনাৰ বেংকৰ ৱেবছাইটত সত্যাপন কৰিবলৈ এটা পপ-আপ খোলে</translation> <translation id="4406883609789734330">লাইভ কেপশ্বন</translation> <translation id="4406896451731180161">সন্ধানৰ ফলাফল</translation> @@ -2375,6 +2378,7 @@ <translation id="5244521145258281926">Google একাউণ্ট পৰিচালনা কৰাৰ বুটাম, আপোনাৰ Google একাউণ্টত নিজৰ তথ্য, গোপনীয়তা আৰু সুৰক্ষা পৰিচালনা কৰিবলৈ সক্ৰিয় কৰক</translation> <translation id="5244732203286792411">ল’ড কৰি থকা হৈছে... এইটোৰ বাবে এক মিনিটমান লাগিব পাৰে।</translation> +<translation id="5248543496748975054">কার্ডৰ নম্বৰটো পূৰ কৰা নাই নেকি?</translation> <translation id="5250209940322997802">"নেটৱর্কত সংযোগ কৰক"</translation> <translation id="52517543715119994">Chromeৰ সুবিধাসমূহৰ বিষয়ে জানক</translation> <translation id="5251803541071282808">ক্লাউড</translation> @@ -3989,6 +3993,7 @@ <translation id="8116925261070264013">মিউট আছে</translation> <translation id="8118489163946903409">পৰিশোধ পদ্ধতি</translation> <translation id="8118506371121007279">মতামত দিয়ক</translation> +<translation id="8120720167840853945">এই নীতিয়ে আন কোনো নীতিৰ ডিফ’ল্ট আচৰণ নিয়ন্ত্ৰণ কৰি থকা নাই।</translation> <translation id="8127301229239896662">আপোনাৰ কম্পিউটাৰ বা নেটৱৰ্কত "<ph name="SOFTWARE_NAME" />" ভালকৈ ইনষ্টল কৰা হোৱা নাছিল। আপোনাৰ আইটি প্ৰশাসকক এই সমস্যাটোৰ সমাধান বিচাৰক</translation> <translation id="8131740175452115882">নিশ্চিত কৰক</translation> <translation id="8133495915926741232">বিষয়বস্তুৰ কোনবোৰ বিস্তৃত শিতান বিজ্ঞাপন ব্যক্তিগতকৰণ কৰাত সহায় কৰিবলৈ ব্যৱহাৰ কৰিব পাৰি সেয়া বাছনি কৰক। কোনো বিস্তৃত শিতান অফ কৰাটোৱে ইয়াৰ সৈতে সম্পৰ্কিত বিষয়বস্তুও অৱৰোধ কৰিব। <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index 5ae191d2..612a109 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Səhifə ziyarət edilib</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Yoxdur}=1{1 saytdan (Google Hesabına daxil olmuş kimi qalacaqsınız)}other{# saytdan (Google Hesabına daxil olmuş kimi qalacaqsınız)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> endirilmədi</translation> +<translation id="1173894706177603556">Adını dəyişin</translation> <translation id="1174644974616730562">Zərf Çin #1</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> saytına <ph name="TOP_LEVEL_URL" /> ünvanında kukilər və sayt datasını istifadə etmək icazəsi verilsin? @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">MacOS Keychain ilə Parol Menecerindən istifadə üçün Chromium-u yenidən başladın və Keychain-ə giriş imkanı verin. Yenidən başladıldıqdan sonra tablar təkrar açılacaq.</translation> <translation id="1652887625750064647">AI ən yaxşı uyğunluq</translation> +<translation id="1653465303147789530">Tətbiqləri dəyişmədən <ph name="PAYMENT_METHOD" /> ilə ödəniş edin</translation> <translation id="1656024727720460136">Chrome bu səhifənin daha rahat oxunması üçün onu sadələşdirib. Chrome güvənli bağlantı üzərindən ilkin səhifəni açdı.</translation> <translation id="1656489000284462475">Götürmə</translation> <translation id="1658111267661135323">TV və video</translation> @@ -556,6 +558,7 @@ <translation id="1959001866257244765"><ph name="BEGIN_WHITEPAPER_LINK" />Daxil olduğunuz bəzi səhifələrin keçidlərini, məhdud sistem məlumatlarını və bəzi səhifə məzmununu<ph name="END_WHITEPAPER_LINK" /> Google'a göndərməklə vebdə hər kəs üçün təhlükəsizliyi artırmağa yardım edin. <ph name="BEGIN_PRIVACY_PAGE_LINK" />Məxfilik siyasəti<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">Mətn və səhifə kontenti Google-a göndərilir və bu funksiyanı təkmilləşdirmək üçün istifadə edilə bilər. <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation> +<translation id="196146181975453736">Daha tez ödəmək üçün birdəfəlik təhlükəsizlik yoxlamasını tamamlayın</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> Əlfəcinləri</translation> <translation id="1973335181906896915">Serializasiya xətası</translation> <translation id="1973785048533660168">Kargüzarlıq və inzibati işlər</translation> @@ -1581,6 +1584,7 @@ <translation id="378611282717571199">"<ph name="SEARCH_QUERY" />" üzrə ən yaxşı uyğunluqlar</translation> <translation id="3789155188480882154">Ölçü 16</translation> <translation id="3789841737615482174">Quraşdırın</translation> +<translation id="3791118028061680614">Tətbiqləri dəyişmədən ödəyin</translation> <translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> düym)</translation> <translation id="3792826587784915501">Kult və Müstəqil Filmlər</translation> <translation id="3793574014653384240">Son vaxtlarda baş verən xətaların sayı və səbəbləri</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index dac7f556..f71b127d 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Наведваецца старонка</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Сайтаў няма}=1{З 1 сайта (вы застаняцеся ва Уліковым запісе Google)}one{З # сайта (вы застаняцеся ва Уліковым запісе Google)}few{З # сайтаў (вы застаняцеся ва Уліковым запісе Google)}many{З # сайтаў (вы застаняцеся ва Уліковым запісе Google)}other{З # сайта (вы застаняцеся ва Уліковым запісе Google)}}</translation> <translation id="1167877250265821930">Не ўдалося спампаваць пакет: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Перайменаваць</translation> <translation id="1174644974616730562">Канверт Chinese № 1</translation> <translation id="1174723505405632867">Дазволіць сайту <ph name="EMBEDDED_URL" /> выкарыстоўваць файлы cookie і даныя сайта <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 2f7a2562..c7e3efc 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Страницата е посетена</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Няма}=1{От 1 сайт (ще останете в профила си в Google)}other{От # сайта (ще останете в профила си в Google)}}</translation> <translation id="1167877250265821930">Изтеглянето на <ph name="LANGUAGE" /> не бе успешно</translation> +<translation id="1173894706177603556">Преименуване</translation> <translation id="1174644974616730562">Плик, китайски №1</translation> <translation id="1174723505405632867">Искате ли да разрешите на <ph name="EMBEDDED_URL" /> да използва „бисквитки“ и данни за сайтове на <ph name="TOP_LEVEL_URL" />? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">Превъртане с 10 секунди напред</translation> <translation id="3157931365184549694">Възстановяване</translation> <translation id="3158539265159265653">Диск</translation> +<translation id="3162070126914310576">Това устройство не може да бъде регистрирано в момента, защото за организационната единица е достигнато ограничението за първоначална регистрация. За помощ се свържете с администратора си.</translation> <translation id="3162559335345991374">Използваната от вас Wi-Fi мрежа може да изисква да посетите страницата й за вход.</translation> <translation id="316638481603975524">Може да извежда запитвания за инсталиране на уеб приложения</translation> <translation id="3168744840365648658">Радиоапаратура</translation> @@ -1937,6 +1939,7 @@ <translation id="4384395682990721132">A4 x 3</translation> <translation id="4387692837058041921">Качването на файл в Microsoft OneDrive е поставено на пауза</translation> <translation id="4390472908992056574">Периферия</translation> +<translation id="4395550503472021297">Това правило контролира поведението по подразбиране на следните правила: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Отваря изскачащ прозорец за потвърждаване в уебсайта на банката ви</translation> <translation id="4406883609789734330">Надписи на живо</translation> <translation id="4406896451731180161">резултата от търсенето</translation> @@ -2379,6 +2382,7 @@ <translation id="5244521145258281926">Управление на профила в Google. Активирайте, за да управлявате информацията си и настройките за поверителност и сигурност в профила си в Google</translation> <translation id="5244732203286792411">Зарежда се... Това може да отнеме минута.</translation> +<translation id="5248543496748975054">Номерът на картата не е попълнен?</translation> <translation id="5250209940322997802">„Свързване с мрежа“</translation> <translation id="52517543715119994">Научете повече за функциите на Chrome</translation> <translation id="5251803541071282808">Облак</translation> @@ -3995,6 +3999,7 @@ <translation id="8116925261070264013">Заглушени</translation> <translation id="8118489163946903409">Начин на плащане</translation> <translation id="8118506371121007279">Изпращане на отзиви</translation> +<translation id="8120720167840853945">Това правило не контролира поведението по подразбиране на другите правила.</translation> <translation id="8127301229239896662"><ph name="SOFTWARE_NAME" /> не се инсталира правилно на компютъра ви или в мрежата. Помолете системния си администратор да реши този проблем.</translation> <translation id="8131740175452115882">Потвърждаване</translation> <translation id="8133495915926741232">Изберете кои широки категории теми могат да се използват за персонализиране на рекламите. Изключването на по-широка категория ще блокира и сродните ѝ теми. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index dd749bea..925977e 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">যেসব পৃষ্ঠা ভিজিট করা হয়েছে</translation> <translation id="1165813024716836071">{COUNT,plural, =0{একটিও নয়}=1{১টি সাইট থেকে (আপনি নিজের Google অ্যাকাউন্টে সাইন-ইন করে থেকে যাবেন)}one{#টি সাইট থেকে (আপনি নিজের Google অ্যাকাউন্টে সাইন-ইন করে থেকে যাবেন)}other{#টি সাইট থেকে (আপনি নিজের Google অ্যাকাউন্টে সাইন-ইন করে থেকে যাবেন)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ডাউনলোড করা যায়নি</translation> +<translation id="1173894706177603556">পুনঃনামকরণ</translation> <translation id="1174644974616730562">এনভেলপ চিনা #১</translation> <translation id="1174723505405632867">আপনি কি <ph name="EMBEDDED_URL" />-কে <ph name="TOP_LEVEL_URL" />-এ কুকি ও সাইট ডেটা ব্যবহার করতে দেবেন? @@ -1941,6 +1942,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Microsoft OneDrive-এ ফাইল আপলোড করার প্রসেস পজ করা হয়েছে</translation> <translation id="4390472908992056574">ব্রিম</translation> +<translation id="4395550503472021297">এই নীতি, এইসব নীতির ডিফল্ট অ্যাকশন কন্ট্রোল করছে: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">আপনার ব্যাঙ্কের ওয়েবসাইট যাচাই করতে পপ-আপ খুলুন</translation> <translation id="4406883609789734330">লাইভ ক্যাপশন</translation> <translation id="4406896451731180161">সার্চের ফলাফলগুলি</translation> @@ -3998,6 +4000,7 @@ <translation id="8116925261070264013">মিউট করা আছে</translation> <translation id="8118489163946903409">পেমেন্টের পদ্ধতি</translation> <translation id="8118506371121007279">মতামত জানান</translation> +<translation id="8120720167840853945">এই নীতি, অন্য কোনও নীতির ডিফল্ট অ্যাকশন কন্ট্রোল করছে না।</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" আপনার কম্পিউটার বা নেটওয়ার্কে সঠিক ভাবে ইনস্টল করা হয়নি। আপনার IT প্রশাসককে এই সমস্যাটি সমাধান করতে বলুন।</translation> <translation id="8131740175452115882">নিশ্চিত হন</translation> <translation id="8133495915926741232">পছন্দমতো বিজ্ঞাপন দেখানোর জন্য কোনও বিষয়ের কোন কোন বিস্তারিত বিভাগ ব্যবহার করা যেতে পারে তা বেছে নিন। কোনও বিস্তারিত বিভাগ বন্ধ করে দেওয়া হলে, এটির সাথে সম্পর্কিত বিষয়ও ব্লক করা হবে। <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index 63c4d52..6098fa9 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Stranica je posjećena</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ništa}=1{S 1 web lokacije (ostat ćete prijavljeni na Google račun)}one{S # web lokacije (ostat ćete prijavljeni na Google račun)}few{S # web lokacije (ostat ćete prijavljeni na Google račun)}other{S # web lokacija (ostat ćete prijavljeni na Google račun)}}</translation> <translation id="1167877250265821930">Preuzimanje jezika <ph name="LANGUAGE" /> nije uspjelo</translation> +<translation id="1173894706177603556">Promijeni naziv</translation> <translation id="1174644974616730562">Koverta Chinese #1</translation> <translation id="1174723505405632867">Želite li dozvoliti web lokaciji <ph name="EMBEDDED_URL" /> da koristi kolačiće i podatke web lokacije na <ph name="TOP_LEVEL_URL" />? @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">Da koristite Upravitelj lozinki s macOS Keychainom, ponovo pokrenite Chromium i dozvolite pristup Keychainu. Kartice će se ponovo otvoriti nakon ponovnog pokretanja.</translation> <translation id="1652887625750064647">Najbolje podudaranje AI-ja</translation> +<translation id="1653465303147789530">Plaćajte putem načina plaćanja <ph name="PAYMENT_METHOD" /> bez promjene aplikacija</translation> <translation id="1656024727720460136">Chrome je pojednostavio ovu stranicu za lakše čitanje. Chrome je preuzeo originalnu stranicu putem sigurne veze.</translation> <translation id="1656489000284462475">Preuzmi</translation> <translation id="1658111267661135323">TV i videozapisi</translation> @@ -556,6 +558,7 @@ <translation id="1959001866257244765">Pomozite nam da poboljšamo sigurnost na webu za sve slanjem <ph name="BEGIN_WHITEPAPER_LINK" />URL-ova nekih stranica koje posjećujete, ograničenih sistemskih informacija i sadržaja nekih stranica<ph name="END_WHITEPAPER_LINK" /> Googleu. <ph name="BEGIN_PRIVACY_PAGE_LINK" />Pravila privatnosti<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">Vaš tekst i sadržaj stranice se šalju Googleu i mogu se koristiti za poboljšanje ove funkcije. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> +<translation id="196146181975453736">Izvršite jednokratnu sigurnosnu provjeru da brže plaćate</translation> <translation id="1962204205936693436">Oznake domene <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Greška u serijalizaciji</translation> <translation id="1973785048533660168">Službenički i administrativni poslovi</translation> @@ -1585,6 +1588,7 @@ <translation id="378611282717571199">Najbolja podudaranja za "<ph name="SEARCH_QUERY" />"</translation> <translation id="3789155188480882154">Veličina 16</translation> <translation id="3789841737615482174">Instaliraj</translation> +<translation id="3791118028061680614">Plaćajte bez promjene aplikacija</translation> <translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> in)</translation> <translation id="3792826587784915501">Kultni i indie filmovi</translation> <translation id="3793574014653384240">Broj nedavnih padova aplikacija i uzroci</translation> @@ -1937,6 +1941,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Otpremanje fajl(ov)a na Microsoft OneDrive je pauzirano</translation> <translation id="4390472908992056574">Rub</translation> +<translation id="4395550503472021297">Ovo pravilo upravlja zadanim ponašanjem sljedećih pravila: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Otvara skočni prozor radi potvrđivanja na web lokaciji banke</translation> <translation id="4406883609789734330">Automatski titlovi</translation> <translation id="4406896451731180161">rezultati pretraživanja</translation> @@ -3995,6 +4000,7 @@ <translation id="8116925261070264013">Isključen zvuk</translation> <translation id="8118489163946903409">Način plaćanja</translation> <translation id="8118506371121007279">Pošaljite povratne informacije</translation> +<translation id="8120720167840853945">Ovo pravilo ne upravlja zadanim ponašanjem drugih pravila.</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" nije pravilno instaliran na vaš računar ili mrežu. Zamolite IT administratora da riješi taj problem.</translation> <translation id="8131740175452115882">Potvrdi</translation> <translation id="8133495915926741232">Odaberite koje široke kategorije tema se mogu koristiti kao pomoć za personaliziranje oglasa. Isključivanjem šire kategorije blokiraju se i povezane teme. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 0f8564f3..9fad7cc 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Es visita una pàgina</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Cap}=1{D'1 lloc web (continuaràs tenint la sessió iniciada al teu Compte de Google)}other{De # llocs web (continuaràs tenint la sessió iniciada al teu Compte de Google)}}</translation> <translation id="1167877250265821930">Hi ha hagut un error en baixar el paquet d'idioma en <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Canvia el nom</translation> <translation id="1174644974616730562">Sobre xinès número 1</translation> <translation id="1174723505405632867">Vols permetre que <ph name="EMBEDDED_URL" /> utilitzi les galetes i les dades del lloc web a <ph name="TOP_LEVEL_URL" />? @@ -1937,6 +1938,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">La pujada de fitxers a Microsoft OneDrive s'ha posat en pausa</translation> <translation id="4390472908992056574">Brim</translation> +<translation id="4395550503472021297">Aquesta política controla el comportament predeterminat de les polítiques següents: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Obre una finestra emergent per fer la verificació al lloc web del teu banc</translation> <translation id="4406883609789734330">Subtítols instantanis</translation> <translation id="4406896451731180161">resultats de la cerca</translation> @@ -3995,6 +3997,7 @@ <translation id="8116925261070264013">Silenciats</translation> <translation id="8118489163946903409">Mètode de pagament</translation> <translation id="8118506371121007279">Envia suggeriments</translation> +<translation id="8120720167840853945">Aquesta política no controla el comportament predeterminat de cap altra política.</translation> <translation id="8127301229239896662"><ph name="SOFTWARE_NAME" /> no s'ha instal·lat correctament a l'ordinador o a la xarxa. Demana a l'administrador de TI que resolgui aquest problema.</translation> <translation id="8131740175452115882">Confirma</translation> <translation id="8133495915926741232">Tria quines categories àmplies de temes es poden utilitzar per personalitzar els anuncis. En desactivar una categoria més àmplia, també es bloquejaran els temes relacionats. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 792a56d..9af7ed1 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Návštěva stránky</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Žádné}=1{Z 1 webu (zůstanete přihlášeni ke svému účtu Google)}few{Ze # webů (zůstanete přihlášeni ke svému účtu Google)}many{Z # webu (zůstanete přihlášeni ke svému účtu Google)}other{Z # webů (zůstanete přihlášeni ke svému účtu Google)}}</translation> <translation id="1167877250265821930">Stažení jazyka <ph name="LANGUAGE" /> se nezdařilo</translation> +<translation id="1173894706177603556">Přejmenovat</translation> <translation id="1174644974616730562">Obálka čínská č. 1</translation> <translation id="1174723505405632867">Chcete webu <ph name="EMBEDDED_URL" /> povolit používat soubory cookie a data webů v doméně <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb index 99d5004..32c6b6c 100644 --- a/components/strings/components_strings_cy.xtb +++ b/components/strings/components_strings_cy.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Ymwelir â'r dudalen</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Dim}=1{O 1 wefan (byddwch yn parhau wedi'ch mewngofnodi i'ch Cyfrif Google)}two{O # wefan (byddwch yn parhau wedi'ch mewngofnodi i'ch Cyfrif Google)}few{O # gwefan (byddwch yn parhau wedi'ch mewngofnodi i'ch Cyfrif Google)}many{O # gwefan (byddwch yn parhau wedi'ch mewngofnodi i'ch Cyfrif Google)}other{O # gwefan (byddwch yn parhau wedi'ch mewngofnodi i'ch Cyfrif Google)}}</translation> <translation id="1167877250265821930">Wedi methu â lawrlwytho <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Ailenwi</translation> <translation id="1174644974616730562">Amlen Chinese #1</translation> <translation id="1174723505405632867">Ydych chi am ganiatáu i <ph name="EMBEDDED_URL" /> ddefnyddio cwcis a data gwefan ar <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 6d0ba61d..cb1f86d785 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">En side besøges</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ingen}=1{Fra 1 website (du forbliver logget ind på din Google-konto)}one{Fra # website (du forbliver logget ind på din Google-konto)}other{Fra # websites (du forbliver logget ind på din Google-konto)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> kunne ikke downloades</translation> +<translation id="1173894706177603556">Omdøb</translation> <translation id="1174644974616730562">Konvolut Kinesisk nr. 1</translation> <translation id="1174723505405632867">Vil du give <ph name="EMBEDDED_URL" /> tilladelse til at bruge cookies og websitedata på <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 6f4cd35..e184d915 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Seite aufgerufen</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Keine}=1{Von 1 Website (du bleibst in deinem Google-Konto angemeldet)}other{Von # Websites (du bleibst in deinem Google-Konto angemeldet)}}</translation> <translation id="1167877250265821930">Fehler beim Herunterladen des Sprachpakets für <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Umbenennen</translation> <translation id="1174644974616730562">Umschlag Chinesisch Nr. 1</translation> <translation id="1174723505405632867">Möchtest du <ph name="EMBEDDED_URL" /> erlauben, auf <ph name="TOP_LEVEL_URL" /> Cookies und Websitedaten zu verwenden?
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index a308670..0bddc056 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Επίσκεψη σελίδας</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Κανένας}=1{Από 1 ιστότοπο (θα παραμείνετε συνδεδεμένοι στον Λογαριασμό σας Google)}other{Από # ιστοτόπους (θα παραμείνετε συνδεδεμένοι στον Λογαριασμό σας Google)}}</translation> <translation id="1167877250265821930">Αποτυχία λήψης <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Μετονομασία</translation> <translation id="1174644974616730562">Κινεζικός φάκελος #1</translation> <translation id="1174723505405632867">Θέλετε να επιτρέψετε στο <ph name="EMBEDDED_URL" /> να χρησιμοποιεί cookie και δεδομένα ιστοτόπου στο <ph name="TOP_LEVEL_URL" />; @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">Μπροστά κατά 10 δευτερόλεπτα</translation> <translation id="3157931365184549694">Επαναφορά</translation> <translation id="3158539265159265653">Δίσκος</translation> +<translation id="3162070126914310576">Δεν είναι δυνατή η εγγραφή της συσκευής αυτή τη στιγμή, επειδή η μονάδα οργανισμού έχει συμπληρώσει το αρχικό όριο εγγραφής. Επικοινωνήστε με τον διαχειριστή σας για βοήθεια.</translation> <translation id="3162559335345991374">Το Wi-Fi που χρησιμοποιείτε ενδέχεται να σας ζητήσει να επισκεφτείτε τη σελίδα σύνδεσής του.</translation> <translation id="316638481603975524">Μπορεί να ζητήσει άδεια για την εγκατάσταση εφαρμογών ιστού</translation> <translation id="3168744840365648658">Εξοπλισμός ραδιοφώνου</translation> @@ -1938,6 +1940,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Παύση μεταφόρτωσης αρχείων στο Microsoft OneDrive</translation> <translation id="4390472908992056574">Χείλος</translation> +<translation id="4395550503472021297">Αυτή η πολιτική ελέγχει την προεπιλεγμένη συμπεριφορά των παρακάτω πολιτικών: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Ανοίγει ένα αναδυόμενο παράθυρο για επαλήθευση στον ιστότοπο της τράπεζάς σας</translation> <translation id="4406883609789734330">Ζωντανοί υπότιτλοι</translation> <translation id="4406896451731180161">αποτελέσματα αναζήτησης</translation> @@ -2381,6 +2384,7 @@ <translation id="5244521145258281926">Κουμπί Διαχείριση Λογαριασμού Google, ενεργοποιήστε την για να διαχειριστείτε τις πληροφορίες, το απόρρητο και την ασφάλεια στον Λογαριασμό σας Google</translation> <translation id="5244732203286792411">Φόρτωση… Η διαδικασία ενδέχεται να διαρκέσει μερικά λεπτά.</translation> +<translation id="5248543496748975054">Δεν συμπληρώθηκε ο αριθμός κάρτας;</translation> <translation id="5250209940322997802">"Σύνδεση σε δίκτυο"</translation> <translation id="52517543715119994">Μάθετε σχετικά με τις λειτουργίες του Chrome</translation> <translation id="5251803541071282808">Cloud</translation> @@ -3997,6 +4001,7 @@ <translation id="8116925261070264013">Σε σίγαση</translation> <translation id="8118489163946903409">Τρόπος πληρωμής</translation> <translation id="8118506371121007279">Αποστολή σχολίων</translation> +<translation id="8120720167840853945">Αυτή η πολιτική δεν ελέγχει την προεπιλεγμένη συμπεριφορά άλλων πολιτικών.</translation> <translation id="8127301229239896662">Το λογισμικό "<ph name="SOFTWARE_NAME" />" δεν εγκαταστάθηκε σωστά στον υπολογιστή ή στο δίκτυό σας. Ζητήστε από τον διαχειριστή IT να επιλύσει αυτό το πρόβλημα.</translation> <translation id="8131740175452115882">Επιβεβαίωση</translation> <translation id="8133495915926741232">Επιλέξτε τις ευρείες κατηγορίες θεμάτων που μπορούν να χρησιμοποιηθούν για την εξατομίκευση των διαφημίσεων. Με την απενεργοποίηση μιας ευρύτερης κατηγορίας θα αποκλειστούν επίσης τα σχετικά θέματα. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 2fc10f6..e32061d 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Page is visited</translation> <translation id="1165813024716836071">{COUNT,plural, =0{None}=1{From one site (you'll stay signed in to your Google Account)}other{From # sites (you'll stay signed in to your Google Account)}}</translation> <translation id="1167877250265821930">Failed to download <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Rename</translation> <translation id="1174644974616730562">Envelope Chinese no.1</translation> <translation id="1174723505405632867">Do you want to allow <ph name="EMBEDDED_URL" /> to use cookies and site data on <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index b217a24..95a4e72 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Se visitó una página</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ninguno}=1{De 1 sitio (no saldrás de tu Cuenta de Google)}other{De # sitios (no saldrás de tu Cuenta de Google)}}</translation> <translation id="1167877250265821930">No se pudo descargar <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Cambiar nombre</translation> <translation id="1174644974616730562">Sobre chino n.º 1</translation> <translation id="1174723505405632867">¿Deseas permitir que <ph name="EMBEDDED_URL" /> use cookies y datos de sitios en <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index fe00b3f4..c3d1180d 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Se visita una página</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ninguno}=1{Desde 1 sitio (la sesión de tu cuenta de Google seguirá abierta)}other{Desde # sitios (la sesión de tu cuenta de Google seguirá abierta)}}</translation> <translation id="1167877250265821930">No se ha podido descargar el <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Cambiar nombre</translation> <translation id="1174644974616730562">Sobre chino n.º 1</translation> <translation id="1174723505405632867">¿Permitir que <ph name="EMBEDDED_URL" /> use cookies y datos de sitios en <ph name="TOP_LEVEL_URL" />? @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">Para usar el Gestor de contraseñas con el llavero de macOS, reinicia Chromium y permite el acceso al llavero. Las pestañas que tuvieras abiertas se reabrirán después de reiniciar.</translation> <translation id="1652887625750064647">Mejor coincidencia de IA</translation> +<translation id="1653465303147789530">Paga con <ph name="PAYMENT_METHOD" /> sin cambiar de aplicación</translation> <translation id="1656024727720460136">Chrome ha simplificado esta página para facilitar su lectura y ha recuperado la página original mediante una conexión segura.</translation> <translation id="1656489000284462475">Recogida</translation> <translation id="1658111267661135323">Televisión y vídeo</translation> @@ -556,6 +558,7 @@ <translation id="1959001866257244765">Ayuda a mejorar la seguridad de todos en la Web enviando a Google las <ph name="BEGIN_WHITEPAPER_LINK" />URLs de algunas de las páginas que visites, información limitada del sistema y parte del contenido de las páginas<ph name="END_WHITEPAPER_LINK" />. <ph name="BEGIN_PRIVACY_PAGE_LINK" />Política de Privacidad<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">Tu texto y el contenido de la página se enviarán a Google y podrán usarse para mejorar esta función. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> +<translation id="196146181975453736">Completa una comprobación de seguridad única para pagar más rápido</translation> <translation id="1962204205936693436">Marcadores de <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Error de serialización</translation> <translation id="1973785048533660168">Trabajos de oficinista y administrativo</translation> @@ -1203,6 +1206,7 @@ <translation id="3156511682997763015">Avanzar 10 segundos</translation> <translation id="3157931365184549694">Restaurar</translation> <translation id="3158539265159265653">Disco</translation> +<translation id="3162070126914310576">Este dispositivo no se puede registrar ahora mismo porque tu unidad organizativa ha alcanzado su límite de registro inicial. Ponte en contacto con tu administrador para obtener ayuda.</translation> <translation id="3162559335345991374">La red Wi-Fi que estás utilizando puede requerir que accedas a su página de inicio de sesión.</translation> <translation id="316638481603975524">Puede solicitar permiso para instalar aplicaciones web</translation> <translation id="3168744840365648658">Equipos de radio</translation> @@ -1585,6 +1589,7 @@ <translation id="378611282717571199">Mejores coincidencias para "<ph name="SEARCH_QUERY" />"</translation> <translation id="3789155188480882154">Tamaño 16</translation> <translation id="3789841737615482174">Instalar</translation> +<translation id="3791118028061680614">Paga sin cambiar de aplicación</translation> <translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> in)</translation> <translation id="3792826587784915501">Películas de culto e independientes</translation> <translation id="3793574014653384240">La cantidad y las causas de los bloqueos que han ocurrido recientemente</translation> @@ -1937,6 +1942,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Se ha pausado la subida de archivos a Microsoft OneDrive</translation> <translation id="4390472908992056574">Brim</translation> +<translation id="4395550503472021297">Esta política controla el comportamiento predeterminado de las siguientes políticas: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Abre una ventana emergente para realizar la verificación en el sitio web de tu banco</translation> <translation id="4406883609789734330">Subtítulos automáticos</translation> <translation id="4406896451731180161">resultados de la búsqueda</translation> @@ -2379,6 +2385,7 @@ <translation id="5244521145258281926">Gestionar cuenta de Google: actívalo para gestionar la información, la privacidad y la seguridad de tu cuenta de Google</translation> <translation id="5244732203286792411">Cargando... Este proceso puede tardar un minuto.</translation> +<translation id="5248543496748975054">¿No se ha rellenado el número de tarjeta?</translation> <translation id="5250209940322997802">"Conéctate a la red"</translation> <translation id="52517543715119994">Consulta información sobre las funciones de Chrome</translation> <translation id="5251803541071282808">Nube</translation> @@ -3995,6 +4002,7 @@ <translation id="8116925261070264013">Silenciado</translation> <translation id="8118489163946903409">Método de pago</translation> <translation id="8118506371121007279">Enviar comentarios</translation> +<translation id="8120720167840853945">Esta política no controla el comportamiento predeterminado de otras políticas.</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" no se ha instalado correctamente en tu ordenador o red. Ponte en contacto con el administrador de TI para resolver el problema.</translation> <translation id="8131740175452115882">Confirmar</translation> <translation id="8133495915926741232">Elige qué categorías amplias de temas se pueden usar para personalizar los anuncios. Si desactivas una categoría más amplia, también se bloquearán los temas relacionados con ella. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 5729b50c..e7a3160 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Lehte külastatakse</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Puudub}=1{1 saidilt (jääte oma Google'i kontole sisselogituks)}other{# saidilt (jääte oma Google'i kontole sisselogituks)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> keele allalaadimine ebaõnnestus</translation> +<translation id="1173894706177603556">Muuda nime</translation> <translation id="1174644974616730562">Ümbrik Hiina nr 1</translation> <translation id="1174723505405632867">Kas soovite lubada saidil <ph name="EMBEDDED_URL" /> ülataseme URL-il <ph name="TOP_LEVEL_URL" /> kasutada küpsisefaile ja saidi andmeid?
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index 5a4a61a..327717a7 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Orri bat bisitatu da</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ezta batetik ere}=1{Webgune batetik (Google-ko kontuko saioa ez da amaituko)}other{# webgunetatik (Google-ko kontuko saioa ez da amaituko)}}</translation> <translation id="1167877250265821930">Ezin izan da deskargatu <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Aldatu izena</translation> <translation id="1174644974616730562">Gutun-azal txinatarra 1</translation> <translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" /> webguneko cookieak eta datuak erabiltzeko baimena eman nahi diozu <ph name="EMBEDDED_URL" /> webguneari?
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 7b05e76..80a1f44 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">صفحه بازدید شده است</translation> <translation id="1165813024716836071">{COUNT,plural, =0{هیچکدام}=1{از ۱ سایت (از سیستم «حساب Google» خود خارج نمیشوید)}one{از # سایت (از سیستم «حساب Google» خود خارج نمیشوید)}other{از # سایت (از سیستم «حساب Google» خود خارج نمیشوید)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> بارگیری نشد</translation> +<translation id="1173894706177603556">تغییر نام</translation> <translation id="1174644974616730562">پاکت چینی شماره ۱</translation> <translation id="1174723505405632867">میخواهید به <ph name="EMBEDDED_URL" /> اجازه دهید از کوکیها و دادههای سایت در <ph name="TOP_LEVEL_URL" /> استفاده کند؟ @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">۱۰ ثانیه به جلو</translation> <translation id="3157931365184549694">بازیابی</translation> <translation id="3158539265159265653">دیسک</translation> +<translation id="3162070126914310576">درحالحاضر نمیتوان این دستگاه را ثبتنام کرد زیرا واحد سازمانیتان به حداکثر تعداد ثبتنام اولیه خود رسیده است. برای دریافت کمک با سرپرستتان تماس بگیرید.</translation> <translation id="3162559335345991374">شبکه Wi-Fi مورد استفادهتان احتمالاً نیاز دارد که به یک صفحه ورود به سیستم بروید.</translation> <translation id="316638481603975524">میتواند نصب کردن برنامههای وب را درخواست کند</translation> <translation id="3168744840365648658">تجهیزات رادیویی</translation> @@ -1937,6 +1939,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">بارگذاری فایل در Microsoft OneDrive موقتاً متوقف شده است</translation> <translation id="4390472908992056574">لبه</translation> +<translation id="4395550503472021297">این خطمشی رفتار پیشفرض خطمشیهای زیر را کنترل میکند: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">پنجره بالاپری برای درستیسنجی در وبسایت بانک شما باز میکند</translation> <translation id="4406883609789734330">زیرنویس زنده</translation> <translation id="4406896451731180161">نتایج جستجو</translation> @@ -2379,6 +2382,7 @@ <translation id="5244521145258281926">مدیریت «حساب Google»؛ برای مدیریت اطلاعات، حریم خصوصی، و امنیت در «حساب Google»، آن را فعال کنید</translation> <translation id="5244732203286792411">درحال بار کردن… ممکن است یک دقیقه طول بکشد.</translation> +<translation id="5248543496748975054">شماره کارت تکمیل نشده است؟</translation> <translation id="5250209940322997802">«به شبکه متصل شوید»</translation> <translation id="52517543715119994">با ویژگیهای Chrome آشنا شوید</translation> <translation id="5251803541071282808">Cloud</translation> @@ -3995,6 +3999,7 @@ <translation id="8116925261070264013">صامتشده</translation> <translation id="8118489163946903409">روش پرداخت</translation> <translation id="8118506371121007279">ارائه بازخورد</translation> +<translation id="8120720167840853945">این خطمشی رفتار پیشفرض سایر خطمشیها را کنترل نمیکند.</translation> <translation id="8127301229239896662">«<ph name="SOFTWARE_NAME" />» بهدرستی در رایانه یا شبکهتان پیکربندی نشد. از سرپرست فناوری اطلاعات خود بخواهید این مشکل را حل کند.</translation> <translation id="8131740175452115882">تأیید</translation> <translation id="8133495915926741232">انتخاب کنید کدام دستههای گسترده از موضوعها میتوانند برای شخصیسازی آگهیها استفاده شوند. خاموش کردن یکی از دستههای گسترده باعث مسدود شدن موضوعهای مرتبط با آن نیز میشود. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 2608d04..f66814c7 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Sivulla on käyty</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ei yhtään}=1{1 sivustolta (pysyt kirjautuneena Google-tilillesi)}other{# sivustolta (pysyt kirjautuneena Google-tilillesi)}}</translation> <translation id="1167877250265821930">Lataaminen epäonnistui: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Muuta nimeä</translation> <translation id="1174644974616730562">Kirjekuori kiinalainen #1</translation> <translation id="1174723505405632867">Haluatko, että <ph name="EMBEDDED_URL" /> saa käyttää evästeitä ja sivustodataa (<ph name="TOP_LEVEL_URL" />)?
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index c616535..958a2515 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Binisita ang page</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Wala}=1{Mula sa 1 site (mananatili kang naka-sign in sa iyong Google Account)}one{Mula sa # site (mananatili kang naka-sign in sa iyong Google Account)}other{Mula sa # na site (mananatili kang naka-sign in sa iyong Google Account)}}</translation> <translation id="1167877250265821930">Hindi na-download ang <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Pangalanang muli</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867">Gusto mo bang payagan ang <ph name="EMBEDDED_URL" /> na gumamit ng cookies at data ng site sa <ph name="TOP_LEVEL_URL" />? @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">Para magamit ang Password Manager sa macOS Keychain, ilunsad ulit ang Chromium at payagan ang access sa Keychain. Bubukas ulit ang iyong mga tab pagkatapos malunsad ulit.</translation> <translation id="1652887625750064647">Pinakamahusay na Tugma ng AI</translation> +<translation id="1653465303147789530">Magbayad gamit ang <ph name="PAYMENT_METHOD" /> nang hindi lumilipat ng app</translation> <translation id="1656024727720460136">Pinasimple ng Chrome ang page na ito para mas madali itong mabasa. Nakuha ng Chrome ang orihinal na page sa pamamagitan ng secure na koneksyon.</translation> <translation id="1656489000284462475">I-pick up</translation> <translation id="1658111267661135323">TV at Video</translation> @@ -556,6 +558,7 @@ <translation id="1959001866257244765">Tumulong na pahusayin ang seguridad sa web para sa lahat sa pamamagitan ng pagpapadala ng <ph name="BEGIN_WHITEPAPER_LINK" />mga URL ng ilang page na binibisita mo, limitadong impormasyon ng system, at ilang content ng page<ph name="END_WHITEPAPER_LINK" /> sa Google. <ph name="BEGIN_PRIVACY_PAGE_LINK" />Patakaran sa privacy<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">Ipinapadala sa Google ang iyong text at content ng page at posibleng gamitin ang mga ito para pahusayin ang feature na ito. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation> +<translation id="196146181975453736">Kumpletuhin ang one-time na pagsusuri sa seguridad para mas mabilis na makapagbayad</translation> <translation id="1962204205936693436">Mga Bookmark ng <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Error sa serialization</translation> <translation id="1973785048533660168">Mga Trabahong Klerikal at Administratibo</translation> @@ -1585,6 +1588,7 @@ <translation id="378611282717571199">Pinakamahuhusay na tugma para sa "<ph name="SEARCH_QUERY" />"</translation> <translation id="3789155188480882154">Laki 16</translation> <translation id="3789841737615482174">Mag-install</translation> +<translation id="3791118028061680614">Magbayad nang hindi lumilipat ng app</translation> <translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> in)</translation> <translation id="3792826587784915501">Mga Pelikulang Cult at Indie</translation> <translation id="3793574014653384240">Mga bilang at sanhi ng mga pag-crash na naganap kamakailan</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 663ed468..87cce20 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">La page est visitée</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Aucun}=1{À partir de 1 site (vous resterez connecté à votre compte Google)}one{À partir de # site (vous resterez connecté à votre compte Google)}other{À partir de # sites (vous resterez connecté à votre compte Google)}}</translation> <translation id="1167877250265821930">Échec du téléchargement suivant : <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Renommer</translation> <translation id="1174644974616730562">Enveloppe chinoise nᵒ 1</translation> <translation id="1174723505405632867">Souhaitez-vous autoriser <ph name="EMBEDDED_URL" /> à utiliser les témoins et les données relatives aux sites sur <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index e6c02db..be533969 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Page consultée</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Aucun}=1{De 1 site (vous resterez connecté à votre compte Google)}one{De # site (vous resterez connecté à votre compte Google)}other{De # sites (vous resterez connecté à votre compte Google)}}</translation> <translation id="1167877250265821930">Échec du téléchargement de <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Renommer</translation> <translation id="1174644974616730562">Enveloppe chinoise n°1</translation> <translation id="1174723505405632867">Souhaitez-vous autoriser le site <ph name="EMBEDDED_URL" /> à utiliser les cookies et les données de site sur <ph name="TOP_LEVEL_URL" /> ?
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index 595aee56fc..eeb8c1c 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Visítase unha páxina</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ningún}=1{De 1 sitio (seguirás tendo a sesión iniciada na túa Conta de Google)}other{De # sitios (seguirás tendo a sesión iniciada na túa Conta de Google)}}</translation> <translation id="1167877250265821930">Non se puido descargar: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Cambiar o nome</translation> <translation id="1174644974616730562">Sobre chinés n.º 1</translation> <translation id="1174723505405632867">Queres permitir que <ph name="EMBEDDED_URL" /> utilice as cookies e os datos dos sitios en <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index b724bebd2..f9f28f7 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">પેજની મુલાકાત લેવામાં આવી છે</translation> <translation id="1165813024716836071">{COUNT,plural, =0{એકપણ નહીં}=1{1 સાઇટમાંથી (તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન થયેલા રહેશો)}one{# સાઇટમાંથી (તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન થયેલા રહેશો)}other{# સાઇટમાંથી (તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન થયેલા રહેશો)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ડાઉનલોડ કરવામાં નિષ્ફળ રહ્યાં</translation> +<translation id="1173894706177603556">નામ બદલો</translation> <translation id="1174644974616730562">એન્વલપ ચાઇનીઝ #1</translation> <translation id="1174723505405632867">શું તમે <ph name="EMBEDDED_URL" />ને <ph name="TOP_LEVEL_URL" /> પર કુકી અને સાઇટ ડેટાનો ઉપયોગ કરવાની મંજૂરી આપવા માગો છો? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">10 સેકન્ડ ફૉરવર્ડ કરો</translation> <translation id="3157931365184549694">રિસ્ટોર કરો</translation> <translation id="3158539265159265653">ડિસ્ક</translation> +<translation id="3162070126914310576">અત્યારે ડિવાઇસની નોંધણી કરી શકાતી નથી કારણ કે તમારી સંસ્થાનું યુનિટ તેની પ્રારંભિક નોંધણીની મર્યાદાએ પહોંચી ગયું છે. સહાયતા માટે તમારા ઍડમિનિસ્ટ્રેટરનો સંપર્ક કરો.</translation> <translation id="3162559335345991374">તમે ઉપયોગ કરી રહ્યા છો તે વાઇ-ફાઇને તેના લોગિન પેજની મુલાકાત લેવાની જરૂર હોઈ શકે છે.</translation> <translation id="316638481603975524">વેબ ઍપ ઇન્સ્ટૉલ કરવા માટે કહી શકે છે</translation> <translation id="3168744840365648658">રેડિયો સાધન</translation> @@ -1937,6 +1939,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Microsoft OneDrive પર ફાઇલ અપલોડની પ્રક્રિયા થોભાવવામાં આવી છે</translation> <translation id="4390472908992056574">બ્રિમ</translation> +<translation id="4395550503472021297">આ પૉલિસી નિમ્નલિખિત પૉલિસીઓની ડિફૉલ્ટ વર્તણૂકને નિયંત્રિત કરી રહી છે: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">તમારી બેંકની વેબસાઇટ પર ચકાસણી કરવા માટે પૉપ-અપ ખોલે છે</translation> <translation id="4406883609789734330">લાઇવ કૅપ્શન</translation> <translation id="4406896451731180161">શોધ પરિણામો</translation> @@ -2379,6 +2382,7 @@ <translation id="5244521145258281926">'Google એકાઉન્ટ મેનેજ કરો', તમારા Google એકાઉન્ટમાં તમારી માહિતી, પ્રાઇવસી અને સુરક્ષા મેનેજ કરવા માટે સક્રિય કરો</translation> <translation id="5244732203286792411">લોડ કરી રહ્યાં છીએ… આમાં એક મિનિટ લાગી શકે છે.</translation> +<translation id="5248543496748975054">કાર્ડ નંબર ભરવામાં આવ્યો નથી?</translation> <translation id="5250209940322997802">"નેટવર્ક સાથે કનેક્ટ કરો"</translation> <translation id="52517543715119994">Chromeની સુવિધાઓ વિશે જાણો</translation> <translation id="5251803541071282808">મેઘ</translation> @@ -3995,6 +3999,7 @@ <translation id="8116925261070264013">મ્યૂટ કરેલ</translation> <translation id="8118489163946903409">ચુકવણી પદ્ધતિ</translation> <translation id="8118506371121007279">પ્રતિસાદ આપો</translation> +<translation id="8120720167840853945">આ પૉલિસી અન્ય કોઈપણ પૉલિસીઓની ડિફૉલ્ટ વર્તણૂકને નિયંત્રિત કરી રહી નથી.</translation> <translation id="8127301229239896662">તમારા કમ્પ્યુટરમાં અથવા નેટવર્ક પર "<ph name="SOFTWARE_NAME" />" યોગ્ય રીતે ઇન્સ્ટૉલ થયું નથી. તમારા IT વ્યવસ્થાપકને આ સમસ્યા હલ કરવાનું કહો.</translation> <translation id="8131740175452115882">પુષ્ટિ કરો</translation> <translation id="8133495915926741232">જાહેરાતોને મનગમતી બનાવવામાં સહાય કરવા માટે વિષયોની કઈ વ્યાપક કૅટેગરીનો ઉપયોગ કરી શકાય તે પસંદ કરો. વ્યાપક કૅટેગરીને બંધ કરવાથી તેના સંબંધિત મુદ્દા પણ બ્લૉક કરવામાં આવશે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index b143ef2..0c4f38c 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">पेज को देखा जा चुका है</translation> <translation id="1165813024716836071">{COUNT,plural, =0{कोई साइट कुकी का इस्तेमाल नहीं करती}=1{1 साइट कुकी का इस्तेमाल करती है (आपको आपके Google खाते में साइन आउट नहीं किया जाएगा)}one{# साइट कुकी का इस्तेमाल करती है (आपको आपके Google खाते में साइन आउट नहीं किया जाएगा)}other{# साइटें कुकी का इस्तेमाल करती हैं (आपको आपके Google खाते में साइन आउट नहीं किया जाएगा)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> भाषा पैक डाउनलोड नहीं हो सका</translation> +<translation id="1173894706177603556">नाम बदलें</translation> <translation id="1174644974616730562">चाइनीज़ #1 साइज़ का लिफ़ाफ़ा</translation> <translation id="1174723505405632867">क्या आप <ph name="EMBEDDED_URL" /> काे <ph name="TOP_LEVEL_URL" /> पर कुकी और साइट के डेटा का इस्तेमाल करने की अनुमति देना चाहते हैं? @@ -1204,6 +1205,7 @@ <translation id="3156511682997763015">10 सेकंड आगे बढ़ाएं</translation> <translation id="3157931365184549694">वापस लाएं</translation> <translation id="3158539265159265653">डिस्क</translation> +<translation id="3162070126914310576">इस डिवाइस को अभी रजिस्टर नहीं किया जा सकता, क्योंकि आपके संगठन की इकाई में रजिस्टर करने की तय सीमा पूरी हो चुकी है. सहायता के लिए, अपने एडमिन से संपर्क करें.</translation> <translation id="3162559335345991374">आप जिस वाई-फ़ाई का उपयोग कर रहे हैं, आपको उसके लॉगिन पेज पर जाने की ज़रूरत पड़ सकती है.</translation> <translation id="316638481603975524">साइट, वेब ऐप्लिकेशन इंस्टॉल करने की अनुमति मांग सकती है</translation> <translation id="3168744840365648658">रेडियो इक्विपमेंट</translation> @@ -1937,6 +1939,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Microsoft OneDrive पर फ़ाइल अपलोड करने की प्रोसेस को रोक दिया गया है</translation> <translation id="4390472908992056574">ब्रिम</translation> +<translation id="4395550503472021297">इस नीति से, इन नीतियों के काम करने का डिफ़ॉल्ट तरीका तय होता है: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">इससे आपकी स्क्रीन में बैंक की वेबसाइट पर पुष्टि करने के लिए पॉप-अप दिखता है</translation> <translation id="4406883609789734330">लाइव कैप्शन</translation> <translation id="4406896451731180161">खोज नतीजे</translation> @@ -2379,6 +2382,7 @@ <translation id="5244521145258281926">'Google खाते को मैनेज करें' बटन, Google खाते में अपनी जानकारी, निजता, और सुरक्षा को मैनेज करने के इसे लिए चालू करें</translation> <translation id="5244732203286792411">लोड हो रहा है... इसमें कुछ समय लग सकता है.</translation> +<translation id="5248543496748975054">क्या आपने कार्ड नंबर नहीं भरा है?</translation> <translation id="5250209940322997802">"नेटवर्क से कनेक्ट करें"</translation> <translation id="52517543715119994">Chrome की सुविधाओं के बारे में जानें</translation> <translation id="5251803541071282808">क्लाउड</translation> @@ -3995,6 +3999,7 @@ <translation id="8116925261070264013">आवाज़ बंद की गई</translation> <translation id="8118489163946903409">भुगतान का तरीका</translation> <translation id="8118506371121007279">सुझाव, शिकायत या राय दें</translation> +<translation id="8120720167840853945">इस नीति से, किसी अन्य नीति के काम करने का डिफ़ॉल्ट तरीका तय नहीं होता है.</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" आपके कंप्यूटर या नेटवर्क पर ठीक से इंस्टॉल नहीं हुआ था. अपने आईटी व्यवस्थापक से इस समस्या को ठीक करने के लिए कहें.</translation> <translation id="8131740175452115882">पुष्टि करें</translation> <translation id="8133495915926741232">चुनें कि दिलचस्पी के मुताबिक विज्ञापन दिखाने के लिए, विषयों की किन कैटगरी का इस्तेमाल किया जा सकता है. विषयों की इन कैटगरी को बंद करने से, मिलते-जुलते विषय भी ब्लॉक हो जाएंगे. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 00f686c..f70c111 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Posjetili ste stranicu</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nijedna}=1{S jedne web-lokacije (ostat ćete prijavljeni na Google račun)}one{S # web-lokacije (ostat ćete prijavljeni na Google račun)}few{S # web-lokacije (ostat ćete prijavljeni na Google račun)}other{S # web-lokacija (ostat ćete prijavljeni na Google račun)}}</translation> <translation id="1167877250265821930">Prijenos sljedećeg jezika nije uspio: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Preimenuj</translation> <translation id="1174644974616730562">Kineska omotnica br. 1</translation> <translation id="1174723505405632867">Želite li dopustiti da <ph name="EMBEDDED_URL" /> koristi kolačiće i podatke web-lokacije na <ph name="TOP_LEVEL_URL" />? @@ -1936,6 +1937,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Pauziran je prijenos datoteke na Microsoft OneDrive</translation> <translation id="4390472908992056574">Rub</translation> +<translation id="4395550503472021297">Ovo pravilo upravlja zadanim ponašanjem sljedećih pravila: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Otvara skočni prozor za potvrdu na web-lokaciji vaše banke</translation> <translation id="4406883609789734330">Automatski titlovi</translation> <translation id="4406896451731180161">rezultati pretraživanja</translation> @@ -3994,6 +3996,7 @@ <translation id="8116925261070264013">Bez zvuka</translation> <translation id="8118489163946903409">Način plaćanja</translation> <translation id="8118506371121007279">Pošaljite povratne informacije</translation> +<translation id="8120720167840853945">Ovo pravilo ne upravlja zadanim ponašanjem drugih pravila.</translation> <translation id="8127301229239896662">Softver "<ph name="SOFTWARE_NAME" />" nije ispravno instaliran na vašem računalu ili mreži. Obratite se IT administratoru za rješavanje tog problema.</translation> <translation id="8131740175452115882">Potvrdi</translation> <translation id="8133495915926741232">Odaberite koje se široke kategorije tema mogu upotrebljavati za personalizaciju oglasa. Ako isključite širu kategoriju, blokirat će se i s njom povezane teme. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 21d88b5..c62932ca 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Oldallátogatás történt</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nincs}=1{1 webhelyen (bejelentkezve marad Google-fiókjában)}other{# webhelyen (bejelentkezve marad Google-fiókjában)}}</translation> <translation id="1167877250265821930">Nem sikerült a következő nyelvi csomag letöltése: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Átnevezés</translation> <translation id="1174644974616730562">1. kínai boríték</translation> <translation id="1174723505405632867">Engedélyezi a(z) <ph name="EMBEDDED_URL" /> számára, hogy cookie-kat és webhelyadatokat használjon a következő webhelyen: <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index e9cb5767..11c548b 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -95,6 +95,7 @@ <translation id="1165174597379888365">Բացվել է էջ</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ոչ մի}=1{1 կայքից (դուք կմնաք ձեր Google հաշվում)}one{# կայքից (դուք կմնաք ձեր Google հաշվում)}other{# կայքից (դուք կմնաք ձեր Google հաշվում)}}</translation> <translation id="1167877250265821930">Չհաջողվեց ներբեռնել <ph name="LANGUAGE" /> լեզվի փաթեթը</translation> +<translation id="1173894706177603556">Վերանվանել</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867">Թույլատրե՞լ <ph name="EMBEDDED_URL" /> կայքին օգտագործել <ph name="TOP_LEVEL_URL" /> կայքի քուքիներն ու տվյալները։
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 3c584a0..8fec72c 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Halaman dikunjungi</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Tidak ada}=1{Dari 1 situs (Anda akan tetap login ke Akun Google Anda)}other{Dari # situs (Anda akan tetap login ke Akun Google Anda)}}</translation> <translation id="1167877250265821930">Gagal mendownload <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Ganti nama</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867">Anda ingin mengizinkan <ph name="EMBEDDED_URL" /> menggunakan cookie dan data situs di <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index cef561d0c..6982e07 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Síða var opnuð</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ekkert}=1{Af 1 vefsvæði (þú verður áfram skráð(ur) inn á Google-reikninginn þinn)}one{Af # vefsvæði (þú verður áfram skráð(ur) inn á Google-reikninginn þinn)}other{Af # vefsvæðum (þú verður áfram skráð(ur) inn á Google-reikninginn þinn)}}</translation> <translation id="1167877250265821930">Ekki tókst að sækja „<ph name="LANGUAGE" />“</translation> +<translation id="1173894706177603556">Endurnefna</translation> <translation id="1174644974616730562">Umslag: kínverskt #1</translation> <translation id="1174723505405632867">Viltu leyfa <ph name="EMBEDDED_URL" /> að nota fótspor og vefsvæðisgögn á <ph name="TOP_LEVEL_URL" />? @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">Til að nota Aðgangsorðastjórnun með macOS Keychain skaltu endurræsa Chromium og veita Keychain aðgang. Fliparnir þínir opnast aftur eftir endurræsingu.</translation> <translation id="1652887625750064647">Besta samsvörun samkvæmt gervigreind</translation> +<translation id="1653465303147789530">Greiða með <ph name="PAYMENT_METHOD" /> án þess að skipta um forrit</translation> <translation id="1656024727720460136">Chrome einfaldaði þessa síðu svo það yrði auðveldara að lesa hana. Chrome sótti upprunalegu síðuna um örugga tengingu.</translation> <translation id="1656489000284462475">Afhending</translation> <translation id="1658111267661135323">Sjónvarp og myndskeið</translation> @@ -556,6 +558,7 @@ <translation id="1959001866257244765">Hjálpaðu til við að auka öryggi allra á vefnum með því að senda <ph name="BEGIN_WHITEPAPER_LINK" />vefslóðir sumra þeirra vefsíðna sem þú skoðar, takmarkaðar kerfisupplýsingar og tiltekið innihald síðna<ph name="END_WHITEPAPER_LINK" /> til Google. <ph name="BEGIN_PRIVACY_PAGE_LINK" />Persónuverndarstefna<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">Textinn þinn og efni síðunnar er sent til Google og verður hugsanlega notað til að bæta þennan eiginleika. <ph name="BEGIN_LINK" />Nánar<ph name="END_LINK" /></translation> +<translation id="196146181975453736">Ljúka stakri öryggisskoðun til að greiða hraðar</translation> <translation id="1962204205936693436">Bókamerki frá <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Röðunarvilla</translation> <translation id="1973785048533660168">Skrifstofu- og stjórnunarstörf</translation> @@ -1585,6 +1588,7 @@ <translation id="378611282717571199">Bestu samsvaranirnar fyrir „<ph name="SEARCH_QUERY" />“</translation> <translation id="3789155188480882154">Stærð 16</translation> <translation id="3789841737615482174">Setja upp</translation> +<translation id="3791118028061680614">Greiddu án þess að skipta á milli forrita</translation> <translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> to.)</translation> <translation id="3792826587784915501">Költ- og indímyndir</translation> <translation id="3793574014653384240">Fjöldi nýlegra hruntilvika og orsakir þeirra</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index b325768..4f53ad9 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Pagina visitata</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nessuno}=1{Da 1 sito (manterrai l'accesso al tuo Account Google)}other{Da # siti (manterrai l'accesso al tuo Account Google)}}</translation> <translation id="1167877250265821930">Download di <ph name="LANGUAGE" /> non riuscito</translation> +<translation id="1173894706177603556">Rinomina</translation> <translation id="1174644974616730562">Busta Chinese #1</translation> <translation id="1174723505405632867">Vuoi consentire al sito <ph name="EMBEDDED_URL" /> di usare cookie e dati del sito su <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index 932bbb4..61c59f7a 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">ביקור בדף</translation> <translation id="1165813024716836071">{COUNT,plural, =0{אין אתרים}=1{מאתר אחד (החיבור לחשבון Google שלך ימשיך)}one{מ-# אתרים (החיבור לחשבון Google שלך ימשיך)}two{מ-# אתרים (החיבור לחשבון Google שלך ימשיך)}other{מ-# אתרים (החיבור לחשבון Google שלך ימשיך)}}</translation> <translation id="1167877250265821930">ההורדה של <ph name="LANGUAGE" /> נכשלה</translation> +<translation id="1173894706177603556">שינוי שם</translation> <translation id="1174644974616730562">מעטפה – סינית 1</translation> <translation id="1174723505405632867">האם ברצונך לאפשר ל-<ph name="EMBEDDED_URL" /> להשתמש בקובצי Cookie ובנתונים שב-<ph name="TOP_LEVEL_URL" />? @@ -520,7 +521,7 @@ <translation id="1880901968112404879">כדי לשלם מהר יותר בפעם הבאה, אפשר לשמור את פרטי הכרטיס, קוד האבטחה המוצפן והכתובת לחיוב בחשבון Google</translation> <translation id="1883255238294161206">כיווץ רשימה</translation> <translation id="1884843295353628214">ג'אז</translation> -<translation id="1890171020361705182">משחק Dino. דינוזאור בתצוגת פיקסלים חומק מקטטוסים ומפטרודקטילים בעודו רץ על רקע נוף שומם. כששומעים את האות באודיו, צריך להקיש כדי לדלג מעל מכשולים.</translation> +<translation id="1890171020361705182">משחק Dino. דינוזאור בתצוגת פיקסלים חומק מקטטוסים ומפטרודקטילים בעודו רץ על רקע נוף שומם. כששומעים את האות באודיו, צריך ללחוץ כדי לדלג מעל מכשולים.</translation> <translation id="1898423065542865115">סינון</translation> <translation id="1901443836186977402">{1,plural, =1{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. התוקף של אישור האבטחה שלו פג במהלך היממה האחרונה. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. על פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}one{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. על פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}two{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני יומיים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. על פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}other{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. על פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}}</translation> <translation id="1902576642799138955">תקופת תוקף</translation> @@ -1746,7 +1747,7 @@ <translation id="4089152113577680600">מגש 14</translation> <translation id="4092349052316400070">אפשר למלא את הכתובת</translation> <translation id="4096237801206588987">11x15 אינץ'</translation> -<translation id="4098306082496067348">מקישים על פרטי הכרטיס הווירטואלי כדי להוסיף אותם לתשלום.</translation> +<translation id="4098306082496067348">לוחצים על פרטי הכרטיס הווירטואלי כדי להוסיף אותם לתשלום.</translation> <translation id="4099048595830172239">לפי המדיניות של מנהל המערכת, לא מומלץ לשתף את המסך עם <ph name="APPLICATION_TITLE" /> כשמופיע בו תוכן סודי גלוי:</translation> <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, מקישים על Tab ואז על Enter כדי להתאים אישית את הגופנים וגודל הטקסט ב-Chrome</translation> <translation id="4101413244023615925">טקסט וגרפיקה</translation> @@ -1881,7 +1882,7 @@ <translation id="4298000214066716287">השקעות</translation> <translation id="42981349822642051">הרחבה</translation> <translation id="4300675098767811073">ניקובים מרובים בצד ימין</translation> -<translation id="4302514097724775343">יש להקיש על הדינוזאור כדי לשחק</translation> +<translation id="4302514097724775343">יש ללחוץ על הדינוזאור כדי לשחק</translation> <translation id="4304049446746819918">{0,plural, =1{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקובץ הזה אל <ph name="DESTINATION_NAME" />}one{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקבצים האלה אל <ph name="DESTINATION_NAME" />}two{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקבצים האלה אל <ph name="DESTINATION_NAME" />}other{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקבצים האלה אל <ph name="DESTINATION_NAME" />}}</translation> <translation id="4304485328308299773">כדאי לקרוא הערכות של לקוחות לגבי מוצרים, שירותים או חוויות שימוש. על סמך ביקורות כאלה ניתן לקבל החלטות מושכלות יותר.</translation> <translation id="4305666528087210886">לא ניתן לגשת לקובץ</translation> @@ -1937,6 +1938,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">העלאת הקובץ אל Microsoft OneDrive הושהתה</translation> <translation id="4390472908992056574">Brim</translation> +<translation id="4395550503472021297">המדיניות הזו קובעת את פעולת ברירת המחדל של כללי המדיניות הבאים: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">ייפתח חלון קופץ לאימות באתר הבנק</translation> <translation id="4406883609789734330">כתוביות מיידיות</translation> <translation id="4406896451731180161">תוצאות חיפוש</translation> @@ -2332,7 +2334,7 @@ <ph name="NEW_LINE" />אם תכונות האתר לא פועלות, <ph name="START_LINK" />כדאי לנסות להתיר את השימוש בקובצי Cookie של צד שלישי באופן זמני<ph name="END_LINK" />.</translation> <translation id="5145883236150621069">קיים קוד שגיאה בתגובת המדיניות</translation> <translation id="5146995429444047494">התראות של <ph name="ORIGIN" /> נחסמו</translation> -<translation id="514704532284964975">נשלחה בקשה מהכתובת <ph name="URL" /> לראות ולשנות מידע במכשירי NFC בזמן ההקשה בטלפון</translation> +<translation id="514704532284964975">נשלחה בקשה מהכתובת <ph name="URL" /> לראות ולשנות מידע במכשירי NFC בזמן הלחיצה בטלפון</translation> <translation id="5147633291963801297">הצגת ירידות במחיר בחלונית הצדדית</translation> <translation id="5148809049217731050">פנים כלפי מעלה</translation> <translation id="5148889558173091794">הכתובת <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> נחסמה על ידי הארגון שלך עקב הפרת מדיניות. <ph name="BEGIN_LEARN_MORE_LINK" />מידע נוסף על האזהרה הזו<ph name="END_LEARN_MORE_LINK" /></translation> @@ -2648,7 +2650,7 @@ <translation id="571510845185711675">וטרינרים</translation> <translation id="5715150588940290235">למחוק את קודי האבטחה שנשמרו?</translation> <translation id="5715918316982363436"><ph name="TAB_COUNT" /> מתוך <ph name="WINDOW_COUNT" /> במכשיר הזה</translation> -<translation id="5716325061445053985">צריך להקיש כדי לפתוח את הכרטיסייה בטלפון</translation> +<translation id="5716325061445053985">צריך ללחוץ כדי לפתוח את הכרטיסייה בטלפון</translation> <translation id="5717509257172454543">החלקה על הקרח</translation> <translation id="5720705177508910913">משתמש נוכחי:</translation> <translation id="5720895412771013401">מחשבים</translation> @@ -4000,6 +4002,7 @@ <translation id="8116925261070264013">מושתקים</translation> <translation id="8118489163946903409">אמצעי תשלום</translation> <translation id="8118506371121007279">שליחת משוב</translation> +<translation id="8120720167840853945">המדיניות הזו לא קובעת את פעולת ברירת המחדל של כללי מדיניות אחרים.</translation> <translation id="8127301229239896662">הייתה בעיה בהתקנה של "<ph name="SOFTWARE_NAME" />" במחשב שלך או ברשת. יש לבקש ממנהל ה-IT לפתור את הבעיה.</translation> <translation id="8131740175452115882">אישור</translation> <translation id="8133495915926741232">אפשר לבחור קטגוריות כלליות של נושאים שיוכלו לשמש להתאמה אישית של מודעות. אם קטגוריה כללית יותר תושבת, גם הנושאים שקשורים אליה ייחסמו. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> @@ -4299,7 +4302,7 @@ <translation id="8676424191133491403">ללא עיכוב</translation> <translation id="8680536109547170164"><ph name="QUERY" /> , תשובה, <ph name="ANSWER" /></translation> <translation id="8681531050781943054">לא ניתן היה לטעון את דף האינטרנט בכתובת <ph name="PAGE" /> מהסיבות הבאות:</translation> -<translation id="8682297334444610648">המשחק Dino, צריך להקיש כדי לשחק</translation> +<translation id="8682297334444610648">המשחק Dino, צריך ללחוץ כדי לשחק</translation> <translation id="8686424632716064939">אבטחת מחשבים</translation> <translation id="8687278439622293018">הרשומה <ph name="ENTRY_VOICEOVER" /> נמחקה</translation> <translation id="8687429322371626002">המכשיר והחשבון שלך מנוהלים על ידי <ph name="MANAGER" />.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 593929cb..d4a6a5e 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">ページがアクセスされた</translation> <translation id="1165813024716836071">{COUNT,plural, =0{なし}=1{1 件のサイトから(Google アカウントへのログイン状態は維持されます)}other{# 件のサイトから(Google アカウントへのログイン状態は維持されます)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" />をダウンロードできませんでした</translation> +<translation id="1173894706177603556">名前を変更</translation> <translation id="1174644974616730562">中国 #1 封筒</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> が <ph name="TOP_LEVEL_URL" /> で Cookie とサイトデータを使用することを許可しますか? @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">macOS キーチェーンでパスワード マネージャーを使用するには、Chromium を再起動してキーチェーンへのアクセスを許可してください。再起動すると、タブが再度開きます。</translation> <translation id="1652887625750064647">AI ベストマッチ</translation> +<translation id="1653465303147789530">アプリを切り替えずに <ph name="PAYMENT_METHOD" /> でお支払い</translation> <translation id="1656024727720460136">ページを見やすくするため、Chrome によって簡易表示されています。Chrome による元のページの取得は、保護された接続を介して行われました。</translation> <translation id="1656489000284462475">受け取り</translation> <translation id="1658111267661135323">テレビ&動画</translation> @@ -556,6 +558,7 @@ <translation id="1959001866257244765"><ph name="BEGIN_WHITEPAPER_LINK" />アクセスしたページの URL、システム情報、およびページのコンテンツの一部<ph name="END_WHITEPAPER_LINK" />を Google に送信して、ウェブ全体のセキュリティ強化にご協力ください。<ph name="BEGIN_PRIVACY_PAGE_LINK" />プライバシー ポリシー<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">テキストとページのコンテンツが Google に送信され、この機能の改善に使用されることがあります。 <ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> +<translation id="196146181975453736">1 回限りのセキュリティ チェックを行ってすばやくお支払いいただけます</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> のブックマーク</translation> <translation id="1973335181906896915">シリアル化エラーです</translation> <translation id="1973785048533660168">事務系の求人情報</translation> @@ -1585,6 +1588,7 @@ <translation id="378611282717571199">「<ph name="SEARCH_QUERY" />」と一致する結果</translation> <translation id="3789155188480882154">サイズ 16</translation> <translation id="3789841737615482174">インストール</translation> +<translation id="3791118028061680614">アプリを切り替えずにお支払い</translation> <translation id="3792100426446126328"><ph name="NAME" />(<ph name="WIDTH" />x<ph name="HEIGHT" /> インチ)</translation> <translation id="3792826587784915501">カルト映画、インディーズ映画</translation> <translation id="3793574014653384240">最近発生した問題の件数と原因</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index 82686551..343443b 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">მონახულებულია გვერდი</translation> <translation id="1165813024716836071">{COUNT,plural, =0{არცერთი}=1{1 საიტიდან (თქვენს Google ანგარიშში შესული დარჩებით)}other{# საიტიდან (თქვენს Google ანგარიშში შესული დარჩებით)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ვერ ჩამოიტვირთა</translation> +<translation id="1173894706177603556">სახელის შეცვლა</translation> <translation id="1174644974616730562">კონვერტი Chinese 1</translation> <translation id="1174723505405632867">გსურთ, <ph name="EMBEDDED_URL" />-ს ჰქონდეს <ph name="TOP_LEVEL_URL" />-ის ქუქი-ჩანაწერებსა და საიტის მონაცემებზე წვდომა.? @@ -1205,6 +1206,7 @@ <translation id="3156511682997763015">10 წამით წინ გადახვევა</translation> <translation id="3157931365184549694">აღდგენა</translation> <translation id="3158539265159265653">დისკი</translation> +<translation id="3162070126914310576">ამ მოწყობილობის ახლა რეგისტრაცია შეუძლებელია, რადგან თქვენმა ორგანიზაციულმა დანაყოფმა მიაღწია საწყისი რეგისტრაციის ლიმიტს. დახმარებისთვის დაუკავშირდით თქვენს ადმინისტრატორს.</translation> <translation id="3162559335345991374">Wi-Fi-მ, რომელსაც თქვენ იყენებთ, შეიძლება მოითხოვოს თქვენი სტუმრობა მის ავტორიზაციის გვერდზე.</translation> <translation id="316638481603975524">შეიძლება ითხოვოს ვებ-აპების ინსტალაცია</translation> <translation id="3168744840365648658">რადიოაღჭურვილობა</translation> @@ -1940,6 +1942,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Microsoft OneDrive-ში ფაილის ატვირთვა დაპაუზდა</translation> <translation id="4390472908992056574">კიდეების გადავსება</translation> +<translation id="4395550503472021297">ამ წესებით იმართება შემდეგი წესების სტანდარტული ქცევა: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">გახსნის ამომხტარ ფანჯარას დადასტურების გასავლელად თქვენი ბანკის ვებსაიტზე</translation> <translation id="4406883609789734330">ავტოსუბტიტრები</translation> <translation id="4406896451731180161">ძიების შედეგები</translation> @@ -2382,6 +2385,7 @@ <translation id="5244521145258281926">Google ანგარიშის მართვა, თქვენს Google ანგარიშში თქვენი ინფორმაციის, კონფიდენციალურობისა და უსაფრთხოების სამართავად გაააქტიურეთ ის</translation> <translation id="5244732203286792411">მიმდინარეობს ჩატვირთვა... ამას შეიძლება ერთი წუთი დასჭირდეს.</translation> +<translation id="5248543496748975054">ბარათის ნომერი არ არის შევსებული?</translation> <translation id="5250209940322997802">„დაუკავშირდით ქსელს“</translation> <translation id="52517543715119994">Chrome-ის ფუნქციების შესახებ</translation> <translation id="5251803541071282808">ღრუბლოვანი</translation> @@ -3997,6 +4001,7 @@ <translation id="8116925261070264013">დადუმებული</translation> <translation id="8118489163946903409">გადახდის მეთოდი</translation> <translation id="8118506371121007279">გამოხმაურების დაწერა</translation> +<translation id="8120720167840853945">ამ წესებით არ იმართება არცერთი სხვა წესის სტანდარტული ქცევა.</translation> <translation id="8127301229239896662">„<ph name="SOFTWARE_NAME" />“ არასათანადოდ დაინსტალირდა თქვენს კომპიუტერზე ან ქსელში. სთხოვეთ თქვენს IT ადმინისტრატორს ამ პრობლემის მოგვარება.</translation> <translation id="8131740175452115882">დაადასტურება</translation> <translation id="8133495915926741232">აირჩიეთ, თემების რომელი ვრცელი კატეგორია იყოს გამოყენებული რეკლამის პერსონალიზების ხელშეწყობის მიზნით. ვრცელი კატეგორიის დაბლოკვის შემთხვევაში დაიბლოკება მასთან დაკავშირებული თემებიც. <ph name="BEGIN_LINK" />შეიტყვეთ მეტი<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index ec63d7d..3fe2701 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Кірілген сайт</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Жоқ}=1{1 сайтта (Google аккаунтыңыздан шығарылмайсыз)}other{# сайтта (Google аккаунтыңыздан шығарылмайсыз)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> жүктеп алынбады</translation> +<translation id="1173894706177603556">Атын өзгерту</translation> <translation id="1174644974616730562">Chinese #1 хатқалтасы</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> сайтына <ph name="TOP_LEVEL_URL" /> сайтында cookie файлдары мен сайт деректерін пайдалануға рұқсат бересіз бе?
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index 245079f3..28c0e12 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -92,6 +92,7 @@ <translation id="1165174597379888365">ទំព័រត្រូវបានចូលមើល</translation> <translation id="1165813024716836071">{COUNT,plural, =0{គ្មាន}=1{ពីគេហទំព័រ 1 (អ្នកនឹងនៅតែចូលគណនី Google របស់អ្នក)}other{ពីគេហទំព័រ # (អ្នកនឹងនៅតែចូលគណនី Google របស់អ្នក)}}</translation> <translation id="1167877250265821930">មិនអាចទាញយកភាសា<ph name="LANGUAGE" />បានទេ</translation> +<translation id="1173894706177603556">ប្តូរឈ្មោះ</translation> <translation id="1174644974616730562">ស្រោមសំបុត្រចិន #1</translation> <translation id="1174723505405632867">តើអ្នកចង់អនុញ្ញាតឱ្យ <ph name="EMBEDDED_URL" /> ប្រើទិន្នន័យគេហទំព័រ និងខូគីនៅលើ <ph name="TOP_LEVEL_URL" /> ដែរទេ?
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index cdea82b..0fc39294 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">ಪುಟಕ್ಕೆ ಭೇಟಿ ನೀಡಿದಾಗ</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ಸೈಟ್ನಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಗೆ ನೀವು ಸೈನ್ ಇನ್ ಆಗಿರುತ್ತೀರಿ)}one{# ಸೈಟ್ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಗೆ ನೀವು ಸೈನ್ ಇನ್ ಆಗಿರುತ್ತೀರಿ)}other{# ಸೈಟ್ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಗೆ ನೀವು ಸೈನ್ ಇನ್ ಆಗಿರುತ್ತೀರಿ)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ಡೌನ್ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ</translation> +<translation id="1173894706177603556">ಮರುಹೆಸರಿಸು</translation> <translation id="1174644974616730562">ಎನ್ವಲಪ್ ಚೈನೀಸ್ #1</translation> <translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" /> ನಲ್ಲಿ ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ಬಳಸಲು ನೀವು <ph name="EMBEDDED_URL" /> ಗೆ ಅನುಮತಿಸಲು ಬಯಸುತ್ತೀರಾ?
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index cdd876a..96faf6b 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">페이지를 방문함</translation> <translation id="1165813024716836071">{COUNT,plural, =0{없음}=1{사이트 1개(Google 계정에 로그인된 상태가 유지됨)}other{사이트 #개(Google 계정에 로그인된 상태가 유지됨)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" />를 다운로드할 수 없습니다</translation> +<translation id="1173894706177603556">이름 바꾸기</translation> <translation id="1174644974616730562">봉투 Chinese #1</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" />에서 <ph name="TOP_LEVEL_URL" />의 쿠키와 사이트 데이터를 사용하도록 허용할까요?
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index a6c48c5..563bb3c3 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Баракка баш багылды</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Жок}=1{1 сайттан (Google аккаунтуңузга кирген бойдон каласыз)}other{# сайттан (Google аккаунтуңузга кирген бойдон каласыз)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> жүктөлүп алынган жок</translation> +<translation id="1173894706177603556">Атын өзгөртүү</translation> <translation id="1174644974616730562">Конверт Кытайча #1</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> сайтына cookie файлдарын жана сайттын маалыматын <ph name="TOP_LEVEL_URL" /> доменинде колдонууга уруксат бересизби?
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb index 682cd8b..4fa5c9a 100644 --- a/components/strings/components_strings_lo.xtb +++ b/components/strings/components_strings_lo.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">ມີການເຂົ້າເບິ່ງໜ້າເວັບ</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ບໍ່ມີ}=1{ຈາກ 1 ເວັບໄຊ (ທ່ານຈະເຂົ້າສູ່ລະບົບບັນຊີ Google ຂອງທ່ານຕໍ່ໄປ)}other{ຈາກ # ເວັບໄຊ (ທ່ານຈະເຂົ້າສູ່ລະບົບບັນຊີ Google ຂອງທ່ານຕໍ່ໄປ)}}</translation> <translation id="1167877250265821930">ດາວໂຫຼດ <ph name="LANGUAGE" /> ບໍ່ສຳເລັດ</translation> +<translation id="1173894706177603556">ໃສ່ຊື່ໃໝ່</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867">ທ່ານຕ້ອງການອະນຸຍາດໃຫ້ <ph name="EMBEDDED_URL" /> ໃຊ້ຄຸກກີ້ ແລະ ຂໍ້ມູນເວັບໄຊໃນ <ph name="TOP_LEVEL_URL" /> ບໍ? @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">ເພື່ອໃຊ້ຕົວຈັດການລະຫັດຜ່ານດ້ວຍ Keychain ຂອງ macOS, ໃຫ້ເລີ່ມເປີດໃຊ້ Chromium ຄືນໃໝ່ ແລະ ອະນຸຍາດໃຫ້ມີການເຂົ້າເຖິງ Keychain. ແຖບຂອງທ່ານຈະເປີດຄືນໃໝ່ຫຼັງຈາກທີ່ເລີ່ມເປີດໃຊ້ໃໝ່.</translation> <translation id="1652887625750064647">ກົງກັນທີ່ສຸດຈາກ AI</translation> +<translation id="1653465303147789530">ຈ່າຍເງິນດ້ວຍ <ph name="PAYMENT_METHOD" /> ໂດຍບໍ່ຕ້ອງປ່ຽນແອັບ</translation> <translation id="1656024727720460136">Chrome ໄດ້ເຮັດໃຫ້ໜ້ານີ້ອ່ານໄດ້ງ່າຍຂຶ້ນ. Chrome ກູ້ຄືນໜ້າຕົ້ນສະບັບຜ່ານການເຊື່ອມຕໍ່ທີ່ປອດໄພ.</translation> <translation id="1656489000284462475">ບ່ອນຮັບເຄື່ອງ</translation> <translation id="1658111267661135323">ໂທລະທັດ ແລະ ວິດີໂອ</translation> @@ -556,6 +558,7 @@ <translation id="1959001866257244765">ຊ່ວຍປັບປຸງຄວາມປອດໄພຂອງເວັບໄຊສຳລັບທຸກຄົນໂດຍການສົ່ງ <ph name="BEGIN_WHITEPAPER_LINK" />URL ຂອງບາງໜ້າເວັບທີ່ທ່ານເຂົ້າເບິ່ງ, ຂໍ້ມູນລະບົບແບບຈຳກັດ ແລະ ບາງເນື້ອຫາໃນໜ້າເວັບ<ph name="END_WHITEPAPER_LINK" /> ໄປໃຫ້ Google. <ph name="BEGIN_PRIVACY_PAGE_LINK" />ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">ຂໍ້ຄວາມ ແລະ ເນື້ອຫາໜ້າເວັບຂອງທ່ານຈະຖືກສົ່ງໄປຫາ Google ແລະ ອາດຈະຖືກໃຊ້ເພື່ອປັບປຸງຄຸນສົມບັດນີ້. <ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" /></translation> +<translation id="196146181975453736">ກວດສອບຄວາມປອດໄພແບບເທື່ອດຽວໃຫ້ສຳເລັດເພື່ອຈ່າຍເງິນໄດ້ໄວຂຶ້ນ</translation> <translation id="1962204205936693436">ບຸກມາກສ໌ ່<ph name="DOMAIN" /></translation> <translation id="1973335181906896915">ຄວາມຜິດພາດການສ້າງລໍາດັບ</translation> <translation id="1973785048533660168">ວຽກສະໝຽນ ແລະ ບໍລິຫານ</translation> @@ -1585,6 +1588,7 @@ <translation id="378611282717571199">ຜົນຮັບທີ່ກົງທີ່ສຸດສຳລັບ "<ph name="SEARCH_QUERY" />"</translation> <translation id="3789155188480882154">ຂະໜາດ 16</translation> <translation id="3789841737615482174">ຕິດຕັ້ງ</translation> +<translation id="3791118028061680614">ຈ່າຍເງິນໂດຍບໍ່ຕ້ອງປ່ຽນແອັບ</translation> <translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> ນິ້ວ)</translation> <translation id="3792826587784915501">ໜັງແນວລັດທິ ແລະ ອິນດີ້</translation> <translation id="3793574014653384240">ຈຳນວນ ແລະ ສາເຫດຂອງການຂັດຂ້ອງທີ່ເກີດຂຶ້ນເມື່ອບໍ່ດົນມານີ້</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 62c0cea8..09533a49 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Puslapyje apsilankyta</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nėra}=1{Iš vienos svetainės (liksite prisijungę prie „Google“ paskyros)}one{Iš # svetainės (liksite prisijungę prie „Google“ paskyros)}few{Iš # svetainių (liksite prisijungę prie „Google“ paskyros)}many{Iš # svetainės (liksite prisijungę prie „Google“ paskyros)}other{Iš # svetainių (liksite prisijungę prie „Google“ paskyros)}}</translation> <translation id="1167877250265821930">Nepavyko atsisiųsti <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Pervadinti</translation> <translation id="1174644974616730562">Nr. 1 kinietiškas vokas</translation> <translation id="1174723505405632867">Ar norite leisti <ph name="EMBEDDED_URL" /> naudoti slapukus ir svetainės duomenis <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index 1500403..4b9e7ce 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Apmeklēta lapa</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nav}=1{No vienas vietnes (joprojām būsiet pierakstījies Google kontā)}zero{No # vietnēm (joprojām būsiet pierakstījies Google kontā)}one{No # vietnes (joprojām būsiet pierakstījies Google kontā)}other{No # vietnēm (joprojām būsiet pierakstījies Google kontā)}}</translation> <translation id="1167877250265821930">Neizdevās lejupielādēt šādu valodas pakotni: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Pārdēvēt</translation> <translation id="1174644974616730562">Ķīniešu aploksne 1</translation> <translation id="1174723505405632867">Vai vēlaties atļaut vietnei <ph name="EMBEDDED_URL" /> izmantot sīkfailus un vietnes datus šeit: <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 5e60005..26f7c62 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Посетена е страница</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Нема}=1{Од 1 сајт (ќе останете најавени на сметката на Google)}one{Од # сајт (ќе останете најавени на сметката на Google)}other{Од # сајта (ќе останете најавени на сметката на Google)}}</translation> <translation id="1167877250265821930">Не можеше да се преземе <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Преименувај</translation> <translation id="1174644974616730562">Плик Chinese #1</translation> <translation id="1174723505405632867">Дали сакате да дозволите <ph name="EMBEDDED_URL" /> да користи колачиња и податоци за сајтот на <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 4f35fd95..7ba1c863 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">പേജ് സന്ദർശിച്ചു</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ഒന്നുമില്ല}=1{ഒരു സൈറ്റിൽ നിന്ന് (നിങ്ങൾ Google Account-ൽ സൈൻ ഇൻ ചെയ്ത നിലയിൽ തുടരും)}other{# സൈറ്റുകളിൽ നിന്ന് (നിങ്ങൾ Google Account-ൽ സൈൻ ഇൻ ചെയ്ത നിലയിൽ തുടരും)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ഡൗൺലോഡ് ചെയ്യാനായില്ല</translation> +<translation id="1173894706177603556">പേരുമാറ്റുക</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" /> എന്നതിൽ കുക്കികളും സൈറ്റ് ഡാറ്റയും ഉപയോഗിക്കാൻ <ph name="EMBEDDED_URL" /> എന്നതിനെ അനുവദിക്കണോ?
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index 3a493f4..4e0225e 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Хуудсанд зочилдог</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Байхгүй}=1{1 сайтаас (та Google Бүртгэлдээ нэвтэрсэн хэвээр үлдэнэ)}other{# сайтаас (та Google Бүртгэлдээ нэвтэрсэн хэвээр үлдэнэ)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" />-г татаж чадсангүй</translation> +<translation id="1173894706177603556">Нэр солих</translation> <translation id="1174644974616730562">Хятад дугтуй #1</translation> <translation id="1174723505405632867">Та <ph name="EMBEDDED_URL" />-д <ph name="TOP_LEVEL_URL" /> дээрх күүки болон сайтын өгөгдлийг ашиглахыг зөвшөөрөх үү?
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index b814cc40..165e665c 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">पेजला भेट दिली</translation> <translation id="1165813024716836071">{COUNT,plural, =0{None}=1{१ साइटवरून (तुम्ही तुमच्या Google खाते मध्ये साइन इन केलेले राहाल)}other{# साइटवरून (तुम्ही तुमच्या Google खाते मध्ये साइन इन केलेले राहाल)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> डाउनलोड करता आली नाही</translation> +<translation id="1173894706177603556">नाव बदला</translation> <translation id="1174644974616730562">एन्व्हलप चायनीज #१</translation> <translation id="1174723505405632867">तुम्हाला <ph name="TOP_LEVEL_URL" /> वरील कुकी आणि साइट डेटा <ph name="EMBEDDED_URL" /> ला वापरण्याची अनुमती द्यायची आहे का? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">१० सेकंद फॉरवर्ड करा</translation> <translation id="3157931365184549694">पुनर्संचयित करा</translation> <translation id="3158539265159265653">डिस्क</translation> +<translation id="3162070126914310576">या वेळी या डिव्हाइसची नोंदणी केली जाऊ शकत नाही, कारण तुमच्या संस्थेच्या युनिटने त्याची सुरुवातीची नोंदणीची मर्यादा गाठली आहे. साहाय्यासाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation> <translation id="3162559335345991374">तुम्ही वापरत असलेल्या वाय-फाय च्या लॉग इन पेजला तुम्हाला भेट देण्याची आवश्यकता असू शकते.</translation> <translation id="316638481603975524">वेब अॅप्स इंस्टॉल करण्याची विनंती करता येईल</translation> <translation id="3168744840365648658">रेडिओ उपकरणे</translation> @@ -1936,6 +1938,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Microsoft OneDrive वरील फाइल अपलोड थांबवले गेले</translation> <translation id="4390472908992056574">ब्रिम</translation> +<translation id="4395550503472021297">हे धोरण पुढील धोरणांचे डीफॉल्ट वर्तन नियंत्रित करत आहे: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">तुमच्या बँकच्या वेबसाइटवर पडताळणी करण्यासाठी पॉप-अप उघडते</translation> <translation id="4406883609789734330">लाइव्ह कॅप्शन</translation> <translation id="4406896451731180161">शोध परिणाम</translation> @@ -2378,6 +2381,7 @@ <translation id="5244521145258281926">Google खाते व्यवस्थापित करा, तुमच्या Google खाते मध्ये तुमची माहिती, गोपनीयता आणि सुरक्षा व्यवस्थापित करण्यासाठी अॅक्टिव्हेट करा</translation> <translation id="5244732203286792411">लोड करत आहे… यासाठी एखादा मिनिट लागू शकतो.</translation> +<translation id="5248543496748975054">कार्ड नंबर भरलेला नाही का?</translation> <translation id="5250209940322997802">"नेटवर्कशी कनेक्ट करा"</translation> <translation id="52517543715119994">Chrome च्या वैशिष्ट्यांविषयी जाणून घ्या</translation> <translation id="5251803541071282808">क्लाउड</translation> @@ -3995,6 +3999,7 @@ <translation id="8116925261070264013">म्यूट केले</translation> <translation id="8118489163946903409">पेमेंट पद्धत</translation> <translation id="8118506371121007279">फीडबॅक द्या</translation> +<translation id="8120720167840853945">हे धोरण इतर कोणत्याही धोरणांचे डीफॉल्ट वर्तन नियंत्रित करत नाही.</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" तुमच्या काँप्युटरवर किंवा नेटवर्कवर योग्य रीतीने इंस्टॉल केले नव्हते. तुमच्या अॅडमिनिस्ट्रेटरला ही समस्या सोडवण्यास सांगा.</translation> <translation id="8131740175452115882">पुष्टी करा</translation> <translation id="8133495915926741232">जाहिराती पर्सनलाइझ करण्यात मदत व्हावी, यासाठी विषयांच्या कोणत्या व्यापक वर्गवाऱ्या वापरल्या जाऊ शकतात हे निवडा. व्यापक वर्गवारी बंद केल्याने त्यासंबंधित विषयदेखील ब्लॉक केले जातील. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index bc8d3769..f920e61 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Halaman dilawati</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Tiada}=1{Daripada 1 laman (anda akan kekal dilog masuk ke Google Account anda)}other{Daripada # laman (anda akan kekal dilog masuk ke Google Account anda)}}</translation> <translation id="1167877250265821930">Gagal memuat turun <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Namakan semula</translation> <translation id="1174644974616730562">Sampul Cina #1</translation> <translation id="1174723505405632867">Adakah anda mahu membenarkan <ph name="EMBEDDED_URL" /> menggunakan kuki dan data tapak pada <ph name="TOP_LEVEL_URL" />? @@ -1205,6 +1206,7 @@ <translation id="3156511682997763015">Mundar 10 saat</translation> <translation id="3157931365184549694">Pulihkan</translation> <translation id="3158539265159265653">Cakera</translation> +<translation id="3162070126914310576">Peranti gagal didaftarkan pada masa ini kerana unit organisasi anda telah mencapai had pendaftaran permulaan. Hubungi pentadbir anda untuk mendapatkan bantuan.</translation> <translation id="3162559335345991374">Wi-Fi yang anda gunakan mungkin memerlukan anda untuk melawat halaman log masuknya.</translation> <translation id="316638481603975524">Boleh meminta untuk memasang apl web</translation> <translation id="3168744840365648658">Peralatan Radio</translation> @@ -1941,6 +1943,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Muat naik fail kepada Microsoft OneDrive telah dijeda</translation> <translation id="4390472908992056574">Bertepi</translation> +<translation id="4395550503472021297">Dasar ini mengawal gelagat lalai dasar yang berikut: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Membuka tetingkap timbul untuk membuat pengesahan pada laman web bank anda</translation> <translation id="4406883609789734330">Sari Kata Langsung</translation> <translation id="4406896451731180161">hasil carian</translation> @@ -2383,6 +2386,7 @@ <translation id="5244521145258281926">Butang urus Google Account, aktifkan untuk mengurus maklumat, privasi dan keselamatan dalam Google Account anda</translation> <translation id="5244732203286792411">Memuatkan... Proses ini mungkin mengambil masa seketika.</translation> +<translation id="5248543496748975054">Nombor kad tidak diisi?</translation> <translation id="5250209940322997802">"Sambung kepada rangkaian"</translation> <translation id="52517543715119994">Ketahui tentang ciri Chrome</translation> <translation id="5251803541071282808">Awan</translation> @@ -3999,6 +4003,7 @@ <translation id="8116925261070264013">Diredam</translation> <translation id="8118489163946903409">Kaedah pembayaran</translation> <translation id="8118506371121007279">Beri maklum balas</translation> +<translation id="8120720167840853945">Dasar ini tidak mengawal gelagat lalai sebarang dasar lain.</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" tidak dipasang dengan betul pada komputer atau rangkaian anda. Minta pentadbir IT anda menyelesaikan isu ini.</translation> <translation id="8131740175452115882">Sahkan</translation> <translation id="8133495915926741232">Pilih kategori topik yang luas yang boleh digunakan untuk memeribadikan iklan. Tindakan mematikan kategori yang lebih luas akan turut menyekat topik yang berkaitan dengan kategori tersebut. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index 0cc77d9..b2a368a 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">စာမျက်နှာကို ဝင်ကြည့်ခဲ့သည်</translation> <translation id="1165813024716836071">{COUNT,plural, =0{မရှိ}=1{ဝဘ်ဆိုက် ၁ ခုမှ (သင့် Google Account တွင် ဆက်၍ လက်မှတ်ထိုးဝင်ထားပါမည်)}other{ဝဘ်ဆိုက် # ခုမှ (သင့် Google Account တွင် ဆက်၍ လက်မှတ်ထိုးဝင်ထားပါမည်)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ဒေါင်းလုဒ်လုပ်၍ မရပါ</translation> +<translation id="1173894706177603556">အမည်ပြောင်းရန်</translation> <translation id="1174644974616730562">Chinese #1 စာအိတ်</translation> <translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" /> တွင် ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာများ သုံးရန် <ph name="EMBEDDED_URL" /> ကို ခွင့်ပြုလိုသလား။ @@ -386,6 +387,7 @@ <translation id="1652415888492971589">JIS B8</translation> <translation id="1652862280638399816">macOS Keychain ဖြင့် Password Manager သုံးရန် Chromium ကို ပြန်ဖွင့်ပြီး Keychain သုံးခွင့်ပြုပါ။ ပြန်ဖွင့်ပြီးနောက် သင့်တဘ်များ ပြန်ပွင့်ပါမည်။</translation> <translation id="1652887625750064647">AI အကောင်းဆုံးကိုက်ညီမှု</translation> +<translation id="1653465303147789530">အက်ပ်များမပြောင်းဘဲ <ph name="PAYMENT_METHOD" /> ဖြင့် ငွေပေးချေခြင်း</translation> <translation id="1656024727720460136">ဤစာမျက်နှာကို ပိုမိုလွယ်ကူစွာဖတ်နိုင်ရန် Chrome က ရိုးရှင်းအောင်ပြုလုပ်ထားသည်။ Chrome သည် မူရင်းစာမျက်နှာကို လုံခြုံသည့် ချိတ်ဆက်မှုမှတစ်ဆင့် ရယူထားသည်။</translation> <translation id="1656489000284462475">ထုတ်ယူရန်</translation> <translation id="1658111267661135323">TV နှင့် ဗီဒီယို</translation> @@ -557,6 +559,7 @@ <translation id="1959001866257244765"><ph name="BEGIN_WHITEPAPER_LINK" />သင်ဝင်ကြည့်သည့် စာမျက်နှာအချို့၏ URL များ၊ ကန့်သတ်ထားသည့် စနစ်အချက်အလက်များနှင့် အချို့သောစာမျက်နှာပါ အကြောင်းအရာများ<ph name="END_WHITEPAPER_LINK" /> ကို Google သို့ ပို့ပေးခြင်းဖြင့် လူတိုင်းအတွက် ဝဘ်ပေါ်တွင် လုံခြုံရေး ကောင်းမွန်လာအောင် ကူညီပါ။ <ph name="BEGIN_PRIVACY_PAGE_LINK" />ကိုယ်ရေးအချက်အလက် မူဝါဒ<ph name="END_PRIVACY_PAGE_LINK" /></translation> <translation id="1959445535228047762">သင့်စာသားနှင့် စာမျက်နှာအကြောင်းအရာကို Google သို့ ပို့ပြီး ဤဝန်ဆောင်မှု ပိုကောင်းစေရန် သုံးနိုင်သည်။ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation> +<translation id="196146181975453736">ပိုမိုမြန်ဆန်စွာ ငွေပေးချေရန် တစ်ကြိမ် လုံခြုံရေးစစ်ဆေးခြင်းကို အပြီးသတ်ပါ</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> စာညှပ်များ</translation> <translation id="1973335181906896915">နံပါတ်စဉ်စီမှု အမှား</translation> <translation id="1973785048533660168">စာရေးစာချီနှင့် စီမံခန့်ခွဲရေးအလုပ်</translation> @@ -1585,6 +1588,7 @@ <translation id="378611282717571199">"<ph name="SEARCH_QUERY" />" အတွက် အကိုက်ညီဆုံးများ</translation> <translation id="3789155188480882154">အရွယ်အစား ၁၆</translation> <translation id="3789841737615482174">တပ်ဆင်ရန်</translation> +<translation id="3791118028061680614">အက်ပ်များမပြောင်းဘဲ ငွေပေးချေခြင်း</translation> <translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> လက်မ)</translation> <translation id="3792826587784915501">ယုံကြည်မှုဆိုင်ရာ၊ အင်ဒီး ရုပ်ရှင်</translation> <translation id="3793574014653384240">မကြာသေးမီက ဖြစ်ပွားခဲ့သည့် ရပ်တန့်သွားခြင်း အရေအတွက်များနှင့် အကြောင်းရင်းများ</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 6ecac500..70fc072f 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">पृष्ठ खोलिएको छ</translation> <translation id="1165813024716836071">{COUNT,plural, =0{कुनै पनि साइटले कुकी प्रयोग गर्दैन}=1{एउटा साइटबाट (तपाईं आफ्नो Google खातामा साइन इन अवस्थामा रहिरहनु हुने छ)}other{# वटा साइटबाट (तपाईं आफ्नो Google खातामा साइन इन अवस्थामा रहिरहनु हुने छ)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> डाउनलोड गर्न सकिएन</translation> +<translation id="1173894706177603556">पुन: नामाकरण गर्नुहोस्</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867">तपाईं <ph name="EMBEDDED_URL" /> लाई <ph name="TOP_LEVEL_URL" /> का कुकी र साइटको डेटा प्रयोग गर्ने अनुमति दिन चाहनुहुन्छ?
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 40e9f2e..355065e 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Pagina is bezocht</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Geen}=1{Van 1 site (je blijft ingelogd op je Google-account)}other{Van # sites (je blijft ingelogd op je Google-account)}}</translation> <translation id="1167877250265821930">Kan <ph name="LANGUAGE" /> niet downloaden</translation> +<translation id="1173894706177603556">Naam wijzigen</translation> <translation id="1174644974616730562">Envelop Chinees #1</translation> <translation id="1174723505405632867">Wil je toestaan dat <ph name="EMBEDDED_URL" /> cookies en sitegegevens gebruikt op <ph name="TOP_LEVEL_URL" />? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">10 seconden vooruit</translation> <translation id="3157931365184549694">Herstellen</translation> <translation id="3158539265159265653">Schijf</translation> +<translation id="3162070126914310576">Dit apparaat kan nu niet worden ingeschreven omdat je organisatie-eenheid de aanvankelijke inschrijvingslimiet heeft bereikt. Neem voor hulp contact op met de beheerder.</translation> <translation id="3162559335345991374">Het is mogelijk dat je de inlogpagina moet bezoeken van het wifi-netwerk dat je gebruikt.</translation> <translation id="316638481603975524">Kan vragen om web-apps te installeren</translation> <translation id="3168744840365648658">Radio-apparatuur</translation> @@ -1931,6 +1933,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Bestandsupload naar Microsoft OneDrive is onderbroken</translation> <translation id="4390472908992056574">Brim</translation> +<translation id="4395550503472021297">Dit beleid bepaalt het standaardgedrag van de volgende beleidsregels: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Er wordt een pop-up geopend voor verificatie op de website van je bank</translation> <translation id="4406883609789734330">Live ondertiteling</translation> <translation id="4406896451731180161">zoekresultaten</translation> @@ -2373,6 +2376,7 @@ <translation id="5244521145258281926">Knop Google-account beheren. Activeer deze om je gegevens, privacy, en beveiliging te beheren in je Google-account.</translation> <translation id="5244732203286792411">Laden... Dit kan even duren.</translation> +<translation id="5248543496748975054">Kaartnummer niet ingevuld?</translation> <translation id="5250209940322997802">'Verbinding maken met netwerk'</translation> <translation id="52517543715119994">Meer informatie over Chrome-functies</translation> <translation id="5251803541071282808">Cloud</translation> @@ -3988,6 +3992,7 @@ <translation id="8116925261070264013">Geluid uit</translation> <translation id="8118489163946903409">Betaalmethode</translation> <translation id="8118506371121007279">Feedback geven</translation> +<translation id="8120720167840853945">Dit beleid bepaalt niet het standaardgedrag van andere beleidsregels.</translation> <translation id="8127301229239896662">'<ph name="SOFTWARE_NAME" />' is niet correct geïnstalleerd op je computer of netwerk. Neem contact op met je IT-beheerder om dit probleem op te lossen.</translation> <translation id="8131740175452115882">Bevestigen</translation> <translation id="8133495915926741232">Kies welke brede onderwerpcategorieën kunnen worden gebruikt om advertenties te personaliseren. Als je een bredere categorie uitzet, worden ook de gerelateerde onderwerpen van die categorie geblokkeerd. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index be79f88..522e1318 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">En nettside besøkes</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ingen}=1{Fra 1 nettsted (du forblir logget på Google-kontoen din)}other{Fra # nettsteder (du forblir pålogget Google-kontoen din)}}</translation> <translation id="1167877250265821930">Kunne ikke laste ned <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Gi nytt navn</translation> <translation id="1174644974616730562">Kinesisk konvolutt nr. 1</translation> <translation id="1174723505405632867">Vil du gi <ph name="EMBEDDED_URL" /> tillatelse til å bruke informasjonskapsler og nettstedsdata på <ph name="TOP_LEVEL_URL" />? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">Spol 10 sekunder frem</translation> <translation id="3157931365184549694">Gjenopprett</translation> <translation id="3158539265159265653">Plate</translation> +<translation id="3162070126914310576">Denne enheten kan ikke registreres nå fordi organisasjonsenheten din har nådd grensen for initiell registrering. Kontakt administratoren din hvis du trenger hjelp.</translation> <translation id="3162559335345991374">Det kan hende at Wifi-nettverket du bruker, krever at du besøker en påloggingsside.</translation> <translation id="316638481603975524">Kan be om å få installere nettapper</translation> <translation id="3168744840365648658">Radioutstyr</translation> @@ -1937,6 +1939,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Filopplasting til Microsoft OneDrive er satt på pause</translation> <translation id="4390472908992056574">Rand</translation> +<translation id="4395550503472021297">Denne regelen styrer standardfunksjonaliteten for disse reglene: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Åpner et forgrunnsvindu for bekreftelse på bankens nettsted</translation> <translation id="4406883609789734330">Direkteteksting</translation> <translation id="4406896451731180161">søkeresultater</translation> @@ -2379,6 +2382,7 @@ <translation id="5244521145258281926">Administrer Google-konto – aktiver for å administrere informasjon, personvern og sikkerhet i Google-kontoen din</translation> <translation id="5244732203286792411">Laster inn … Dette kan ta en liten stund.</translation> +<translation id="5248543496748975054">Ble ikke kortnummeret fylt ut?</translation> <translation id="5250209940322997802">«Koble til nettverk»</translation> <translation id="52517543715119994">Lær om Chrome-funksjoner</translation> <translation id="5251803541071282808">Nettsky</translation> @@ -3994,6 +3998,7 @@ <translation id="8116925261070264013">Kuttet lyd</translation> <translation id="8118489163946903409">Betalingsmåte</translation> <translation id="8118506371121007279">Gi tilbakemelding</translation> +<translation id="8120720167840853945">Denne regelen styrer ikke standardfunksjonaliteten for andre regler.</translation> <translation id="8127301229239896662">«<ph name="SOFTWARE_NAME" />» er ikke riktig installert på datamaskinen eller på nettverket. Be IT-administratoren din om å løse problemet.</translation> <translation id="8131740175452115882">Bekreft</translation> <translation id="8133495915926741232">Velg hvilke generelle emnekategorier som kan brukes til å tilpasse annonser personlig. Hvis du slår av en mer generell kategori, blokkeres også de relaterte emnene. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index 8cadb193..d6157f61 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">ପୃଷ୍ଠା ଭିଜିଟ୍ କରାଯାଇଛି</translation> <translation id="1165813024716836071">{COUNT,plural, =0{କିଛି ନାହିଁ}=1{1 ସାଇଟରୁ (ଆପଣ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସାଇନ ଇନ ହୋଇ ରହିବେ)}other{# ସାଇଟରୁ (ଆପଣ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସାଇନ ଇନ ହୋଇ ରହିବେ)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" />କୁ ଡାଉନଲୋଡ କରିବାରେ ବିଫଳ ହୋଇଛି</translation> +<translation id="1173894706177603556">ରିନେମ୍ କରନ୍ତୁ</translation> <translation id="1174644974616730562">ଏନଭେଲପ ଚାଇନିଜ #1</translation> <translation id="1174723505405632867">ଆପଣ <ph name="EMBEDDED_URL" />କୁ <ph name="TOP_LEVEL_URL" />ରେ କୁକୀ ଏବଂ ସାଇଟ ଡାଟା ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦେବା ପାଇଁ ଚାହାଁନ୍ତି କି?
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index 78ff22e..4ab0c1d 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">ਪੰਨਾ ਦੇਖਿਆ ਗਿਆ</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ਕੋਈ ਨਹੀਂ}=1{1 ਸਾਈਟ ਤੋਂ (ਤੁਸੀਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਰਹੋਗੇ)}other{# ਸਾਈਟਾਂ ਤੋਂ (ਤੁਸੀਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਰਹੋਗੇ)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ</translation> +<translation id="1173894706177603556">ਮੁੜ-ਨਾਮਕਰਨ ਕਰੋ</translation> <translation id="1174644974616730562">ਚੀਨੀ #1 ਆਕਾਰ ਦਾ ਲਿਫ਼ਾਫ਼ਾ</translation> <translation id="1174723505405632867">ਕੀ ਤੁਸੀਂ <ph name="EMBEDDED_URL" /> ਵੱਲੋਂ <ph name="TOP_LEVEL_URL" /> 'ਤੇ ਕੁਕੀਜ਼ ਅਤੇ ਸਾਈਟ ਡਾਟਾ ਵਰਤਣ ਨੂੰ ਮਨਜ਼ੂਰ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 4cfa4567..5899621 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Odwiedzono stronę</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Brak}=1{Z 1 witryny (nie nastąpi wylogowanie z konta Google)}few{Z # witryn (nie nastąpi wylogowanie z konta Google)}many{Z # witryn (nie nastąpi wylogowanie z konta Google)}other{Z # witryny (nie nastąpi wylogowanie z konta Google)}}</translation> <translation id="1167877250265821930">Nie udało się pobrać: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Zmień nazwę</translation> <translation id="1174644974616730562">Koperta chińska nr 1</translation> <translation id="1174723505405632867">Czy chcesz zezwolić stronie <ph name="EMBEDDED_URL" /> na używanie plików cookie i danych witryn ze strony <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 0ddeb23..e147d41 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Uma página é acessada</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nenhum}=1{Em 1 site. Sua Conta do Google vai continuar conectada}one{Em # site. Sua Conta do Google vai continuar conectada}other{Em # sites. Sua Conta do Google vai continuar conectada}}</translation> <translation id="1167877250265821930">Falha ao baixar <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Renomear</translation> <translation id="1174644974616730562">Envelope chinês 1</translation> <translation id="1174723505405632867">Você quer permitir que <ph name="EMBEDDED_URL" /> use cookies e dados do site em <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index b0cb6ff..149ded0 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">A página é visitada</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nenhum}=1{De 1 site (mantém a sessão iniciada na sua Conta Google)}other{De # sites (mantém a sessão iniciada na sua Conta Google)}}</translation> <translation id="1167877250265821930">Falha ao transferir <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Mudar nome</translation> <translation id="1174644974616730562">Envelope Chinese n.º 1</translation> <translation id="1174723505405632867">Permitir que <ph name="EMBEDDED_URL" /> utilize cookies e dados de sites em <ph name="TOP_LEVEL_URL" />? @@ -1205,6 +1206,7 @@ <translation id="3156511682997763015">Avançar 10 segundos</translation> <translation id="3157931365184549694">Restaurar</translation> <translation id="3158539265159265653">Disco</translation> +<translation id="3162070126914310576">Não é possível inscrever este dispositivo neste momento porque a sua unidade organizacional atingiu o limite de inscrição inicial. Contacte o seu administrador para receber assistência.</translation> <translation id="3162559335345991374">A rede Wi-Fi que está a utilizar pode exigir que visite a respetiva página de início de sessão.</translation> <translation id="316638481603975524">Pode pedir para instalar apps Web</translation> <translation id="3168744840365648658">Equipamento de rádio</translation> @@ -1940,6 +1942,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">O carregamento do ficheiro para o Microsoft OneDrive foi pausado</translation> <translation id="4390472908992056574">Borda</translation> +<translation id="4395550503472021297">Esta política está a controlar o comportamento predefinido das seguintes políticas: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Abre um pop-up para validar no Website do banco</translation> <translation id="4406883609789734330">Legendas instantâneas</translation> <translation id="4406896451731180161">resultados da pesquisa</translation> @@ -2382,6 +2385,7 @@ <translation id="5244521145258281926">Gerir Atividade da Conta Google; ative para gerir as suas informações, privacidade e segurança na Conta Google</translation> <translation id="5244732203286792411">A carregar… Pode demorar alguns minutos.</translation> +<translation id="5248543496748975054">O número do cartão não foi preenchido?</translation> <translation id="5250209940322997802">"Ligar à rede"</translation> <translation id="52517543715119994">Saiba mais acerca das funcionalidades do Chrome</translation> <translation id="5251803541071282808">Nuvem</translation> @@ -3997,6 +4001,7 @@ <translation id="8116925261070264013">Com som desativado</translation> <translation id="8118489163946903409">Método de pagamento</translation> <translation id="8118506371121007279">Envie feedback</translation> +<translation id="8120720167840853945">Esta política não está a controlar o comportamento predefinido de outras políticas.</translation> <translation id="8127301229239896662">O "<ph name="SOFTWARE_NAME" />" não foi instalado corretamente no computador ou na rede. Peça ao gestor de TI que resolva este problema.</translation> <translation id="8131740175452115882">Confirmar</translation> <translation id="8133495915926741232">Escolha as categorias amplas de tópicos que podem ser usadas para ajudar a personalizar anúncios. A desativação de uma categoria mais ampla também bloqueia os respetivos tópicos relacionados. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index bb4078f2..13e5ce95 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Este accesată o pagină</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Niciunul}=1{De pe un site (vei rămâne conectat(ă) la Contul Google)}few{De pe # site-uri (vei rămâne conectat(ă) la Contul Google)}other{De pe # de site-uri (vei rămâne conectat(ă) la Contul Google)}}</translation> <translation id="1167877250265821930">Nu s-a descărcat limba <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Redenumește</translation> <translation id="1174644974616730562">Plic chinezesc 1</translation> <translation id="1174723505405632867">Permiți ca <ph name="EMBEDDED_URL" /> să folosească date privind site-urile și cookie-uri pe <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index a214862d..ae63e45 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Посещена страница</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Нет сайтов}=1{С 1 сайта (вы останетесь в аккаунте Google)}one{С # сайта (вы останетесь в аккаунте Google)}few{С # сайтов (вы останетесь в аккаунте Google)}many{С # сайтов (вы останетесь в аккаунте Google)}other{С # сайта (вы останетесь в аккаунте Google)}}</translation> <translation id="1167877250265821930">Не удалось скачать пакет: <ph name="LANGUAGE" />.</translation> +<translation id="1173894706177603556">Переименовать</translation> <translation id="1174644974616730562">Конверт Chinese 1</translation> <translation id="1174723505405632867">Разрешить сайту <ph name="EMBEDDED_URL" /> использовать файлы cookie и данные сайта <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index e6b1b727..22530d2 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">පිටුවට පිවිසේ</translation> <translation id="1165813024716836071">{COUNT,plural, =0{කිසිත් නැත}=1{1 අඩවියකින් (ඔබ ඔබේ Google ගිණුමට පුරනය වී සිටිනු ඇත)}one{අඩවි #කින් (ඔබ ඔබේ Google ගිණුමට පුරනය වී සිටිනු ඇත)}other{අඩවි #කින් (ඔබ ඔබේ Google ගිණුමට පුරනය වී සිටිනු ඇත)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> බාගැනීමට අසමත් විය</translation> +<translation id="1173894706177603556">ප්රතිනම්</translation> <translation id="1174644974616730562">ලියුම් කවරය චීන #1</translation> <translation id="1174723505405632867">ඔබට <ph name="EMBEDDED_URL" /> හට <ph name="TOP_LEVEL_URL" /> මත කුකී සහ අඩවි දත්ත භාවිත කිරීමට ඉඩ දීමට අවශ්යද?
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 9cd4576..027c112c 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Navštívenie stránky</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Žiadny}=1{Z 1 webu (vaše prihlásenie do účtu Google zostane aktívne)}few{Z # webov (vaše prihlásenie do účtu Google zostane aktívne)}many{From # sites (you'll stay signed in to your Google Account)}other{Z # webov (vaše prihlásenie do účtu Google zostane aktívne)}}</translation> <translation id="1167877250265821930">Nepodarilo sa stiahnuť jazyk <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Premenovať</translation> <translation id="1174644974616730562">Čínska obálka č. 1</translation> <translation id="1174723505405632867">Chcete povoliť webu <ph name="EMBEDDED_URL" /> používať súbory cookie a údaje webu na <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index 5318850..da4df1c0 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Stran je obiskana</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nobeno}=1{1 spletno mesto (ostali boste prijavljeni v račun Google)}one{# spletno mesto (ostali boste prijavljeni v račun Google)}two{# spletni mesti (ostali boste prijavljeni v račun Google)}few{# spletna mesta (ostali boste prijavljeni v račun Google)}other{# spletnih mest (ostali boste prijavljeni v račun Google)}}</translation> <translation id="1167877250265821930">Prenos za jezik <ph name="LANGUAGE" /> ni uspel</translation> +<translation id="1173894706177603556">Preimenuj</translation> <translation id="1174644974616730562">Kitajska kuverta št. 1</translation> <translation id="1174723505405632867">Ali želite za <ph name="EMBEDDED_URL" /> omogočiti uporabo piškotkov in podatkov spletnih mest na <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index 5996e57..5a898c0 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Faqja është vizituar</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Asnjë}=1{Nga 1 sajt (do të qëndrosh i identifikuar në "Llogarinë tënde të Google)}other{Nga # sajte (do të qëndrosh i identifikuar në "Llogarinë tënde të Google)}}</translation> <translation id="1167877250265821930">Shkarkimi i gjuhës <ph name="LANGUAGE" /> dështoi</translation> +<translation id="1173894706177603556">Riemërto</translation> <translation id="1174644974616730562">Zarf kinez nr. 1</translation> <translation id="1174723505405632867">Dëshiron ta lejosh <ph name="EMBEDDED_URL" /> të përdorë kukit dhe të dhënat e sajtit në <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index 06b3402b..3a36f379 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Stranica je posećena</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Nijedan}=1{Sa 1 sajta (ostaćete prijavljeni na Google nalog)}one{Sa # sajta (ostaćete prijavljeni na Google nalog)}few{Sa # sajta (ostaćete prijavljeni na Google nalog)}other{Sa # sajtova (ostaćete prijavljeni na Google nalog)}}</translation> <translation id="1167877250265821930">Preuzimanje jezika <ph name="LANGUAGE" /> nije uspelo</translation> +<translation id="1173894706177603556">Preimenuj</translation> <translation id="1174644974616730562">Kineska koverta br. 1</translation> <translation id="1174723505405632867">Želite li da dozvolite da <ph name="EMBEDDED_URL" /> koristi kolačiće i podatke o sajtovima na <ph name="TOP_LEVEL_URL" />? @@ -1205,6 +1206,7 @@ <translation id="3156511682997763015">Premotaj 10 sekundi unapred</translation> <translation id="3157931365184549694">Ponovo otvori</translation> <translation id="3158539265159265653">Disk</translation> +<translation id="3162070126914310576">Ovaj uređaj trenutno ne može da se registruje jer je organizaciona jedinica dostigla početno ograničenje za registracije. Zatražite pomoć od administratora.</translation> <translation id="3162559335345991374">WiFi mreža koju koristite će možda zahtevati da posetite stranicu za prijavljivanje.</translation> <translation id="316638481603975524">Može da zatraži instaliranje veb-aplikacija</translation> <translation id="3168744840365648658">Radio oprema</translation> @@ -1940,6 +1942,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Otpremanje fajla u Microsoft OneDrive je pauzirano</translation> <translation id="4390472908992056574">Obod</translation> +<translation id="4395550503472021297">Ove smernice kontrolišu podrazumevano ponašanje sledećih smernica: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Otvara iskačući prozor za verifikaciju na veb-sajtu banke</translation> <translation id="4406883609789734330">Titl uživo</translation> <translation id="4406896451731180161">rezultati pretrage</translation> @@ -2382,6 +2385,7 @@ <translation id="5244521145258281926">Upravljaj Google nalogom, aktivirajte ga da biste upravljali informacijama, privatnošću i bezbednošću na Google nalogu</translation> <translation id="5244732203286792411">Učitava se… Ovo će možda malo potrajati.</translation> +<translation id="5248543496748975054">Broj kartice nije unet?</translation> <translation id="5250209940322997802">„Povežite se na mrežu“</translation> <translation id="52517543715119994">Saznajte više o Chrome funkcijama</translation> <translation id="5251803541071282808">Klaud</translation> @@ -3997,6 +4001,7 @@ <translation id="8116925261070264013">Zvuk je isključen</translation> <translation id="8118489163946903409">Način plaćanja</translation> <translation id="8118506371121007279">Pošaljite povratne informacije</translation> +<translation id="8120720167840853945">Ove smernice ne kontrolišu podrazumevano ponašanje drugih smernica.</translation> <translation id="8127301229239896662">Softver „<ph name="SOFTWARE_NAME" />“ nije pravilno instaliran na računaru ili mreži. Zatražite od IT administratora da reši ovaj problem.</translation> <translation id="8131740175452115882">Potvrdi</translation> <translation id="8133495915926741232">Odaberite široke kategorije tema koje mogu da se koriste za personalizaciju oglasa. Ako isključite širu kategoriju, blokiraćete i srodne teme. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index 320aab3..ee31464 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Страница је посећена</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Ниједан}=1{Са 1 сајта (остаћете пријављени на Google налог)}one{Са # сајта (остаћете пријављени на Google налог)}few{Са # сајта (остаћете пријављени на Google налог)}other{Са # сајтова (остаћете пријављени на Google налог)}}</translation> <translation id="1167877250265821930">Преузимање језика <ph name="LANGUAGE" /> није успело</translation> +<translation id="1173894706177603556">Преименуј</translation> <translation id="1174644974616730562">Кинеска коверта бр. 1</translation> <translation id="1174723505405632867">Желите ли да дозволите да <ph name="EMBEDDED_URL" /> користи колачиће и податке о сајтовима на <ph name="TOP_LEVEL_URL" />? @@ -1205,6 +1206,7 @@ <translation id="3156511682997763015">Премотај 10 секунди унапред</translation> <translation id="3157931365184549694">Поново отвори</translation> <translation id="3158539265159265653">Диск</translation> +<translation id="3162070126914310576">Овај уређај тренутно не може да се региструје јер је организациона јединица достигла почетно ограничење за регистрације. Затражите помоћ од администратора.</translation> <translation id="3162559335345991374">WiFi мрежа коју користите ће можда захтевати да посетите страницу за пријављивање.</translation> <translation id="316638481603975524">Може да затражи инсталирање веб-апликација</translation> <translation id="3168744840365648658">Радио опрема</translation> @@ -1940,6 +1942,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Отпремање фајла у Microsoft OneDrive је паузирано</translation> <translation id="4390472908992056574">Обод</translation> +<translation id="4395550503472021297">Ове смернице контролишу подразумевано понашање следећих смерница: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Отвара искачући прозор за верификацију на веб-сајту банке</translation> <translation id="4406883609789734330">Титл уживо</translation> <translation id="4406896451731180161">резултати претраге</translation> @@ -2382,6 +2385,7 @@ <translation id="5244521145258281926">Управљај Google налогом, активирајте га да бисте управљали информацијама, приватношћу и безбедношћу на Google налогу</translation> <translation id="5244732203286792411">Учитава се… Ово ће можда мало потрајати.</translation> +<translation id="5248543496748975054">Број картице није унет?</translation> <translation id="5250209940322997802">„Повежите се на мрежу“</translation> <translation id="52517543715119994">Сазнајте више о Chrome функцијама</translation> <translation id="5251803541071282808">Клауд</translation> @@ -3997,6 +4001,7 @@ <translation id="8116925261070264013">Звук је искључен</translation> <translation id="8118489163946903409">Начин плаћања</translation> <translation id="8118506371121007279">Пошаљите повратне информације</translation> +<translation id="8120720167840853945">Ове смернице не контролишу подразумевано понашање других смерница.</translation> <translation id="8127301229239896662">Софтвер „<ph name="SOFTWARE_NAME" />“ није правилно инсталиран на рачунару или мрежи. Затражите од ИТ администратора да реши овај проблем.</translation> <translation id="8131740175452115882">Потврди</translation> <translation id="8133495915926741232">Одаберите широке категорије тема које могу да се користе за персонализацију огласа. Ако искључите ширу категорију, блокираћете и сродне теме. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index b146fd7..271d7cf 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">En sida besöks</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Inga}=1{Från 1 webbplats (du förblir inloggad på Google-kontot)}other{Från # webbplatser (du förblir inloggad på Google-kontot)}}</translation> <translation id="1167877250265821930">Det gick inte att ladda ned <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Ändra namn</translation> <translation id="1174644974616730562">Kinesiskt nr 1-kuvert</translation> <translation id="1174723505405632867">Vill du tillåta att <ph name="EMBEDDED_URL" /> använder cookies och webbplatsdata på <ph name="TOP_LEVEL_URL" />? @@ -1937,6 +1938,7 @@ <translation id="4384395682990721132">A4 x 3</translation> <translation id="4387692837058041921">Filuppladdning till Microsoft OneDrive har pausats</translation> <translation id="4390472908992056574">Brim</translation> +<translation id="4395550503472021297">Den här principen styr standardbeteendet för följande principer: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Öppnar ett popup-fönster för verifiering på bankens webbplats</translation> <translation id="4406883609789734330">Live Caption</translation> <translation id="4406896451731180161">sökresultat</translation> @@ -3995,6 +3997,7 @@ <translation id="8116925261070264013">Ljudet avstängt</translation> <translation id="8118489163946903409">Betalningsmetod</translation> <translation id="8118506371121007279">Ge feedback</translation> +<translation id="8120720167840853945">Den här principen styr inte standardbeteendet för andra principer.</translation> <translation id="8127301229239896662"><ph name="SOFTWARE_NAME" /> har inte installerats korrekt på datorn eller nätverket. Be IT-administratören om hjälp med problemet.</translation> <translation id="8131740175452115882">Bekräfta</translation> <translation id="8133495915926741232">Välj vilka breda kategorier av ämnen som kan användas för att anpassa annonser. Om du inaktiverar en bredare kategori blockeras även relaterade ämnen. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index f08a1f8..885dad36 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Ukurasa unatembelewa</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Hamna}=1{Kwenye tovuti 1 (utasalia katika Akaunti yako ya Google)}other{Kwenye tovuti # (utasalia katika Akaunti yako ya Google)}}</translation> <translation id="1167877250265821930">Imeshindwa kupakua <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Ipe jina jipya</translation> <translation id="1174644974616730562">Bahasha ya muundo wa Kichina ya ukubwa wa #1</translation> <translation id="1174723505405632867">Ungependa kuruhusu <ph name="EMBEDDED_URL" /> itumie data ya tovuti na vidakuzi kwenye <ph name="TOP_LEVEL_URL" />? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">Sogeza mbele kwa sekunde 10</translation> <translation id="3157931365184549694">Rejesha</translation> <translation id="3158539265159265653">Diski</translation> +<translation id="3162070126914310576">Kifaa hiki hakiwezi kuandikishwa kwa sasa kwa sababu kitengo cha shirika lako kimefikia kikomo chake cha kwanza cha uandikishaji. Wasiliana na msimamizi wako ili upate usaidizi.</translation> <translation id="3162559335345991374">Wi-Fi unayotumia inaweza kukuhitaji kutembelea ukurasa wake wa kuingia katika akaunti.</translation> <translation id="316638481603975524">Inaweza kuomba idhini ya kuweka programu za wavuti kwenye kifaa</translation> <translation id="3168744840365648658">Vifaa vya Redio</translation> @@ -1937,6 +1939,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Mchakato wa kupakia faili kwenye Microsoft OneDrive umesitishwa</translation> <translation id="4390472908992056574">Pomoni</translation> +<translation id="4395550503472021297">Sera hii inadhibiti mwenendo chaguomsingi wa sera zifuatazo: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Hufungua dirisha ibukizi ili kuthibitisha kwenye tovuti ya benki yako</translation> <translation id="4406883609789734330">Manukuu Papo Hapo</translation> <translation id="4406896451731180161">matokeo ya utafutaji</translation> @@ -2379,6 +2382,7 @@ <translation id="5244521145258281926">Kitufe cha 'Dhibiti Akaunti ya Google', washa ili udhibiti maelezo, faragha na usalama wako katika Akaunti yako ya Google</translation> <translation id="5244732203286792411">Inapakia... Hatua hii inaweza kuchukua dakika moja.</translation> +<translation id="5248543496748975054">Je, namba ya kadi haijajazwa?</translation> <translation id="5250209940322997802">"Unganisha kwenye mtandao"</translation> <translation id="52517543715119994">Pata maelezo kuhusu vipengele vya Chrome</translation> <translation id="5251803541071282808">Wingu</translation> @@ -3993,6 +3997,7 @@ <translation id="8116925261070264013">Imezimwa</translation> <translation id="8118489163946903409">Njia ya kulipa</translation> <translation id="8118506371121007279">Toa maoni</translation> +<translation id="8120720167840853945">Sera hii haidhibiti mwenendo chaguomsingi wa sera nyingine zozote.</translation> <translation id="8127301229239896662">Haikusakinisha "<ph name="SOFTWARE_NAME" />" kwa njia sahihi kwenye mtandao au kompyuta yako. Mweleze msimamizi wako wa TEHAMA asuluhishe tatizo hili.</translation> <translation id="8131740175452115882">Thibitisha</translation> <translation id="8133495915926741232">Chagua ni aina gani pana za mada zinazoweza kutumiwa kusaidia kuwekea matangazo mapendeleo. Hatua ya kuzima aina pana zaidi, itazuia pia mada zinazohusiana. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 174d4ca..6fe4a031 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">பக்கத்தைப் பார்வையிடுவது</translation> <translation id="1165813024716836071">{COUNT,plural, =0{எதுவுமில்லை}=1{1 தளத்திலிருந்து (உங்கள் Google கணக்கில் உள்நுழைந்த நிலையிலேயே இருப்பீர்கள்)}other{# தளங்களில் இருந்து (உங்கள் Google கணக்கில் உள்நுழைந்த நிலையிலேயே இருப்பீர்கள்)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ஐப் பதிவிறக்க முடியவில்லை</translation> +<translation id="1173894706177603556">பெயர் மாற்று</translation> <translation id="1174644974616730562">என்வெலப் சைனீஸ் #1</translation> <translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" /> தளத்தில் உள்ள குக்கீகளையும் தளத்தின் தரவையும் பயன்படுத்த <ph name="EMBEDDED_URL" /> தளத்தை அனுமதிக்க விரும்புகிறீர்களா?
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index e7bf206..3ef5c8a8 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">పేజీని సందర్శించినప్పుడు</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ఏవీ లేవు}=1{1 సైట్ నుండి (మీ Google ఖాతాకు సైన్ ఇన్ అయి ఉంటారు)}other{# సైట్ల నుండి (మీ Google ఖాతాకు సైన్ ఇన్ చేసి ఉంటారు)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> డౌన్లోడ్ చేయడం విఫలమైంది</translation> +<translation id="1173894706177603556">పేరుమార్చు</translation> <translation id="1174644974616730562">ఎన్వలప్ చైనీస్ #1</translation> <translation id="1174723505405632867"><ph name="TOP_LEVEL_URL" />లోని కుక్కీలను, సైట్ డేటాను ఉపయోగించడానికి మీరు <ph name="EMBEDDED_URL" />ను అనుమతించాలనుకుంటున్నారా? @@ -1200,6 +1201,7 @@ <translation id="3156511682997763015">10 సెకన్లు ఫార్వర్డ్ చేయండి</translation> <translation id="3157931365184549694">పునరుద్ధరించు</translation> <translation id="3158539265159265653">డిస్క్</translation> +<translation id="3162070126914310576">మీ సంస్థ యూనిట్ దాని ప్రారంభ ఎన్రోల్మెంట్ పరిమితిని చేరుకున్నందున ఈ పరికరాన్ని ప్రస్తుతం ఎన్రోల్ చేయడం సాధ్యం కాదు. సహాయం కోసం మీ అడ్మినిస్ట్రేటర్ను సంప్రదించండి.</translation> <translation id="3162559335345991374">మీరు ఉపయోగిస్తున్న Wi-Fiకి మీరు దాని లాగిన్ పేజీని సందర్శించడం అవసరం.</translation> <translation id="316638481603975524">వెబ్ యాప్లను ఇన్స్టాల్ చేయమని అడగవచ్చు</translation> <translation id="3168744840365648658">రేడియో ఎక్విప్మెంట్</translation> @@ -1935,6 +1937,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Microsoft OneDriveకు అప్లోడ్ చేసిన ఫైల్ పాజ్ అయింది</translation> <translation id="4390472908992056574">బ్రిమ్</translation> +<translation id="4395550503472021297">ఈ పాలసీ, కింద పేర్కొన్న పాలసీల ఆటోమేటిక్ ప్రవర్తనను కంట్రోల్ చేస్తోంది: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">మీ బ్యాంక్ వెబ్సైట్లో వెరిఫై చేయడానికి పాప్-అప్ను తెరుస్తుంది</translation> <translation id="4406883609789734330">లైవ్ క్యాప్షన్</translation> <translation id="4406896451731180161">శోధన ఫలితాలు</translation> @@ -2377,6 +2380,7 @@ <translation id="5244521145258281926">'Google ఖాతాను మేనేజ్ చేయండి' బటన్, మీ Google ఖాతాలో మీ సమాచారాన్ని, గోప్యతను, ఇంకా సెక్యూరిటీని మేనేజ్ చేయడం కోసం దీన్ని యాక్టివేట్ చేయండి</translation> <translation id="5244732203286792411">లోడ్ అవుతోంది... దీనికి ఒక నిమిషం పట్టవచ్చు.</translation> +<translation id="5248543496748975054">కార్డ్ నంబర్ను ఫిల్ చేయలేదా?</translation> <translation id="5250209940322997802">"నెట్వర్క్కు కనెక్ట్ చేయండి"</translation> <translation id="52517543715119994">Chrome ఫీచర్ల గురించి తెలుసుకోండి</translation> <translation id="5251803541071282808">క్లౌడ్</translation> @@ -3993,6 +3997,7 @@ <translation id="8116925261070264013">మ్యూట్ చేసినవి</translation> <translation id="8118489163946903409">పేమెంట్ ఆప్షన్</translation> <translation id="8118506371121007279">ఫీడ్బ్యాక్ తెలియజేయండి</translation> +<translation id="8120720167840853945">ఈ పాలసీ ఏ ఇతర విధానాల ఆటోమేటిక్ ప్రవర్తననూ కంట్రోల్ చేయడం లేదు.</translation> <translation id="8127301229239896662">మీ కంప్యూటర్ లేదా నెట్వర్క్లో "<ph name="SOFTWARE_NAME" />" సరిగ్గా ఇన్స్టాల్ కాలేదు. ఈ సమస్యను పరిష్కరించమని మీ IT నిర్వాహకులను కోరండి.</translation> <translation id="8131740175452115882">నిర్ధారించు</translation> <translation id="8133495915926741232">యాడ్లను వ్యక్తిగతీకరించడంలో సహాయపడటానికి ఏ విస్తృత కేటగిరీలు టాపిక్లను ఉపయోగించవచ్చో ఎంచుకోండి. విస్తృత కేటగిరీని ఆఫ్ చేయడం వలన దాని సంబంధిత టాపిక్లు కూడా బ్లాక్ చేయబడతాయి. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index a98b902..54f22bf 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">มีการเข้าชมหน้าเว็บ</translation> <translation id="1165813024716836071">{COUNT,plural, =0{ไม่มี}=1{จาก 1 เว็บไซต์ (แต่คุณจะยังลงชื่อเข้าใช้บัญชี Google อยู่)}other{จาก # เว็บไซต์ (คุณจะยังลงชื่อเข้าใช้บัญชี Google อยู่)}}</translation> <translation id="1167877250265821930">ดาวน์โหลด<ph name="LANGUAGE" />ไม่สำเร็จ</translation> +<translation id="1173894706177603556">เปลี่ยนชื่อ</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867">คุณต้องการอนุญาตให้ <ph name="EMBEDDED_URL" /> ใช้คุกกี้และข้อมูลเว็บไซต์ใน <ph name="TOP_LEVEL_URL" /> ไหม @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">กรอไปข้างหน้า 10 วินาที</translation> <translation id="3157931365184549694">คืนค่า</translation> <translation id="3158539265159265653">ดิสก์</translation> +<translation id="3162070126914310576">ลงทะเบียนอุปกรณ์นี้ไม่ได้ในตอนนี้เนื่องจากหน่วยขององค์กรถึงขีดจำกัดการลงทะเบียนเริ่มต้นแล้ว โปรดติดต่อผู้ดูแลระบบเพื่อขอความช่วยเหลือ</translation> <translation id="3162559335345991374">Wi-Fi ที่คุณใช้อาจต้องการให้คุณไปที่หน้าการเข้าสู่ระบบ</translation> <translation id="316638481603975524">สามารถขอติดตั้งเว็บแอปได้</translation> <translation id="3168744840365648658">อุปกรณ์วิทยุ</translation> @@ -1936,6 +1938,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">หยุดอัปโหลดไฟล์ไปยัง Microsoft OneDrive ชั่วคราว</translation> <translation id="4390472908992056574">Brim</translation> +<translation id="4395550503472021297">นโยบายนี้กำลังควบคุมลักษณะการทำงานเริ่มต้นของนโยบายต่อไปนี้ <ph name="POLICIES" /></translation> <translation id="4397978002248035985">เปิดป๊อปอัปเพื่อยืนยันในเว็บไซต์ของธนาคาร</translation> <translation id="4406883609789734330">คำบรรยายสด</translation> <translation id="4406896451731180161">ผลการค้นหา</translation> @@ -2378,6 +2381,7 @@ <translation id="5244521145258281926">จัดการบัญชี Google เปิดใช้งานเพื่อจัดการข้อมูล ความเป็นส่วนตัว และการรักษาความปลอดภัยในบัญชี Google ของคุณ</translation> <translation id="5244732203286792411">กำลังโหลด... การดำเนินการนี้อาจใช้เวลาสักครู่</translation> +<translation id="5248543496748975054">ระบบไม่ได้กรอกหมายเลขบัตรเครดิตใช่ไหม</translation> <translation id="5250209940322997802">"เชื่อมต่อกับเครือข่าย"</translation> <translation id="52517543715119994">ดูข้อมูลเกี่ยวกับฟีเจอร์ของ Chrome</translation> <translation id="5251803541071282808">ระบบคลาวด์</translation> @@ -3994,6 +3998,7 @@ <translation id="8116925261070264013">ปิดเสียง</translation> <translation id="8118489163946903409">วิธีการชำระเงิน</translation> <translation id="8118506371121007279">แสดงความคิดเห็น</translation> +<translation id="8120720167840853945">นโยบายนี้ไม่ได้ควบคุมลักษณะการทำงานเริ่มต้นของนโยบายอื่นใด</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" ไม่ได้ติดตั้งในคอมพิวเตอร์หรือเครือข่ายอย่างถูกต้อง โปรดขอให้ผู้ดูแลระบบ IT แก้ไขปัญหานี้</translation> <translation id="8131740175452115882">ยืนยัน</translation> <translation id="8133495915926741232">เลือกหมวดหมู่กว้างๆ ของหัวข้อที่สามารถใช้ในการปรับโฆษณาตามโปรไฟล์ของผู้ใช้ การปิดหมวดหมู่ที่กว้างขึ้นจะบล็อกหัวข้อที่เกี่ยวข้องด้วย <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 8b8a708..66f3f9e 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Sayfa ziyaret edildi</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Yok}=1{1 siteden (Google Hesabınızın oturumu açık kalır)}other{# siteden (Google Hesabınızın oturumu açık kalır)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> indirilemedi</translation> +<translation id="1173894706177603556">Yeniden adlandır</translation> <translation id="1174644974616730562">Zarf Chinese #1</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> sitesinin, <ph name="TOP_LEVEL_URL" /> üzerinde çerezleri ve site verilerini kullanmasına izin vermek istiyor musunuz?
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 809555c..05786277 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Відвідано сторінку</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Немає}=1{З 1 сайту (ви залишитеся в обліковому записі Google)}one{З # сайту (ви залишитеся в обліковому записі Google)}few{З # сайтів (ви залишитеся в обліковому записі Google)}many{З # сайтів (ви залишитеся в обліковому записі Google)}other{З # сайту (ви залишитеся в обліковому записі Google)}}</translation> <translation id="1167877250265821930">Не вдалося завантажити мовний пакет (<ph name="LANGUAGE" />)</translation> +<translation id="1173894706177603556">Перейменувати</translation> <translation id="1174644974616730562">Конверт Chinese № 1</translation> <translation id="1174723505405632867">Надати сайту <ph name="EMBEDDED_URL" /> доступ до файлів cookie й даних на сайті <ph name="TOP_LEVEL_URL" />?
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 9fc4d3c..1ab6496 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">صفحہ کا ملاحظہ کیا جاتا ہے</translation> <translation id="1165813024716836071">{COUNT,plural, =0{کوئی نہیں}=1{1 سائٹ سے (آپ اپنے Google اکاؤنٹ میں سائن ان رہیں گے)}other{# سائٹس سے (آپ اپنے Google اکاؤنٹ میں سائن ان رہیں گے)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" /> ڈاؤن لوڈ کرنے میں ناکام</translation> +<translation id="1173894706177603556">نام بدلیں</translation> <translation id="1174644974616730562">Chinese #1 لفافہ</translation> <translation id="1174723505405632867">کیا آپ <ph name="EMBEDDED_URL" /> کو <ph name="TOP_LEVEL_URL" /> پر کوکیز اور سائٹ کا ڈيٹا استعمال کرنے کی اجازت دینا چاہتے ہیں؟
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb index 31a63eb9..b69fec4 100644 --- a/components/strings/components_strings_uz.xtb +++ b/components/strings/components_strings_uz.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Sahifa ochilishi</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Hech qanday}=1{1 ta saytdan (Google hisobingizga kirgan holda qolasiz)}other{# ta saytdan (Google hisobingizga kirgan holda qolasiz)}}</translation> <translation id="1167877250265821930">Yuklab olinmadi: <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Qayta nomlash</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867"><ph name="EMBEDDED_URL" /> sayti <ph name="TOP_LEVEL_URL" /> cookie-fayllari va sayt maʼlumotlaridan foydalanishiga ruxsat berilsinmi?
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 782a5f21..98c7d246 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Trang đã truy cập</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Không có}=1{Từ 1 trang web (bạn sẽ vẫn duy trì trạng thái đăng nhập vào Tài khoản Google)}other{Từ # trang web (bạn sẽ vẫn duy trì trạng thái đăng nhập vào Tài khoản Google)}}</translation> <translation id="1167877250265821930">Không tải <ph name="LANGUAGE" /> xuống được</translation> +<translation id="1173894706177603556">Đổi tên</translation> <translation id="1174644974616730562">Phong bì kiểu Trung số 1</translation> <translation id="1174723505405632867">Bạn có muốn cho phép <ph name="EMBEDDED_URL" /> sử dụng cookie và dữ liệu trang web trên <ph name="TOP_LEVEL_URL" /> không? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">Tua đi 10 giây</translation> <translation id="3157931365184549694">Khôi phục</translation> <translation id="3158539265159265653">Đĩa</translation> +<translation id="3162070126914310576">Hiện không thể đăng ký thiết bị này vì đơn vị tổ chức của bạn đã đạt đến giới hạn đăng ký ban đầu. Hãy liên hệ với quản trị viên để được trợ giúp.</translation> <translation id="3162559335345991374">Wi-Fi mà bạn đang sử dụng có thể yêu cầu bạn phải truy cập trang đăng nhập của mạng đó.</translation> <translation id="316638481603975524">Có thể yêu cầu cài đặt ứng dụng web</translation> <translation id="3168744840365648658">Thiết bị vô tuyến</translation> @@ -1937,6 +1939,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">Đã tạm dừng tải tệp lên Microsoft OneDrive</translation> <translation id="4390472908992056574">Vành</translation> +<translation id="4395550503472021297">Chính sách này đang kiểm soát hoạt động mặc định của các chính sách sau: <ph name="POLICIES" /></translation> <translation id="4397978002248035985">Mở cửa sổ bật lên để xác minh trên trang web của ngân hàng</translation> <translation id="4406883609789734330">Phụ đề trực tiếp</translation> <translation id="4406896451731180161">kết quả tìm kiếm</translation> @@ -2379,6 +2382,7 @@ <translation id="5244521145258281926">Nút Quản lý Tài khoản Google, hãy nhấn nút này để quản lý thông tin, quyền riêng tư và chế độ bảo mật trong Tài khoản Google của bạn</translation> <translation id="5244732203286792411">Đang tải... Quá trình này có thể mất ít phút.</translation> +<translation id="5248543496748975054">Số thẻ chưa được điền?</translation> <translation id="5250209940322997802">"Kết nối với mạng"</translation> <translation id="52517543715119994">Tìm hiểu các tính năng của Chrome</translation> <translation id="5251803541071282808">Đám mây</translation> @@ -3995,6 +3999,7 @@ <translation id="8116925261070264013">Đã ẩn</translation> <translation id="8118489163946903409">Phương thức thanh toán</translation> <translation id="8118506371121007279">Gửi phản hồi</translation> +<translation id="8120720167840853945">Chính sách này không kiểm soát hoạt động mặc định của bất kỳ chính sách nào khác.</translation> <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" đã được cài đặt không đúng trên máy tính hoặc mạng của bạn. Hãy yêu cầu quản trị viên CNTT của bạn giải quyết vấn đề này.</translation> <translation id="8131740175452115882">Xác nhận</translation> <translation id="8133495915926741232">Chọn những loại chủ đề chính mà các trang web có thể dùng để cá nhân hoá quảng cáo. Nếu bạn tắt một chủ đề chính thì các chủ đề có liên quan cũng sẽ bị chặn. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index e1075b9..1364bde 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">访问过的网页</translation> <translation id="1165813024716836071">{COUNT,plural, =0{无}=1{来自 1 个网站(您的 Google 账号仍会保持登录状态)}other{来自 # 个网站(您的 Google 账号仍会保持登录状态)}}</translation> <translation id="1167877250265821930"><ph name="LANGUAGE" />下载失败</translation> +<translation id="1173894706177603556">重命名</translation> <translation id="1174644974616730562">中式 #1 信封</translation> <translation id="1174723505405632867">您想允许 <ph name="EMBEDDED_URL" /> 在 <ph name="TOP_LEVEL_URL" /> 上使用 Cookie 和网站数据吗? @@ -3819,7 +3820,7 @@ <translation id="7791543448312431591">添加</translation> <translation id="7798389633136518089">此政策不是由云端来源设置,因此已被忽略。</translation> <translation id="7800304661137206267">该连接是使用 <ph name="CIPHER" /> 进行加密的,同时使用 <ph name="MAC" /> 进行讯息身份验证并使用 <ph name="KX" /> 作为密钥交换机制。</translation> -<translation id="7800977246388195491">Chrome 会根据您近期的浏览记录来推测您感兴趣的主题。此外,您访问的网站也能判断您的喜好。之后,网站可请求获取这类信息,以便向您展示个性化广告。您可以选择允许使用哪些主题和网站向您展示广告。</translation> +<translation id="7800977246388195491">Chrome 会根据您近期的浏览记录来记录您感兴趣的主题。此外,您访问的网站也能反映出您的喜好。之后,网站可请求获取这类信息,以便向您展示个性化广告。您可以选择要根据哪些主题和网站向您展示广告。</translation> <translation id="7802523362929240268">网站是合规的</translation> <translation id="7802989406998618639">输入<ph name="SIDE_OF_CARD" />的 <ph name="NUMBER_OF_DIGITS" /> 位数安全码,以便银行验证您的身份</translation> <translation id="780301667611848630">不用了,谢谢</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index acb815b..2000d26 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">瀏覽網頁</translation> <translation id="1165813024716836071">{COUNT,plural, =0{無}=1{來自 1 個網站 (Google 帳戶會保持登入狀態)}other{來自 # 個網站 (Google 帳戶會保持登入狀態)}}</translation> <translation id="1167877250265821930">無法下載<ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">重新命名</translation> <translation id="1174644974616730562">Chinese #1 信封</translation> <translation id="1174723505405632867">您要允許 <ph name="EMBEDDED_URL" /> 使用 <ph name="TOP_LEVEL_URL" /> 上的 Cookie 和網站資料嗎? @@ -1203,6 +1204,7 @@ <translation id="3156511682997763015">快轉 10 秒</translation> <translation id="3157931365184549694">還原</translation> <translation id="3158539265159265653">光碟</translation> +<translation id="3162070126914310576">你的機構單位達到初始註冊限制,因此這部裝置目前無法註冊。請聯絡管理員尋求協助。</translation> <translation id="3162559335345991374">目前使用的 Wi-Fi 可能要求您前往其登入頁面。</translation> <translation id="316638481603975524">可要求安裝網絡應用程式</translation> <translation id="3168744840365648658">無線電設備</translation> @@ -1936,6 +1938,7 @@ <translation id="4384395682990721132">A4x3</translation> <translation id="4387692837058041921">已暫停上載檔案到 Microsoft OneDrive</translation> <translation id="4390472908992056574">圍邊</translation> +<translation id="4395550503472021297">此政策會控制以下政策的預設行為:<ph name="POLICIES" /></translation> <translation id="4397978002248035985">開啟彈出式視窗,將你導向至銀行網站進行驗證</translation> <translation id="4406883609789734330">即時字幕</translation> <translation id="4406896451731180161">搜尋結果</translation> @@ -2378,6 +2381,7 @@ <translation id="5244521145258281926">管理 Google 帳戶按鈕,啟動之後就可以管理 Google 帳戶嘅資料、私隱權同安全性</translation> <translation id="5244732203286792411">正在載入… 可能需時一分鐘。</translation> +<translation id="5248543496748975054">未填入卡號嗎?</translation> <translation id="5250209940322997802">「連線至網絡」</translation> <translation id="52517543715119994">瞭解 Chrome 的功能</translation> <translation id="5251803541071282808">雲端</translation> @@ -3994,6 +3998,7 @@ <translation id="8116925261070264013">已設為靜音的網站</translation> <translation id="8118489163946903409">付款方式</translation> <translation id="8118506371121007279">提供意見</translation> +<translation id="8120720167840853945">此政策不會控制任何其他政策的預設行為。</translation> <translation id="8127301229239896662">無法在您的電腦或網絡上正確安裝「<ph name="SOFTWARE_NAME" />」。請要求您的 IT 管理員解決此問題。</translation> <translation id="8131740175452115882">確定</translation> <translation id="8133495915926741232">選擇系統可根據哪些廣泛的主題類別放送個人化廣告。如果封鎖廣泛類別,系統亦會一併封鎖相關主題。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index e0bdf4c..494e1505 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">已造訪網頁</translation> <translation id="1165813024716836071">{COUNT,plural, =0{無}=1{1 個網站 (Google 帳戶會保持登入狀態)}other{# 個網站 (Google 帳戶會保持登入狀態)}}</translation> <translation id="1167877250265821930">無法下載<ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">重新命名</translation> <translation id="1174644974616730562">Envelope Chinese #1</translation> <translation id="1174723505405632867">你要允許 <ph name="EMBEDDED_URL" /> 使用 <ph name="TOP_LEVEL_URL" /> 上的 Cookie 和網站資料嗎?
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index d2695b6..8c6ea6a9 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -91,6 +91,7 @@ <translation id="1165174597379888365">Ikhasi livakashelwe</translation> <translation id="1165813024716836071">{COUNT,plural, =0{Lutho}=1{Kusuka kusayithi elingu-1 (uzohlala ungene ngemvume ku-Google Account yakho)}one{Kusuka kumasayithi angu-# (uzohlala ungene ngemvume ku-Google Account yakho)}other{Kusuka kumasayithi angu-# (uzohlala ungene ngemvume ku-Google Account yakho)}}</translation> <translation id="1167877250265821930">Yehlulekile ukudawuniloda <ph name="LANGUAGE" /></translation> +<translation id="1173894706177603556">Qamba kabusha</translation> <translation id="1174644974616730562">Imvilophu ye-Chinese #1</translation> <translation id="1174723505405632867">Ingabe uyafuna ukuvumela i-<ph name="EMBEDDED_URL" /> ukuthi isebenzise amakhukhi nedatha yesayithi ku-<ph name="TOP_LEVEL_URL" />?
diff --git a/components/supervised_user/core/common/features.cc b/components/supervised_user/core/common/features.cc index cdda5f4..eccfc92 100644 --- a/components/supervised_user/core/common/features.cc +++ b/components/supervised_user/core/common/features.cc
@@ -180,10 +180,6 @@ base::FEATURE_DISABLED_BY_DEFAULT); #endif -BASE_FEATURE(kUseFamilyMemberRolePrefsForFeedback, - "UseFamilyMemberRolePrefsForFeedback", - base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kClassifyUrlOnProcessResponseEvent, "ClassifyUrlOnProcessResponseEvent", base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/components/supervised_user/core/common/features.h b/components/supervised_user/core/common/features.h index 88d292c..db78b22 100644 --- a/components/supervised_user/core/common/features.h +++ b/components/supervised_user/core/common/features.h
@@ -119,10 +119,6 @@ kReplaceSupervisionSystemCapabilitiesWithAccountCapabilitiesOnIOS); #endif -// Uses `prefs::kFamilyLinkUserMemberRole` to populate the family member role -// for feedback if it is available. -BASE_DECLARE_FEATURE(kUseFamilyMemberRolePrefsForFeedback); - // Alters the behavior of the supervised_user::SupervisedUserNavigationThrottle // so that the decision whether to proceed or cancel is made when the response // is ready to be rendered, rather than before the request (or any redirect) is
diff --git a/components/test/data/autofill/heuristics-json/internal b/components/test/data/autofill/heuristics-json/internal index d00d0a2..868d3dc 160000 --- a/components/test/data/autofill/heuristics-json/internal +++ b/components/test/data/autofill/heuristics-json/internal
@@ -1 +1 @@ -Subproject commit d00d0a2480ff55cda6d6cc41bcecc615328860a7 +Subproject commit 868d3dca11f4ecca239de85e60f46de0b10ad106
diff --git a/components/viz/common/resources/shared_image_format_utils.cc b/components/viz/common/resources/shared_image_format_utils.cc index 215525f..0346a280 100644 --- a/components/viz/common/resources/shared_image_format_utils.cc +++ b/components/viz/common/resources/shared_image_format_utils.cc
@@ -15,8 +15,8 @@ namespace viz { -SkColorType ToClosestSkColorType(bool gpu_compositing, - SharedImageFormat format) { +SkColorType ToClosestSkColorTypeDeprecated(bool gpu_compositing, + SharedImageFormat format) { CHECK(format.is_single_plane()); if (!gpu_compositing) { @@ -28,6 +28,12 @@ return kN32_SkColorType; } + return ToClosestSkColorType(format); +} + +SkColorType ToClosestSkColorType(SharedImageFormat format) { + CHECK(format.is_single_plane()); + if (format == SinglePlaneFormat::kRGBA_4444) { return kARGB_4444_SkColorType; } else if (format == SinglePlaneFormat::kRGBA_8888) { @@ -72,7 +78,7 @@ SkColorType ToClosestSkColorType(SharedImageFormat format, int plane_index) { CHECK(format.IsValidPlaneIndex(plane_index)); if (format.is_single_plane()) { - return ToClosestSkColorType(/*gpu_compositing=*/true, format); + return ToClosestSkColorType(format); } // No external sampling, format is per plane.
diff --git a/components/viz/common/resources/shared_image_format_utils.h b/components/viz/common/resources/shared_image_format_utils.h index c1e551d..383ed8b 100644 --- a/components/viz/common/resources/shared_image_format_utils.h +++ b/components/viz/common/resources/shared_image_format_utils.h
@@ -42,8 +42,14 @@ // is always RGBA and there is no difference between RGBA/BGRA. Also, these // formats should not be used for software SkImages/SkSurfaces. COMPONENT_EXPORT(VIZ_SHARED_IMAGE_FORMAT) -SkColorType ToClosestSkColorType(bool gpu_compositing, - SharedImageFormat format); +SkColorType ToClosestSkColorType(SharedImageFormat format); + +// Legacy version of the above, allowing to set `gpu_compositing` to false, +// which essentially hardcodes N32. This is due to how legacy SharedBitmap +// worked. +COMPONENT_EXPORT(VIZ_SHARED_IMAGE_FORMAT) +SkColorType ToClosestSkColorTypeDeprecated(bool gpu_compositing, + SharedImageFormat format); // Returns the closest SkColorType for a given `format` that does not prefer // external sampler and `plane_index`. For single planar formats (eg. RGBA) the
diff --git a/components/viz/common/resources/shared_image_format_utils_unittest.cc b/components/viz/common/resources/shared_image_format_utils_unittest.cc index bedb3cd..1fc45b7 100644 --- a/components/viz/common/resources/shared_image_format_utils_unittest.cc +++ b/components/viz/common/resources/shared_image_format_utils_unittest.cc
@@ -134,7 +134,7 @@ SharedImageFormat format = SinglePlaneFormat::kRGBX_8888; ASSERT_EQ(format.NumberOfPlanes(), 1); EXPECT_EQ(kN32_SkColorType, - ToClosestSkColorType(/*gpu_compositing=*/false, format)); + ToClosestSkColorTypeDeprecated(/*gpu_compositing=*/false, format)); } } // namespace
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc index a02cf8a1..2cbaad2 100644 --- a/components/viz/service/display/renderer_pixeltest.cc +++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -4679,7 +4679,8 @@ constexpr SharedImageFormat format = SinglePlaneFormat::kRGBA_8888; gfx::Rect viewport(this->device_viewport_size_); - SkColorType ct = ToClosestSkColorType(!is_software_renderer(), format); + SkColorType ct = + ToClosestSkColorTypeDeprecated(!is_software_renderer(), format); SkImageInfo info = SkImageInfo::Make(2, 2, ct, kPremul_SkAlphaType); SkBitmap bitmap; bitmap.allocPixels(info);
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl.cc b/components/viz/service/display_embedder/skia_output_surface_impl.cc index 675d6c4d..a0f6f902 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl.cc
@@ -630,7 +630,7 @@ SkColorType color_type = format.PrefersExternalSampler() ? gpu::ToClosestSkColorTypeExternalSampler(format) - : ToClosestSkColorType(/*gpu_compositing=*/true, format); + : ToClosestSkColorType(format); if (force_rgbx) { if (color_type == SkColorType::kBGRA_8888_SkColorType || @@ -848,8 +848,7 @@ CHECK(!current_paint_); CHECK(resource_sync_tokens_.empty()); - SkColorType color_type = - ToClosestSkColorType(/*gpu_compositing=*/true, format); + SkColorType color_type = ToClosestSkColorType(format); if (graphite_recorder_) { SkImageInfo image_info = SkImageInfo::Make(gfx::SizeToSkISize(surface_size), color_type,
diff --git a/components/viz/service/frame_sinks/gmb_video_frame_pool_context_provider_impl.cc b/components/viz/service/frame_sinks/gmb_video_frame_pool_context_provider_impl.cc index 614d2cd175..361602c 100644 --- a/components/viz/service/frame_sinks/gmb_video_frame_pool_context_provider_impl.cc +++ b/components/viz/service/frame_sinks/gmb_video_frame_pool_context_provider_impl.cc
@@ -142,6 +142,10 @@ shared_image->UpdateDestructionSyncToken(sync_token); } + const gpu::SharedImageCapabilities& GetCapabilities() override { + return sii_in_process_->GetCapabilities(); + } + private: void InitializeOnGpu(base::WaitableEvent* event) { DCHECK_CALLED_ON_VALID_SEQUENCE(gpu_sequence_checker_);
diff --git a/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl_unittest.cc b/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl_unittest.cc index 3c327baf..7ba42da 100644 --- a/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl_unittest.cc +++ b/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl_unittest.cc
@@ -796,6 +796,10 @@ shared_image->UpdateDestructionSyncToken(sync_token); } + const gpu::SharedImageCapabilities& GetCapabilities() override { + return context_provider_->SharedImageInterface()->GetCapabilities(); + } + private: scoped_refptr<TestContextProvider> context_provider_; };
diff --git a/components/viz/test/fake_skia_output_surface.cc b/components/viz/test/fake_skia_output_surface.cc index b909ea65..1bd1b40 100644 --- a/components/viz/test/fake_skia_output_surface.cc +++ b/components/viz/test/fake_skia_output_surface.cc
@@ -130,8 +130,7 @@ return; } - auto sk_color_type = - ToClosestSkColorType(true /* gpu_compositing */, image_context->format()); + auto sk_color_type = ToClosestSkColorType(image_context->format()); image_context->SetImage( SkImages::BorrowTextureFrom(gr_context(), backend_texture, kTopLeft_GrSurfaceOrigin, sk_color_type, @@ -176,8 +175,7 @@ auto& sk_surface = sk_surfaces_[id]; if (!sk_surface) { - SkColorType color_type = - ToClosestSkColorType(true /* gpu_compositing */, format); + SkColorType color_type = ToClosestSkColorType(format); SkImageInfo image_info = SkImageInfo::Make( surface_size.width(), surface_size.height(), color_type, kPremul_SkAlphaType, std::move(color_space));
diff --git a/components/webapps/browser/android/translations/android_webapps_strings_iw.xtb b/components/webapps/browser/android/translations/android_webapps_strings_iw.xtb index 554e7d6..a5087e6 100644 --- a/components/webapps/browser/android/translations/android_webapps_strings_iw.xtb +++ b/components/webapps/browser/android/translations/android_webapps_strings_iw.xtb
@@ -18,7 +18,7 @@ <translation id="4338600611020922010">הוסף למסך דף הבית</translation> <translation id="4665282149850138822">האתר <ph name="NAME" /> נוסף למסך דף הבית שלך</translation> <translation id="5037411519220435935">רק עוד רגע\u2026</translation> -<translation id="5250483651202458397">צילום מסך. אפשר להקיש כדי לסגור.</translation> +<translation id="5250483651202458397">צילום מסך. אפשר ללחוץ כדי לסגור.</translation> <translation id="5684726956335420505">בחירת הדרך להוספת האפליקציה למסך הבית</translation> <translation id="573338379539282448">במקום, אפשר ללחוץ כדי לפתוח את האפליקציה</translation> <translation id="5833749891039107935">כאן מקלידים את השם של אפליקציית האינטרנט</translation>
diff --git a/components/webapps/browser/banners/app_banner_manager.cc b/components/webapps/browser/banners/app_banner_manager.cc index f55f74c..26b8654 100644 --- a/components/webapps/browser/banners/app_banner_manager.cc +++ b/components/webapps/browser/banners/app_banner_manager.cc
@@ -467,6 +467,10 @@ void AppBannerManager::PostInstallableWebAppCheckValidation( const bool does_conflict) { + if (state_ != State::ACTIVE || !web_app_data_) { + return; + } + if (does_conflict) { TrackDisplayEvent(DISPLAY_EVENT_INSTALLED_PREVIOUSLY); SetInstallableWebAppCheckResult(
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index ba2fd8bb4..d745020 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -2599,7 +2599,6 @@ "//chromeos/ash/components/network", "//chromeos/ash/components/system", "//chromeos/ash/resources", - "//chromeos/resources", "//components/chromeos_camera:mojo_mjpeg_decode_accelerator", "//components/session_manager/core", "//services/data_decoder/public/cpp",
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 5e9f0c3..17c73af 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -776,6 +776,13 @@ } IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, + AccessibilityAriaActionsImplicit) { + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableExperimentalWebPlatformFeatures); + RunAriaTest(FILE_PATH_LITERAL("aria-actions-implicit.html")); +} + +IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityAriaActionsReferenceTarget) { RunAriaTest(FILE_PATH_LITERAL("aria-actions-reference-target.html")); }
diff --git a/content/browser/interest_group/interest_group_browsertest.cc b/content/browser/interest_group/interest_group_browsertest.cc index a9132b26..b6aa48e 100644 --- a/content/browser/interest_group/interest_group_browsertest.cc +++ b/content/browser/interest_group/interest_group_browsertest.cc
@@ -20765,7 +20765,8 @@ InterestGroupBiddingAndAuctionServerBrowserTest() { feature_list_.InitWithFeaturesAndParameters( {{blink::features::kFledgeBiddingAndAuctionServer, - {{"FledgeBiddingAndAuctionKeyURL", kKeyUrl.spec()}}}}, + {{"FledgeBiddingAndAuctionKeyURL", kKeyUrl.spec()}}}, + {blink::features::kFledgeBiddingAndAuctionServerAPIMultiSeller, {}}}, {}); } @@ -21499,6 +21500,47 @@ EXPECT_EQ(nullptr, RunAuctionAndWait(auction_config)); } +class InterestGroupBiddingAndAuctionMultiSellerServerDisabledBrowserTest + : public InterestGroupBiddingAndAuctionServerBrowserTest { + public: + InterestGroupBiddingAndAuctionMultiSellerServerDisabledBrowserTest() { + feature_list_.InitWithFeaturesAndParameters( + {{blink::features::kFledgeBiddingAndAuctionServer, + {{"FledgeBiddingAndAuctionKeyURL", kKeyUrl.spec()}}}}, + {blink::features::kFledgeBiddingAndAuctionServerAPIMultiSeller}); + } + + protected: + const GURL kKeyUrl = + GURL("https://example.test/interest_group/b_and_a_keys.json"); + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F( + InterestGroupBiddingAndAuctionMultiSellerServerDisabledBrowserTest, + MissingRequiredSeller) { + GURL test_url = embedded_https_test_server().GetURL( + "a.test", "/interest_group/empty.html"); + url::Origin test_origin = url::Origin::Create(test_url); + + ASSERT_TRUE(NavigateToURL(shell(), test_url)); + + base::HistogramTester histogram_tester; + std::vector<std::pair<url::Origin, std::string>> sellers = { + {test_origin, kDefaultBiddingAndAuctionGCPCoordinatorOrigin}}; + + EXPECT_EQ( + "TypeError: Failed to execute 'getInterestGroupAdAuctionData' on " + "'Navigator': Failed to read the 'seller' property from " + "'AdAuctionDataConfig': Required member is undefined.", + GetInterestGroupAdAuctionData( + /*seller=*/std::nullopt, + /*coordinator=*/std::nullopt, std::move(sellers))); + content::FetchHistogramsFromChildProcesses(); + histogram_tester.ExpectTotalCount( + "Ads.InterestGroup.GetInterestGroupAdAuctionData.TimeToResolve", 0); +} + // TODO(crbug.com/40927353): Re-enable this test IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest, AuctionNonceIsValid) { GURL test_url =
diff --git a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_browsertest.cc b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_browsertest.cc index 72ac0410..5d87549 100644 --- a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_browsertest.cc +++ b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_browsertest.cc
@@ -105,16 +105,17 @@ // Identical functionalities as `NavigateTabAndWaitForScreenshotCached`, except // for a history navigation. -void HistoryNavigateTabAndWaitForScreenshotCached( +void HistoryNavigateTabAndWaitForScreenshotCachedOrSkipped( WebContents* tab, NavigationControllerImpl& controller, int offset, - bool same_doc_nav = false) { + bool same_doc_nav, + bool cached) { const int num_request_before_nav = NavigationTransitionUtils::GetNumCopyOutputRequestIssuedForTesting(); const int entries_count_before_nav = controller.GetEntryCount(); ScopedScreenshotCapturedObserverForTesting observer( - controller.GetLastCommittedEntryIndex()); + controller.GetLastCommittedEntryIndex(), cached); ASSERT_TRUE(HistoryGoToOffset(tab, offset)); if (!same_doc_nav) { WaitForCopyableViewInWebContents(tab); @@ -123,7 +124,25 @@ ASSERT_EQ(controller.GetEntryCount(), entries_count_before_nav); ASSERT_EQ( NavigationTransitionUtils::GetNumCopyOutputRequestIssuedForTesting(), - num_request_before_nav + 1); + num_request_before_nav + (cached ? 1 : 0)); +} + +void HistoryNavigateTabAndWaitForScreenshotCached( + WebContents* tab, + NavigationControllerImpl& controller, + int offset, + bool same_doc_nav = false) { + HistoryNavigateTabAndWaitForScreenshotCachedOrSkipped( + tab, controller, offset, same_doc_nav, /*cached=*/true); +} + +void HistoryNavigateTabAndWaitForScreenshotSkipped( + WebContents* tab, + NavigationControllerImpl& controller, + int offset, + bool same_doc_nav = false) { + HistoryNavigateTabAndWaitForScreenshotCachedOrSkipped( + tab, controller, offset, same_doc_nav, /*cached=*/false); } struct ScreenshotCaptureTestNavigationType { @@ -197,6 +216,11 @@ int index_ = 1; }; +class NoSupportForwardTransitionDelegate : public WebContentsDelegate { + public: + bool SupportsForwardTransitionAnimation() override { return false; } +}; + } // namespace class NavigationEntryScreenshotBrowserTestBase : public ContentBrowserTest { @@ -335,7 +359,8 @@ for (int index = 0; index < controller.GetEntryCount(); ++index) { auto* entry = controller.GetEntryAtIndex(index); EXPECT_EQ(entry->navigation_transition_data().cache_hit_or_miss_reason(), - expected_reasons[index]); + expected_reasons[index]) + << "at index=" << index; } } @@ -2000,6 +2025,76 @@ } IN_PROC_BROWSER_TEST_P(NavigationEntryScreenshotCacheHitOrMissReasonBrowserTest, + BasicNavigationsNoSupportForForwardTransition) { + NoSupportForwardTransitionDelegate delegate; + web_contents()->SetDelegate(&delegate); + // Max of three screenshots per Profile (BrowserContext). + const size_t page_size = GetUncompressedScreenshotSizeInBytes(); + const size_t memory_budget = 3 * page_size; + auto* manager = GetManagerForTab(web_contents()); + manager->SetMemoryBudgetForTesting(memory_budget); + auto& controller = web_contents()->GetController(); + + { + SCOPED_TRACE("[red*] -> [red&, green*]"); + NavigateTabAndWaitForScreenshotCached(web_contents(), controller, + GetNextUrl("/green.html")); + AssertCacheHitOrMissReasonsAre( + controller, {CacheHitOrMissReason::kCacheHit, std::nullopt}); + AssertOrderedScreenshotsAre(controller, {SK_ColorRED, std::nullopt}); + ASSERT_EQ(manager->GetCurrentCacheSize(), 1 * page_size); + } + { + SCOPED_TRACE("[red&, green*] -> [red&, green&, blue*]"); + NavigateTabAndWaitForScreenshotCached(web_contents(), controller, + GetNextUrl("/blue.html")); + AssertCacheHitOrMissReasonsAre( + controller, {CacheHitOrMissReason::kCacheHit, + CacheHitOrMissReason::kCacheHit, std::nullopt}); + AssertOrderedScreenshotsAre(controller, + {SK_ColorRED, SK_ColorGREEN, std::nullopt}); + ASSERT_EQ(manager->GetCurrentCacheSize(), 2 * page_size); + } + { + SCOPED_TRACE("[red&, green&, blue*] -> [red&, green*, blue]"); + HistoryNavigateTabAndWaitForScreenshotSkipped(web_contents(), controller, + -1); + AssertCacheHitOrMissReasonsAre( + controller, + {CacheHitOrMissReason::kCacheHit, std::nullopt, + CacheHitOrMissReason::kForwardTransitionAnimationNotSupported}); + AssertOrderedScreenshotsAre(controller, + {SK_ColorRED, std::nullopt, std::nullopt}); + ASSERT_EQ(manager->GetCurrentCacheSize(), 1 * page_size); + } + { + SCOPED_TRACE("[red&, green*, blue] -> [red*, green, blue]"); + HistoryNavigateTabAndWaitForScreenshotSkipped(web_contents(), controller, + -1); + AssertCacheHitOrMissReasonsAre( + controller, + {std::nullopt, + CacheHitOrMissReason::kForwardTransitionAnimationNotSupported, + CacheHitOrMissReason::kForwardTransitionAnimationNotSupported}); + AssertOrderedScreenshotsAre(controller, + {std::nullopt, std::nullopt, std::nullopt}); + ASSERT_EQ(manager->GetCurrentCacheSize(), 0 * page_size); + } + { + SCOPED_TRACE("[red*, green, blue] -> [red&, green*, blue]"); + HistoryNavigateTabAndWaitForScreenshotCached(web_contents(), controller, 1); + AssertCacheHitOrMissReasonsAre( + controller, + {CacheHitOrMissReason::kCacheHit, + CacheHitOrMissReason::kForwardTransitionAnimationNotSupported, + CacheHitOrMissReason::kForwardTransitionAnimationNotSupported}); + AssertOrderedScreenshotsAre(controller, + {SK_ColorRED, std::nullopt, std::nullopt}); + ASSERT_EQ(manager->GetCurrentCacheSize(), 1 * page_size); + } +} + +IN_PROC_BROWSER_TEST_P(NavigationEntryScreenshotCacheHitOrMissReasonBrowserTest, PurgeForMemoryPressure) { // Max of three screenshots per Profile (BrowserContext). const size_t page_size = GetUncompressedScreenshotSizeInBytes();
diff --git a/content/browser/renderer_host/navigation_transitions/navigation_transition_data.h b/content/browser/renderer_host/navigation_transitions/navigation_transition_data.h index 7dcdd46..69bceb4 100644 --- a/content/browser/renderer_host/navigation_transitions/navigation_transition_data.h +++ b/content/browser/renderer_host/navigation_transitions/navigation_transition_data.h
@@ -90,7 +90,11 @@ // Received an empty bitmap from embedder when capturing the screenshot. kCapturedEmptyBitmapFromEmbedder = 18, - kMaxValue = kCapturedEmptyBitmapFromEmbedder + // Forward navigation transitions were not supported when doing a back + // history navigation out of this entry. + kForwardTransitionAnimationNotSupported = 19, + + kMaxValue = kForwardTransitionAnimationNotSupported }; // LINT.ThenChange(//tools/metrics/histograms/metadata/navigation/enums.xml:NavigationTransitionCacheHitOrMissReason)
diff --git a/content/browser/renderer_host/navigation_transitions/navigation_transition_utils.cc b/content/browser/renderer_host/navigation_transitions/navigation_transition_utils.cc index 6df64fc..14f4fdb 100644 --- a/content/browser/renderer_host/navigation_transitions/navigation_transition_utils.cc +++ b/content/browser/renderer_host/navigation_transitions/navigation_transition_utils.cc
@@ -335,6 +335,16 @@ return false; } + if (navigation_request.IsHistory() && + navigation_request.GetNavigationEntryOffset() < 0 && + !navigation_request.GetDelegate()->SupportsForwardTransitionAnimation()) { + InvokeTestCallbackForNoScreenshot(navigation_request); + last_committed_entry->navigation_transition_data() + .set_cache_hit_or_miss_reason( + CacheHitOrMissReason::kForwardTransitionAnimationNotSupported); + return false; + } + bool only_use_embedder_screenshot = false; switch (navigation_request.early_render_frame_host_swap_type()) { case NavigationRequest::EarlyRenderFrameHostSwapType::kNone:
diff --git a/content/browser/renderer_host/navigator_delegate.h b/content/browser/renderer_host/navigator_delegate.h index 71c2df6..c2d3226e 100644 --- a/content/browser/renderer_host/navigator_delegate.h +++ b/content/browser/renderer_host/navigator_delegate.h
@@ -180,6 +180,9 @@ // e.g. not enough memory) if this returns true. virtual bool MaybeCopyContentAreaAsBitmap( base::OnceCallback<void(const SkBitmap&)> callback) = 0; + + // Whether animations when performing forward transitions are supported. + virtual bool SupportsForwardTransitionAnimation() = 0; }; } // namespace content
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 7ecebb02..84e5d2e 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -9221,6 +9221,17 @@ return GetDelegate()->MaybeCopyContentAreaAsBitmap(std::move(callback)); } +bool WebContentsImpl::SupportsForwardTransitionAnimation() { +#if BUILDFLAG(IS_ANDROID) + if (!GetDelegate()) { + return true; + } + return GetDelegate()->SupportsForwardTransitionAnimation(); +#else + return true; +#endif // !BUILDFLAG(IS_ANDROID) +} + void WebContentsImpl::DidChangeName(RenderFrameHostImpl* render_frame_host, const std::string& name) { OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::DidChangeName",
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index 1401403e..a53ffb2 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h
@@ -1061,6 +1061,7 @@ NavigationRequest* navigation_request_to_exclude) override; bool MaybeCopyContentAreaAsBitmap( base::OnceCallback<void(const SkBitmap&)> callback) override; + bool SupportsForwardTransitionAnimation() override; // RenderWidgetHostDelegate --------------------------------------------------
diff --git a/content/browser/webui/shared_resources_data_source.cc b/content/browser/webui/shared_resources_data_source.cc index a128ef9fe..87146d5 100644 --- a/content/browser/webui/shared_resources_data_source.cc +++ b/content/browser/webui/shared_resources_data_source.cc
@@ -21,8 +21,6 @@ #include "ash/webui/grit/ash_webui_common_resources_map.h" #include "chromeos/ash/grit/ash_resources.h" #include "chromeos/ash/grit/ash_resources_map.h" -#include "chromeos/grit/chromeos_resources.h" -#include "chromeos/grit/chromeos_resources_map.h" #include "content/grit/content_resources.h" #include "content/grit/content_resources_map.h" #include "mojo/public/js/grit/mojo_bindings_resources.h" @@ -41,12 +39,6 @@ }; } -const std::set<int> GetChromeosMojoResourceIds() { - return std::set<int>{ - IDR_NETWORK_DIAGNOSTICS_MOJOM_LITE_JS, - }; -} - const std::set<int> GetAshMojoResourceIds() { return std::set<int>{ IDR_MULTIDEVICE_DEVICE_SYNC_MOJOM_LITE_JS, @@ -89,8 +81,6 @@ source->AddResourcePaths(kMojoBindingsResources); AddResources(GetContentResourceIds(), kContentResources, kContentResourcesSize, source); - AddResources(GetChromeosMojoResourceIds(), kChromeosResources, - kChromeosResourcesSize, source); AddResources(GetAshMojoResourceIds(), kAshResources, kAshResourcesSize, source); #endif // BUILDFLAG(IS_CHROMEOS)
diff --git a/content/public/browser/web_contents_delegate.cc b/content/public/browser/web_contents_delegate.cc index 2f27fcb..6375d4c 100644 --- a/content/public/browser/web_contents_delegate.cc +++ b/content/public/browser/web_contents_delegate.cc
@@ -449,6 +449,10 @@ } #if BUILDFLAG(IS_ANDROID) +bool WebContentsDelegate::SupportsForwardTransitionAnimation() { + return true; +} + SkBitmap WebContentsDelegate::MaybeCopyContentAreaAsBitmapSync() { return SkBitmap(); }
diff --git a/content/public/browser/web_contents_delegate.h b/content/public/browser/web_contents_delegate.h index f1ef8c5..c3acd432 100644 --- a/content/public/browser/web_contents_delegate.h +++ b/content/public/browser/web_contents_delegate.h
@@ -830,6 +830,10 @@ base::OnceCallback<void(const SkBitmap&)> callback); #if BUILDFLAG(IS_ANDROID) + // Allows delegate to override whether there is support for animations when + // performing a forward transition. + virtual bool SupportsForwardTransitionAnimation(); + // Synchronous version of |MaybeCopyContentAreaAsBitmap|. Return an // empty bitmap if embedder is not showing any custom view. virtual SkBitmap MaybeCopyContentAreaAsBitmapSync();
diff --git a/content/public/test/navigation_transition_test_utils.cc b/content/public/test/navigation_transition_test_utils.cc index 355672f2..e78ee0d4 100644 --- a/content/public/test/navigation_transition_test_utils.cc +++ b/content/public/test/navigation_transition_test_utils.cc
@@ -39,17 +39,19 @@ } ScopedScreenshotCapturedObserverForTesting:: - ScopedScreenshotCapturedObserverForTesting(int expected_nav_entry_index) { + ScopedScreenshotCapturedObserverForTesting(int expected_nav_entry_index, + bool expected_requested) { NavigationTransitionTestUtils::SetNavScreenshotCallbackForTesting( base::BindRepeating( [](base::RepeatingClosure callback, int expected_nav_entry_index, - int nav_entry_index, const SkBitmap& bitmap, bool requested, - SkBitmap& out_override) { + bool expected_requested, int nav_entry_index, + const SkBitmap& bitmap, bool requested, SkBitmap& out_override) { CHECK_EQ(nav_entry_index, expected_nav_entry_index); - CHECK(requested); + CHECK_EQ(requested, expected_requested); std::move(callback).Run(); }, - run_loop_.QuitClosure(), expected_nav_entry_index)); + run_loop_.QuitClosure(), expected_nav_entry_index, + expected_requested)); } ScopedScreenshotCapturedObserverForTesting::
diff --git a/content/public/test/navigation_transition_test_utils.h b/content/public/test/navigation_transition_test_utils.h index 72e1f81d..18411b61 100644 --- a/content/public/test/navigation_transition_test_utils.h +++ b/content/public/test/navigation_transition_test_utils.h
@@ -48,7 +48,8 @@ class ScopedScreenshotCapturedObserverForTesting { public: explicit ScopedScreenshotCapturedObserverForTesting( - int expected_nav_entry_index); + int expected_nav_entry_index, + bool expected_requested = true); ScopedScreenshotCapturedObserverForTesting( const ScopedScreenshotCapturedObserverForTesting&) = delete; ScopedScreenshotCapturedObserverForTesting& operator=(
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.cc b/content/renderer/pepper/pepper_graphics_2d_host.cc index f8c2c0e9..039a72c 100644 --- a/content/renderer/pepper/pepper_graphics_2d_host.cc +++ b/content/renderer/pepper/pepper_graphics_2d_host.cc
@@ -721,9 +721,9 @@ src = swizzled.get(); } - SkImageInfo src_info = SkImageInfo::Make( - size.width(), size.height(), viz::ToClosestSkColorType(true, format), - kUnknown_SkAlphaType); + SkImageInfo src_info = SkImageInfo::Make(size.width(), size.height(), + viz::ToClosestSkColorType(format), + kUnknown_SkAlphaType); ri->WaitSyncTokenCHROMIUM(in_sync_token.GetConstData()); uint32_t texture_target = shared_image->GetTextureTarget();
diff --git a/content/test/content_test_bundle_data.filelist b/content/test/content_test_bundle_data.filelist index 6b5b3663a..a9217cf5 100644 --- a/content/test/content_test_bundle_data.filelist +++ b/content/test/content_test_bundle_data.filelist
@@ -388,6 +388,8 @@ data/accessibility/aria/aria-actions-expected-blink.txt data/accessibility/aria/aria-actions-expected-uia-win.txt data/accessibility/aria/aria-actions-expected-win.txt +data/accessibility/aria/aria-actions-implicit-expected-blink.txt +data/accessibility/aria/aria-actions-implicit.html data/accessibility/aria/aria-actions-reference-target-expected-blink.txt data/accessibility/aria/aria-actions-reference-target.html data/accessibility/aria/aria-actions-target-id-change-expected-blink.txt
diff --git a/content/test/data/accessibility/aria/aria-actions-implicit-expected-blink.txt b/content/test/data/accessibility/aria/aria-actions-implicit-expected-blink.txt new file mode 100644 index 0000000..ae7cb52 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-actions-implicit-expected-blink.txt
@@ -0,0 +1,47 @@ +rootWebArea +++genericContainer ignored +++++genericContainer ignored +++++++comboBoxSelect collapsed value='hello world' +++++++++menuListPopup invisible ispopup=auto +++++++++++menuListOption name='hello world' selected=true actionsIds=button +++++++++++++genericContainer ignored +++++++++++++++button name='hello world' +++++++++++++++++staticText name='hello world' +++++++++++menuListOption invisible name='search engine' selected=false actionsIds=link +++++++++++++genericContainer ignored invisible +++++++++++++++link invisible name='search engine' +++++++++++++++++staticText invisible name='search engine' +++++++++++menuListOption invisible name='my-first-button my-second-button my-link' selected=false actionsIds=button,button,link +++++++++++++genericContainer ignored invisible +++++++++++++++button invisible name='my-first-button' +++++++++++++++++staticText invisible name='my-first-button' +++++++++++++++button invisible name='my-second-button' +++++++++++++++++staticText invisible name='my-second-button' +++++++++++++++link invisible name='my-link' +++++++++++++++++staticText invisible name='my-link' +++++++listBox +++++++++listBoxOption name='Item 1 hello world' selected=false actionsIds=button +++++++++++staticText name='Item 1' +++++++++++++inlineTextBox name='Item 1' +++++++++++button name='hello world' +++++++++++++staticText name='hello world' +++++++++++++++inlineTextBox name='hello world' +++++++++listBoxOption name='Item 2search engine' selected=false actionsIds=link +++++++++++staticText name='Item 2' +++++++++++++inlineTextBox name='Item 2' +++++++++++link name='search engine' +++++++++++++staticText name='search engine' +++++++++++++++inlineTextBox name='search engine' +++++++menu +++++++++menuItem name='File1 hello world' actionsIds=button +++++++++++staticText name='File1' +++++++++++++inlineTextBox name='File1' +++++++++++button name='hello world' +++++++++++++staticText name='hello world' +++++++++++++++inlineTextBox name='hello world' +++++++++menuItem name='File2search engine' actionsIds=link +++++++++++staticText name='File2' +++++++++++++inlineTextBox name='File2' +++++++++++link name='search engine' +++++++++++++staticText name='search engine' +++++++++++++++inlineTextBox name='search engine'
diff --git a/content/test/data/accessibility/aria/aria-actions-implicit.html b/content/test/data/accessibility/aria/aria-actions-implicit.html new file mode 100644 index 0000000..269872143 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-actions-implicit.html
@@ -0,0 +1,39 @@ +<!-- +@BLINK-ALLOW:actions* +--> +<select> + <button> + <selectedoption></selectedoption> + </button> + <option> + <button type="button">hello world</button> + </option> + <option> + <a href="google.com">search engine</a> + </option> + <option> + <button type="button">my-first-button</button> + <button type="button">my-second-button</button> + <a href="google.com">my-link</a> + </option> +</select> + +<div role="listbox"> + <div tabIndex="0" role="option">Item 1<button type="button">hello world</button></div> + <div tabIndex="1" role="option">Item 2<a href="google.com">search engine</a></div> +</div> + +<div role="menu"> + <div tabindex="0" role="menuitem">File1<button type="button">hello world</button></div> + <div tabindex="1" role="menuitem">File2<a href="google.com">search engine</a></div> +</div> + +<style> +selectedoption .description { + display: none; +} +select, ::picker(select) { + appearance: base-select; +} +</style> +
diff --git a/extensions/browser/guest_view/app_view/app_view_apitest.cc b/extensions/browser/guest_view/app_view/app_view_apitest.cc index fbda3fcd..9ce5ddb 100644 --- a/extensions/browser/guest_view/app_view/app_view_apitest.cc +++ b/extensions/browser/guest_view/app_view/app_view_apitest.cc
@@ -4,7 +4,11 @@ #include "base/path_service.h" #include "base/strings/stringprintf.h" +#include "base/test/scoped_feature_list.h" #include "base/threading/thread_restrictions.h" +#include "components/guest_view/browser/guest_view_manager_delegate.h" +#include "components/guest_view/browser/test_guest_view_manager.h" +#include "content/public/common/content_features.h" #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h" #include "extensions/browser/app_window/app_window.h" @@ -86,9 +90,32 @@ namespace extensions { -class AppViewTest : public AppShellTest { +class AppViewTest : public AppShellTest, + public testing::WithParamInterface<bool> { + public: + static std::string DescribeParams( + const testing::TestParamInfo<ParamType>& info) { + return info.param ? "MPArch" : "InnerWebContents"; + } + + AppViewTest() { + scoped_feature_list_.InitWithFeatureState(features::kGuestViewMPArch, + GetParam()); + } + protected: - AppViewTest() = default; + void SetUpOnMainThread() override { + AppShellTest::SetUpOnMainThread(); + content::BrowserContext* context = + ShellContentBrowserClient::Get()->GetBrowserContext(); + test_guest_view_manager_ = factory_.GetOrCreateTestGuestViewManager( + context, ExtensionsAPIClient::Get()->CreateGuestViewManagerDelegate()); + } + + void TearDownOnMainThread() override { + test_guest_view_manager_ = nullptr; + AppShellTest::TearDownOnMainThread(); + } content::WebContents* GetFirstAppWindowWebContents() { const AppWindowRegistry::AppWindowList& app_window_list = @@ -127,17 +154,41 @@ << "Unable to start test."; ASSERT_TRUE(done_listener.WaitUntilSatisfied()); } + + guest_view::TestGuestViewManager* test_guest_view_manager() const { + return test_guest_view_manager_; + } + + private: + guest_view::TestGuestViewManagerFactory factory_; + raw_ptr<guest_view::TestGuestViewManager> test_guest_view_manager_ = nullptr; + base::test::ScopedFeatureList scoped_feature_list_; }; +INSTANTIATE_TEST_SUITE_P(/* no prefix */, + AppViewTest, + testing::Bool(), + AppViewTest::DescribeParams); + // Tests that <appview> correctly processes parameters passed on connect. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewGoodDataShouldSucceed) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewGoodDataShouldSucceed) { RunTest("testAppViewGoodDataShouldSucceed", "app_view/apitest", "app_view/apitest/skeleton"); + // Note that the callback of the appview connect method runs after guest + // creation, but not necessarily after attachment. So we now ensure that the + // guest successfully attaches and loads. + EXPECT_TRUE(test_guest_view_manager()->WaitUntilAttachedAndLoaded( + test_guest_view_manager()->WaitForSingleGuestViewCreated())); } // Tests that <appview> can handle media permission requests. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewMediaRequest) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewMediaRequest) { + // TODO(crbug.com/40202416): Implement for MPArch. + if (base::FeatureList::IsEnabled(features::kGuestViewMPArch)) { + GTEST_SKIP() << "MPArch implementation skipped. https://crbug.com/40202416"; + } + static_cast<ShellExtensionsBrowserClient*>(ExtensionsBrowserClient::Get()) ->SetAPIClientForTest(nullptr); static_cast<ShellExtensionsBrowserClient*>(ExtensionsBrowserClient::Get()) @@ -152,20 +203,22 @@ // Tests that <appview> correctly processes parameters passed on connect. // This test should fail to connect because the embedded app (skeleton) will // refuse the data passed by the embedder app and deny the request. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewRefusedDataShouldFail) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewRefusedDataShouldFail) { RunTest("testAppViewRefusedDataShouldFail", "app_view/apitest", "app_view/apitest/skeleton"); } // Tests that <appview> is able to navigate to another installed app. -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewWithUndefinedDataShouldSucceed) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewWithUndefinedDataShouldSucceed) { RunTest("testAppViewWithUndefinedDataShouldSucceed", "app_view/apitest", "app_view/apitest/skeleton"); + EXPECT_TRUE(test_guest_view_manager()->WaitUntilAttachedAndLoaded( + test_guest_view_manager()->WaitForSingleGuestViewCreated())); } -IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewNoEmbedRequestListener) { +IN_PROC_BROWSER_TEST_P(AppViewTest, TestAppViewNoEmbedRequestListener) { RunTest("testAppViewNoEmbedRequestListener", "app_view/apitest", "app_view/apitest/no_embed_request_listener"); }
diff --git a/google_apis/gaia/core_account_id.cc b/google_apis/gaia/core_account_id.cc index 5dbdbc99..5f12e9f 100644 --- a/google_apis/gaia/core_account_id.cc +++ b/google_apis/gaia/core_account_id.cc
@@ -80,22 +80,6 @@ return id_; } -bool operator<(const CoreAccountId& lhs, const CoreAccountId& rhs) { - return lhs.ToString() < rhs.ToString(); -} - -bool operator==(const CoreAccountId& lhs, const CoreAccountId& rhs) { - return lhs.ToString() == rhs.ToString(); -} - -bool operator!=(const CoreAccountId& lhs, const CoreAccountId& rhs) { - return lhs.ToString() != rhs.ToString(); -} - -std::ostream& operator<<(std::ostream& out, const CoreAccountId& a) { - return out << a.ToString(); -} - std::vector<std::string> ToStringList( const std::vector<CoreAccountId>& account_ids) { return base::ToVector(account_ids, &CoreAccountId::ToString);
diff --git a/google_apis/gaia/core_account_id.h b/google_apis/gaia/core_account_id.h index fd44d4c..2b8c7d33 100644 --- a/google_apis/gaia/core_account_id.h +++ b/google_apis/gaia/core_account_id.h
@@ -94,16 +94,19 @@ }; COMPONENT_EXPORT(GOOGLE_APIS) -bool operator<(const CoreAccountId& lhs, const CoreAccountId& rhs); +inline auto operator<=>(const CoreAccountId& lhs, const CoreAccountId& rhs) { + return lhs.ToString() <=> rhs.ToString(); +} COMPONENT_EXPORT(GOOGLE_APIS) -bool operator==(const CoreAccountId& lhs, const CoreAccountId& rhs); +inline bool operator==(const CoreAccountId& lhs, const CoreAccountId& rhs) { + return lhs.ToString() == rhs.ToString(); +} COMPONENT_EXPORT(GOOGLE_APIS) -bool operator!=(const CoreAccountId& lhs, const CoreAccountId& rhs); - -COMPONENT_EXPORT(GOOGLE_APIS) -std::ostream& operator<<(std::ostream& out, const CoreAccountId& a); +inline std::ostream& operator<<(std::ostream& out, const CoreAccountId& a) { + return out << a.ToString(); +} // Returns the values of the account ids in a vector. Useful especially for // logs.
diff --git a/gpu/command_buffer/service/raster_decoder.cc b/gpu/command_buffer/service/raster_decoder.cc index f9e609d9..40f71a9 100644 --- a/gpu/command_buffer/service/raster_decoder.cc +++ b/gpu/command_buffer/service/raster_decoder.cc
@@ -1986,7 +1986,7 @@ } viz::SharedImageFormat dest_format = dest_shared_image->format(); - if (SkColorTypeBytesPerPixel(viz::ToClosestSkColorType(true, dest_format)) != + if (SkColorTypeBytesPerPixel(viz::ToClosestSkColorType(dest_format)) != SkColorTypeBytesPerPixel(static_cast<SkColorType>(src_sk_color_type))) { LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glWritePixels", "Bytes per pixel for src SkColorType and dst " @@ -2861,8 +2861,7 @@ DCHECK(locked_handles_.empty()); DCHECK(!raster_canvas_); - SkColorType sk_color_type = viz::ToClosestSkColorType( - /*gpu_compositing=*/true, shared_image->format()); + SkColorType sk_color_type = viz::ToClosestSkColorType(shared_image->format()); int final_msaa_count; uint32_t flags;
diff --git a/gpu/command_buffer/service/shared_image/ahardwarebuffer_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/ahardwarebuffer_image_backing_factory_unittest.cc index fa21d78..972eeb7 100644 --- a/gpu/command_buffer/service/shared_image/ahardwarebuffer_image_backing_factory_unittest.cc +++ b/gpu/command_buffer/service/shared_image/ahardwarebuffer_image_backing_factory_unittest.cc
@@ -309,9 +309,8 @@ SkAlphaType alpha_type = kPremul_SkAlphaType; gpu::SharedImageUsageSet usage = SHARED_IMAGE_USAGE_DISPLAY_READ; - auto image_info = - SkImageInfo::Make(gfx::SizeToSkISize(size), - viz::ToClosestSkColorType(true, format), alpha_type); + auto image_info = SkImageInfo::Make( + gfx::SizeToSkISize(size), viz::ToClosestSkColorType(format), alpha_type); SkBitmap expected_bitmap; expected_bitmap.allocPixels(image_info);
diff --git a/gpu/command_buffer/service/shared_image/dcomp_surface_image_backing.cc b/gpu/command_buffer/service/shared_image/dcomp_surface_image_backing.cc index 7596764e..4ef264b 100644 --- a/gpu/command_buffer/service/shared_image/dcomp_surface_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/dcomp_surface_image_backing.cc
@@ -385,8 +385,7 @@ GrGLFramebufferInfo framebuffer_info = {0}; DCHECK_EQ(gl_surface_->GetBackingFramebufferObject(), 0u); - SkColorType color_type = viz::ToClosestSkColorType( - /*gpu_compositing=*/true, format()); + SkColorType color_type = viz::ToClosestSkColorType(format()); switch (color_type) { case kRGBA_8888_SkColorType: framebuffer_info.fFormat = GL_RGBA8;
diff --git a/gpu/command_buffer/service/shared_image/raw_draw_image_backing.cc b/gpu/command_buffer/service/shared_image/raw_draw_image_backing.cc index f1b3cd07..739b16b 100644 --- a/gpu/command_buffer/service/shared_image/raw_draw_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/raw_draw_image_backing.cc
@@ -190,8 +190,7 @@ if (context_state_->context_lost()) return false; - auto sk_color = viz::ToClosestSkColorType( - /*gpu_compositing=*/true, format()); + auto sk_color = viz::ToClosestSkColorType(format()); const std::string label = "RawDrawImageBacking" + CreateLabelForSharedImageUsage(usage()); GrDirectContext* direct_context = context_state_->gr_context();
diff --git a/gpu/command_buffer/service/shared_image/shared_image_manager.cc b/gpu/command_buffer/service/shared_image/shared_image_manager.cc index f337d8a..b9bfa8c 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_manager.cc +++ b/gpu/command_buffer/service/shared_image/shared_image_manager.cc
@@ -74,6 +74,155 @@ } } +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +// Used for logging values to GPU.SharedImage.SharedImageFormat UMA. +enum class SharedImageFormatUMA { + kRGBA_8888 = 0, + kRGBA_4444 = 1, + kBGRA_8888 = 2, + kALPHA_8 = 3, + kLUMINANCE_8 = 4, + kRGB_565 = 5, + kBGR_565 = 6, + kETC1 = 7, + kR_8 = 8, + kRG_88 = 9, + kLUMINANCE_F16 = 10, + kRGBA_F16 = 11, + kR_16 = 12, + kRG_1616 = 13, + kRGBX_8888 = 14, + kBGRX_8888 = 15, + kRGBA_1010102 = 16, + kBGRA_1010102 = 17, + kR_F16 = 18, + kYV12 = 19, + kNV12 = 20, + kNV12A = 21, + kP010 = 22, + kNV16 = 23, + kNV24 = 24, + kP210 = 25, + kP410 = 26, + kI420 = 27, + kI420A = 28, + kI422 = 29, + kI444 = 30, + kYUV420P10 = 31, + kYUV422P10 = 32, + kYUV444P10 = 33, + kYUV420P16 = 34, + kYUV422P16 = 35, + kYUV444P16 = 36, + kOther = 37, + kMaxValue = kOther +}; + +SharedImageFormatUMA GetSharedImageFormatUMA(viz::SharedImageFormat format) { + if (format.is_single_plane()) { + if (format == viz::SinglePlaneFormat::kRGBA_8888) { + return SharedImageFormatUMA::kRGBA_8888; + } else if (format == viz::SinglePlaneFormat::kRGBA_4444) { + return SharedImageFormatUMA::kRGBA_4444; + } else if (format == viz::SinglePlaneFormat::kBGRA_8888) { + return SharedImageFormatUMA::kBGRA_8888; + } else if (format == viz::SinglePlaneFormat::kALPHA_8) { + return SharedImageFormatUMA::kALPHA_8; + } else if (format == viz::SinglePlaneFormat::kLUMINANCE_8) { + return SharedImageFormatUMA::kLUMINANCE_8; + } else if (format == viz::SinglePlaneFormat::kRGB_565) { + return SharedImageFormatUMA::kRGB_565; + } else if (format == viz::SinglePlaneFormat::kBGR_565) { + return SharedImageFormatUMA::kBGR_565; + } else if (format == viz::SinglePlaneFormat::kETC1) { + return SharedImageFormatUMA::kETC1; + } else if (format == viz::SinglePlaneFormat::kR_8) { + return SharedImageFormatUMA::kR_8; + } else if (format == viz::SinglePlaneFormat::kRG_88) { + return SharedImageFormatUMA::kRG_88; + } else if (format == viz::SinglePlaneFormat::kLUMINANCE_F16) { + return SharedImageFormatUMA::kLUMINANCE_F16; + } else if (format == viz::SinglePlaneFormat::kRGBA_F16) { + return SharedImageFormatUMA::kRGBA_F16; + } else if (format == viz::SinglePlaneFormat::kR_16) { + return SharedImageFormatUMA::kR_16; + } else if (format == viz::SinglePlaneFormat::kRG_1616) { + return SharedImageFormatUMA::kRG_1616; + } else if (format == viz::SinglePlaneFormat::kRGBX_8888) { + return SharedImageFormatUMA::kRGBX_8888; + } else if (format == viz::SinglePlaneFormat::kBGRX_8888) { + return SharedImageFormatUMA::kBGRX_8888; + } else if (format == viz::SinglePlaneFormat::kRGBA_1010102) { + return SharedImageFormatUMA::kRGBA_1010102; + } else if (format == viz::SinglePlaneFormat::kBGRA_1010102) { + return SharedImageFormatUMA::kBGRA_1010102; + } else { + DCHECK_EQ(format, viz::SinglePlaneFormat::kR_F16); + return SharedImageFormatUMA::kR_F16; + } + } + + using PlaneConfig = viz::SharedImageFormat::PlaneConfig; + using Subsampling = viz::SharedImageFormat::Subsampling; + using ChannelFormat = viz::SharedImageFormat::ChannelFormat; + + if (format == viz::MultiPlaneFormat::kYV12) { + return SharedImageFormatUMA::kYV12; + } else if (format == viz::MultiPlaneFormat::kNV12) { + return SharedImageFormatUMA::kNV12; + } else if (format == viz::MultiPlaneFormat::kNV12A) { + return SharedImageFormatUMA::kNV12A; + } else if (format == viz::MultiPlaneFormat::kP010) { + return SharedImageFormatUMA::kP010; + } else if (format == viz::MultiPlaneFormat::kNV16) { + return SharedImageFormatUMA::kNV16; + } else if (format == viz::MultiPlaneFormat::kNV24) { + return SharedImageFormatUMA::kNV24; + } else if (format == viz::MultiPlaneFormat::kP210) { + return SharedImageFormatUMA::kP210; + } else if (format == viz::MultiPlaneFormat::kP410) { + return SharedImageFormatUMA::kP410; + } else if (format == viz::MultiPlaneFormat::kI420A) { + return SharedImageFormatUMA::kI420A; + } else if (format.is_multi_plane() && + format.plane_config() == PlaneConfig::kY_U_V) { + // Y_U_V planar formats are usually used by software video frames. + switch (format.channel_format()) { + case ChannelFormat::k8: + switch (format.subsampling()) { + case Subsampling::k420: + return SharedImageFormatUMA::kI420; + case Subsampling::k422: + return SharedImageFormatUMA::kI422; + case Subsampling::k444: + return SharedImageFormatUMA::kI444; + } + case ChannelFormat::k10: + switch (format.subsampling()) { + case Subsampling::k420: + return SharedImageFormatUMA::kYUV420P10; + case Subsampling::k422: + return SharedImageFormatUMA::kYUV422P10; + case Subsampling::k444: + return SharedImageFormatUMA::kYUV444P10; + } + case ChannelFormat::k16: + case ChannelFormat::k16F: + switch (format.subsampling()) { + case Subsampling::k420: + return SharedImageFormatUMA::kYUV420P16; + case Subsampling::k422: + return SharedImageFormatUMA::kYUV422P16; + case Subsampling::k444: + return SharedImageFormatUMA::kYUV444P16; + } + } + } else { + return SharedImageFormatUMA::kOther; + } +} + } // namespace // Overrides for flat_set lookups: @@ -161,6 +310,8 @@ } UMA_HISTOGRAM_ENUMERATION("GPU.SharedImage.BackingType", backing->GetType()); + UMA_HISTOGRAM_ENUMERATION("GPU.SharedImage.SharedImageFormat", + GetSharedImageFormatUMA(backing->format())); // TODO(jonross): Determine how the direct destruction of a // SharedImageRepresentationFactoryRef leads to ref-counting issues as
diff --git a/gpu/command_buffer/service/shared_image/shared_image_representation.cc b/gpu/command_buffer/service/shared_image/shared_image_representation.cc index c43a12a..668b2e6 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_representation.cc +++ b/gpu/command_buffer/service/shared_image/shared_image_representation.cc
@@ -413,10 +413,9 @@ if (format.is_single_plane() || format.PrefersExternalSampler()) { DCHECK_EQ(static_cast<int>(promise_image_textures_.size()), 1); auto alpha_type = representation()->alpha_type(); - auto color_type = - format.PrefersExternalSampler() - ? ToClosestSkColorTypeExternalSampler(format) - : viz::ToClosestSkColorType(/*gpu_compositing=*/true, format); + auto color_type = format.PrefersExternalSampler() + ? ToClosestSkColorTypeExternalSampler(format) + : viz::ToClosestSkColorType(format); return SkImages::BorrowTextureFrom( context_state->gr_context(), promise_image_texture()->backendTexture(), surface_origin, color_type, alpha_type, sk_color_space, @@ -659,10 +658,9 @@ if (format.is_single_plane() || format.PrefersExternalSampler()) { CHECK_EQ(static_cast<int>(graphite_textures_.size()), 1); auto alpha_type = representation()->alpha_type(); - auto color_type = - format.PrefersExternalSampler() - ? ToClosestSkColorTypeExternalSampler(format) - : viz::ToClosestSkColorType(/*gpu_compositing=*/true, format); + auto color_type = format.PrefersExternalSampler() + ? ToClosestSkColorTypeExternalSampler(format) + : viz::ToClosestSkColorType(format); auto origin = representation()->surface_origin() == kTopLeft_GrSurfaceOrigin ? skgpu::Origin::kTopLeft : skgpu::Origin::kBottomLeft;
diff --git a/gpu/command_buffer/service/shared_image/skia_vk_android_image_representation.cc b/gpu/command_buffer/service/shared_image/skia_vk_android_image_representation.cc index 1faa915b..b2711f4 100644 --- a/gpu/command_buffer/service/shared_image/skia_vk_android_image_representation.cc +++ b/gpu/command_buffer/service/shared_image/skia_vk_android_image_representation.cc
@@ -85,8 +85,7 @@ if (!surface_ || final_msaa_count != surface_msaa_count_ || surface_props != surface_->props()) { - SkColorType sk_color_type = viz::ToClosestSkColorType( - /*gpu_compositing=*/true, format()); + SkColorType sk_color_type = viz::ToClosestSkColorType(format()); surface_ = SkSurfaces::WrapBackendTexture( gr_context, promise_texture_->backendTexture(), surface_origin(), final_msaa_count, sk_color_type, color_space().ToSkColorSpace(),
diff --git a/ios/chrome/app/application_delegate/metric_kit_subscriber.mm b/ios/chrome/app/application_delegate/metric_kit_subscriber.mm index 7b1e46b..8023831f 100644 --- a/ios/chrome/app/application_delegate/metric_kit_subscriber.mm +++ b/ios/chrome/app/application_delegate/metric_kit_subscriber.mm
@@ -220,7 +220,7 @@ DCHECK_LE(end - start, 10); double sample = (end + start) / 2; histogramUMA->AddCount( - base::saturated_cast<base::HistogramBase::Sample>(sample), + base::saturated_cast<base::HistogramBase::Sample32>(sample), bucket.bucketCount); } }
diff --git a/ios/chrome/app/resources/ios_resources.grd b/ios/chrome/app/resources/ios_resources.grd index c79b1db..c787c9bd 100644 --- a/ios/chrome/app/resources/ios_resources.grd +++ b/ios/chrome/app/resources/ios_resources.grd
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> +<grit latest_public_release="0" current_release="1"> <outputs> <output filename="grit/ios_resources.h" type="rc_header"> <emit emit_type='prepend'></emit>
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd index a71bb4a..bfa3d55 100644 --- a/ios/chrome/app/strings/ios_chromium_strings.grd +++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -1148,6 +1148,12 @@ =1 {Now showing 1 Chromium window} other {Now showing {count} Chromium windows}} </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE" desc="Subtitle of the Youtube Incognito Sheet explaining that Chromium automatically opens Youtube Incognito links in Incognito"> + Chromium automatically opens Youtube Incognito links in Incognito. + </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE" desc="Title of the Youtube Incognito Sheet informing the user that the URL will be opened in Chrome Incognito"> + You're in Chromium Incognito + </message> <message name="IDS_SEND_TAB_TO_SELF_NO_TARGET_DEVICE_LABEL" desc="Text shown when a user with no available target devices attempts to use send-tab-to-self."> To send this tab to another device, sign in to Chromium there. </message> @@ -1156,4 +1162,4 @@ </message> </messages> </release> -</grit> \ No newline at end of file +</grit>
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE.png.sha1 new file mode 100644 index 0000000..70eb102 --- /dev/null +++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE.png.sha1
@@ -0,0 +1 @@ +15ce2175d546aa4650d18c54f58cfb2c6e2b13e1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE.png.sha1 new file mode 100644 index 0000000..70eb102 --- /dev/null +++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE.png.sha1
@@ -0,0 +1 @@ +15ce2175d546aa4650d18c54f58cfb2c6e2b13e1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd index 5e5462c..e116be1 100644 --- a/ios/chrome/app/strings/ios_google_chrome_strings.grd +++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -1154,6 +1154,12 @@ =1 {Now showing 1 Chrome window} other {Now showing {count} Chrome windows}} </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE" desc="Subtitle of the Youtube Incognito Sheet explaining that Chrome automatically opens Youtube Incognito links in Incognito"> + Chrome automatically opens Youtube Incognito links in Incognito. + </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE" desc="Title of the Youtube Incognito Sheet informing the user that the URL will be opened in Chrome Incognito"> + You're in Chrome Incognito + </message> <message name="IDS_SEND_TAB_TO_SELF_NO_TARGET_DEVICE_LABEL" desc="Text shown when a user with no available target devices attempts to use send-tab-to-self."> To send this tab to another device, sign in to Chrome there. </message> @@ -1162,4 +1168,4 @@ </message> </messages> </release> -</grit> \ No newline at end of file +</grit>
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE.png.sha1 new file mode 100644 index 0000000..70eb102 --- /dev/null +++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE.png.sha1
@@ -0,0 +1 @@ +15ce2175d546aa4650d18c54f58cfb2c6e2b13e1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE.png.sha1 new file mode 100644 index 0000000..70eb102 --- /dev/null +++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE.png.sha1
@@ -0,0 +1 @@ +15ce2175d546aa4650d18c54f58cfb2c6e2b13e1 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index f3304794..861b8c5c 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -6881,6 +6881,21 @@ <message name="IDS_IOS_WIDGET_PROMO_INSTRUCTIONS_TITLE" desc="Title of the instruction screen for the Password Manager widget's installation."> Get to passwords from the home screen </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_PRIMARY_BUTTON_TITLE" desc="Title of the Youtube Incognito enterprise primary button"> + Open Site Anyway + </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SECONDARY_BUTTON_TITLE" desc="Title of the Youtube Incognito enterprise secondary button"> + Cancel + </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SUBTITLE" desc="Subtitle of the Youtube Incognito enterprise sheet"> + Your organization turned off private browsing. + </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_TITLE" desc="Title of the Youtube Incognito enterprise sheet"> + Incognito Mode is Unavailable + </message> + <message name="IDS_IOS_YOUTUBE_INCOGNITO_SHEET_PRIMARY_BUTTON_TITLE" desc="Title of the Youtube Incognito Sheet primary button"> + Got it + </message> <message name="IDS_SAVE_PASSWORD_FOOTER" desc="The footer text of the infobar that offers user to save/update a password to Chrome."> Passwords are saved in your Google Account so you can use them on any device. </message> @@ -6931,4 +6946,4 @@ </message> </messages> </release> -</grit> \ No newline at end of file +</grit>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_PRIMARY_BUTTON_TITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_PRIMARY_BUTTON_TITLE.png.sha1 new file mode 100644 index 0000000..509bc96 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_PRIMARY_BUTTON_TITLE.png.sha1
@@ -0,0 +1 @@ +be25a9c0793e2295b674f570802b3c27c99d935f \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SECONDARY_BUTTON_TITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SECONDARY_BUTTON_TITLE.png.sha1 new file mode 100644 index 0000000..8d54f562 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SECONDARY_BUTTON_TITLE.png.sha1
@@ -0,0 +1 @@ +f5848f8167dca03216876ba6a6ca5632b31b5086 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SUBTITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SUBTITLE.png.sha1 new file mode 100644 index 0000000..8d54f562 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SUBTITLE.png.sha1
@@ -0,0 +1 @@ +f5848f8167dca03216876ba6a6ca5632b31b5086 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_TITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_TITLE.png.sha1 new file mode 100644 index 0000000..8d54f562 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_TITLE.png.sha1
@@ -0,0 +1 @@ +f5848f8167dca03216876ba6a6ca5632b31b5086 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_PRIMARY_BUTTON_TITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_PRIMARY_BUTTON_TITLE.png.sha1 new file mode 100644 index 0000000..1da2e627 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_YOUTUBE_INCOGNITO_SHEET_PRIMARY_BUTTON_TITLE.png.sha1
@@ -0,0 +1 @@ +1633708a75a9fbed40718c760b1afa733203620a \ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb index f924919..09a88d7 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
@@ -8,7 +8,7 @@ <translation id="1115463765356382667">השלמת הפעולות המוצעות הבאות תעזור לך להשתמש ב-Chromium בדרך היעילה ביותר.</translation> <translation id="1140315115515116765">כדאי להגדיר את Chromium כדפדפן ברירת המחדל כדי לקבל את מדדי המחירים בקלות</translation> <translation id="1185134272377778587">על Chromium</translation> -<translation id="1257458525759135959">כדי לשמור תמונות צריך להקיש על 'הגדרות' על מנת לאפשר ל-Chromium להוסיף תמונות לגלריה שלך</translation> +<translation id="1257458525759135959">כדי לשמור תמונות צריך ללחוץ על 'הגדרות' על מנת לאפשר ל-Chromium להוסיף תמונות לגלריה שלך</translation> <translation id="1260702988262336471">פתיחת תפריט Chromium</translation> <translation id="12739128458173458">כדי לשלוח את הכרטיסייה הזו למכשיר אחר, יש להיכנס ל-Chromium בשני המכשירים.</translation> <translation id="1361748954329991663">Chromium אינו מעודכן. אם אין עדכון זמין ב-<ph name="BEGIN_LINK" />App Store<ph name="END_LINK" />, ייתכן שהמכשיר שלך אינו תומך עוד בגרסאות החדשות של Chromium.</translation> @@ -33,7 +33,7 @@ <translation id="1611584326765829247">Chromium יכול לעזור לך לעקוב אחר החבילות שלך</translation> <translation id="1617663976202781617">נתונים מסנכרון Chromium</translation> <translation id="164952285225495380">החבילה הזו כבר נוספה למעקב ב-Chromium.</translation> -<translation id="1707458603865303524">שימוש ב-Chromium בכל פעם שמקישים על קישורים בהודעות או באפליקציות אחרות.</translation> +<translation id="1707458603865303524">שימוש ב-Chromium בכל פעם שלוחצים על קישורים בהודעות או באפליקציות אחרות.</translation> <translation id="1722370509450468186">הסיסמה שלך תישמר בחשבון (<ph name="EMAIL" />).</translation> <translation id="1811860791247653035">כדי להשתמש בהתאמה אישית ובתכונות אחרות, צריך לכלול את Chromium ב<ph name="FEATURE_NAME_1" /> וב<ph name="FEATURE_NAME_2" /></translation> <translation id="1838412507805038478">Chromium אימת ש-<ph name="ISSUER" /> הנפיק את האישור של האתר הזה.</translation> @@ -64,7 +64,7 @@ <translation id="2374627437126809292">בעזרת מפות Google, אפשר לקבל ב-Chromium מסלולים ומידע מקומי על כתובות שהמערכת מזהה.</translation> <translation id="2386292341327187942">בתיבה לחיפוש ווידג'טים, מזינים 'Chromium'</translation> <translation id="2426113998523353159">לפי דרישת הארגון שלך, עליך להיכנס לחשבון כדי להשתמש ב-Chromium.</translation> -<translation id="2450140762465183767">עכשיו משתמשים ב-Chromium בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="2450140762465183767">עכשיו משתמשים ב-Chromium בכל פעם שלוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="2459183986985456602">פתיחת הכרטיסייה האחרונה שלי ב-Chromium</translation> <translation id="2476409803017965813">תמיד אפשר לבחור אפשרויות אחרות בהגדרות של Chromium.</translation> <translation id="2478931088402984578">בוחרים באפשרות<ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" />.</translation> @@ -86,7 +86,7 @@ <translation id="2942241131342758843">כדאי להגדיר את Chromium כדפדפן ברירת המחדל כדי לפתוח קישורים, לחפש מווידג'טים ולבצע מילוי אוטומטי של סיסמאות באפליקציות אחרות</translation> <translation id="2977470724722393594">Chromium מעודכן</translation> <translation id="3044857325852340337">הנתונים של Chromium נמחקו</translation> -<translation id="3054480780637153380">פותחים את הגדרות Chromium ב-iOS, מקישים על 'אפליקציית ברירת המחדל לדפדפן' ובוחרים ב-Chromium.</translation> +<translation id="3054480780637153380">פותחים את הגדרות Chromium ב-iOS, לוחצים על 'אפליקציית ברירת המחדל לדפדפן' ובוחרים ב-Chromium.</translation> <translation id="3078941082359356771">{COUNT,plural, =1{Chromium יכול לעזור לך לעקוב אחר החבילה הזו בדף 'כרטיסייה חדשה'.}one{Chromium יכול לעזור לך לעקוב אחר החבילות האלה בדף 'כרטיסייה חדשה'.}two{Chromium יכול לעזור לך לעקוב אחר החבילות האלה בדף 'כרטיסייה חדשה'.}other{Chromium יכול לעזור לך לעקוב אחר החבילות האלה בדף 'כרטיסייה חדשה'.}}</translation> <translation id="3102849287235003384">כדי לצאת מחשבון Google שלך בכל האתרים, עליך <ph name="BEGIN_LINK" />לצאת מ-Chromium<ph name="END_LINK" />.</translation> <translation id="3115956258722352278">להגדיר את Chromium כדפדפן ברירת המחדל?</translation> @@ -142,7 +142,7 @@ כדי לשנות את ההגדרה הזו, עליך <ph name="BEGIN_LINK" />למחוק את נתוני Chromium בחשבון<ph name="END_LINK" />.</translation> <translation id="4578500311756617174">טיפ ל-Chromium: כדאי להגדיר את Chromium כדפדפן ברירת המחדל</translation> -<translation id="458786853569524949">עכשיו אפשר להשתמש ב-Chromium כשמקישים על קישורים באימיילים, במסמכים ובאפליקציות אחרות.</translation> +<translation id="458786853569524949">עכשיו אפשר להשתמש ב-Chromium כשלוחצים על קישורים באימיילים, במסמכים ובאפליקציות אחרות.</translation> <translation id="4633738821577273991">אפשר לקבל את הגרסה המשופרת של הגלישה הבטוחה גם לפרופיל Chromium הזה</translation> <translation id="4654936625574199632">כדי לעזור בשיפור האפליקציה, Chromium ישלח נתוני שימוש וקריסות אל Google. <ph name="BEGIN_LINK" />ניהול<ph name="END_LINK" /></translation> <translation id="4681781466797808448">הפעלת הסורק של Chromium</translation> @@ -157,13 +157,13 @@ <translation id="4985291216379576555">אופליין, Chromium לא יכול לחפש עדכונים</translation> <translation id="4996471330284142407">Chromium מאפשר לך להספיק יותר באופן פשוט, מאובטח ומהיר מאי פעם.</translation> <translation id="4999538639245140991">יציאה מחשבון שמנוהל על ידי <ph name="SIGNOUT_MANAGED_DOMAIN" /> תגרום למחיקת נתוני Chromium שלך מהמכשיר הזה. הנתונים האלה יישארו בחשבון Google שלך.</translation> -<translation id="5042011327527167688">מקישים על 'הצגה במפות Google ב-Chromium'.</translation> +<translation id="5042011327527167688">לוחצים על 'הצגה במפות Google ב-Chromium'.</translation> <translation id="5044871537677053278">Chromium מזהה כתובות ונעזר במפות Google כדי לספק מסלולים ומידע מקומי.</translation> <translation id="5048795749726991615">אפשר להשתמש ב-Chromium למילוי אוטומטי כדי לגשת בקלות לסיסמאות השמורות שלך באפליקציות אחרות</translation> <translation id="5053429694249468757">נתוני Chromium נמחקים…</translation> <translation id="5071749685031362629">Chromium ל-iOS</translation> <translation id="5088872414922783602">אפשר לגשת מהר יותר ל-Chromium דרך ה-Dock במסך הבית</translation> -<translation id="5124429847818367226">אפשר עכשיו להשתמש ב-Chromium בכל פעם שגולשים או מקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="5124429847818367226">אפשר עכשיו להשתמש ב-Chromium בכל פעם שגולשים או לוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="5131565040785979529">הארגון שלך, <ph name="DOMAIN" />, מנהל את החשבון שנכנסת אליו ואת אופן השימוש ב-Chromium.</translation> <translation id="5224391634244552924">אין סיסמאות שמורות. Chromium יכול לבדוק את הסיסמאות שלך רק אם שמרת אותן.</translation> <translation id="5259423875997548710">חיפוש רכיבים חזותיים ב-Chromium.</translation> @@ -177,7 +177,7 @@ <translation id="5453478652154926037">Chromium לא יכול לבדוק את הסיסמאות שלך.</translation> <translation id="5479292367402350143">כדי להגדיר את Chromium כדפדפן ברירת המחדל: 1. פותחים את ההגדרות -2. מקישים על אפליקציית הדפדפן שמוגדרת כברירת מחדל +2. לוחצים על אפליקציית הדפדפן שמוגדרת כברירת מחדל 3. בוחרים באפשרות Chromium</translation> <translation id="5521125884468363740">כדי לראות את הכרטיסיות שלך מכל מקום שבו פתחת את Chromium יש להיכנס לחשבון ולהפעיל את הסנכרון</translation> <translation id="5522297504975449419">חלק מהתכונות של Chromium לא יהיו זמינות יותר.</translation> @@ -207,13 +207,13 @@ <translation id="61109258320235597">כדי להשתמש בנתוני Chromium ולשמור אותם בחשבון Google, עליך להזין את ביטוי הסיסמה שלך.</translation> <translation id="6132149203299792222">כניסה באמצעות חשבון Google כדי לסנכרן את הסיסמאות, הסימניות ועוד.</translation> <translation id="6148377327556085395">הוספת סימניות אל Chromium</translation> -<translation id="6154098560469640583">שימוש ב-Chromium בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="6154098560469640583">שימוש ב-Chromium בכל פעם שלוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="6170619162539716595">מתן הרשאה ל-Chromium להשתמש במפות Google כדי לספק מסלולים ומידע מקומי על כתובות שזוהו.</translation> <translation id="6197255575340902638">הסתרה של '<ph name="MODULE_NAME" />' תוביל להפסקת המעקב האוטומטי אחר חבילות ב-Chromium בעתיד, ולמחיקה של כל הנתונים הקודמים של המעקב אחר חבילות.</translation> <translation id="6247557882553405851">מנהל הסיסמאות של Google</translation> <translation id="6268381023930128611">האם לצאת מ-Chromium?</translation> <translation id="6324041800010509197">ביקור בתצוגת הכרטיסיות ב-Chromium</translation> -<translation id="6325378625795868881">שימוש ב-Chromium בכל פעם שמקישים על קישורים בהודעות ובאפליקציות אחרות.</translation> +<translation id="6325378625795868881">שימוש ב-Chromium בכל פעם שלוחצים על קישורים בהודעות ובאפליקציות אחרות.</translation> <translation id="6337530241089703714">האם למחוק את נתוני Chromium ממכשיר זה או לשמור אותם?</translation> <translation id="6424492062988593837">Chromium ממשיך להשתפר! קיימת גרסה חדשה.</translation> <translation id="6433172051771630690">טיפים שיעזרו לך ליהנות מהמיטב של Chromium.</translation> @@ -266,7 +266,7 @@ <translation id="7859432380288435856">Chromium יזהה מספרי מעקב אחר חבילות באתרים שבהם ביקרת, ואפשר יהיה לראות עדכונים על חבילות בדף 'כרטיסייה חדשה'. כדי שניתן יהיה לספק את התכונה הזו, וגם לשפר את שופינג לכולם, הנתונים שלך ישותפו עם Google.</translation> <translation id="7890287942691234100">התחלת השימוש בסורק של Chromium</translation> <translation id="7905064834449738336">אם משתמשים בסיסמה והיא פורסמה באינטרנט, מוצגת אזהרה ב-Chromium. כשהבדיקה הזו מתבצעת, הסיסמאות ושמות המשתמשים מוצפנים, כך שאיש לא יכול לקרוא אותם, כולל Google.</translation> -<translation id="7928628054454574139">Chromium ייפתח בכל פעם שתתבצע הקשה על קישור באפליקציות אחרות</translation> +<translation id="7928628054454574139">Chromium ייפתח בכל פעם שתתבצע לחיצה על קישור באפליקציות אחרות</translation> <translation id="7934404985878918282">הצגה של רשימת הקריאה ב-Chromium</translation> <translation id="7951793218148208717">תיפתח כרטיסייה חדשה ב-Chromium.</translation> <translation id="7980860476903281594">המיקום שלך ישותף על ידי Chromium עם אתרים שיאושרו על ידך.</translation> @@ -314,7 +314,7 @@ <translation id="9022552996538154597">כניסה אל Chromium</translation> <translation id="9031260906956926157">חלק מהנתונים ב-Chromium עדיין לא נשמרו בחשבון Google. כדאי לחכות כמה דקות לפני היציאה מהחשבון. אם תתבצע יציאה מהחשבון, הנתונים האלה יימחקו.</translation> -<translation id="9050790730841755540">שימוש ב-Chromium בכל פעם שמקישים על קישורים באפליקציות אחרות.</translation> +<translation id="9050790730841755540">שימוש ב-Chromium בכל פעם שלוחצים על קישורים באפליקציות אחרות.</translation> <translation id="9059693977935746710">אין צורך לזכור את הסיסמה הזו. היא תישמר במנהל הסיסמאות בחשבון <ph name="EMAIL" /></translation> <translation id="9089354809943900324">Chromium אינו מעודכן</translation> <translation id="9152995302810511799">טיפ ל-Chromium: כדאי ליהנות מרמת האבטחה הכי יעילה של Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb index 6728831d..41a5ca5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
@@ -8,7 +8,7 @@ <translation id="1166460004393506534">מחיקה של נתוני הגלישה ב-Chrome</translation> <translation id="1179527450541388808">אפשר לגשת מהר יותר ל-Chrome דרך ה-Dock במסך הבית של האייפד.</translation> <translation id="1180362651362502943">המשך השימוש בנתוני Chrome בחשבון Google שלך</translation> -<translation id="1200396280085622191">שימוש ב-Chrome בכל פעם שמקישים על קישורים בהודעות ובאפליקציות אחרות.</translation> +<translation id="1200396280085622191">שימוש ב-Chrome בכל פעם שלוחצים על קישורים בהודעות ובאפליקציות אחרות.</translation> <translation id="1229222343402087523">חיפוש ${searchPhrase} ב-Chrome</translation> <translation id="1237769345474105984">מ-Chrome</translation> <translation id="124228879633599436">Chrome לא מעודכן. צריך לעדכן אותו כדי לשמור על הבטיחות.</translation> @@ -53,7 +53,7 @@ <translation id="2147651015520127414">Chrome אימת ש-<ph name="ISSUER" /> הנפיק את האישור של אתר זה.</translation> <translation id="2199719347983604670">נתונים מסנכרון Chrome</translation> <translation id="2213327331203157297">כדי להשבית את האפשרות 'ללא 'ביטול נעילה עם טביעת אצבע'' ב-Chrome, צריך להשבית אותה ב-iPhone.</translation> -<translation id="2242467532204595597">שימוש ב-Chrome בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="2242467532204595597">שימוש ב-Chrome בכל פעם שלוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="2311240109311056604">פתיחת המשחק Chrome Dino.</translation> <translation id="2339201583852607431">הסיסמה שלך תישמר בחשבון Google (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">המיקום שלך ישותף על ידי Chrome עם אתרים שיאושרו על ידך.</translation> @@ -160,7 +160,7 @@ <translation id="546541279759910616">{COUNT,plural, =1{Chrome יעזור לעקוב אחרי החבילה הזו בדף 'כרטיסייה חדשה'.}one{Chrome יעזור לעקוב אחרי החבילות האלה בדף 'כרטיסייה חדשה'.}two{Chrome יעזור לעקוב אחרי החבילות האלה בדף 'כרטיסייה חדשה'.}other{Chrome יעזור לעקוב אחרי החבילות האלה בדף 'כרטיסייה חדשה'.}}</translation> <translation id="5492504007368565877">למנהל הסיסמאות של Google אין אפשרות לבדוק את הסיסמאות.</translation> <translation id="5525095647255982834">כדי לשלוח את הכרטיסייה הזו למכשיר אחר, יש להיכנס ל-Chrome במכשיר האחר.</translation> -<translation id="5527026824954593399">מקישים על 'הצגה במפות Google ב-Chrome'.</translation> +<translation id="5527026824954593399">לוחצים על 'הצגה במפות Google ב-Chrome'.</translation> <translation id="5552137475244467770">מערכת Chrome בודקת מדי פעם את הסיסמאות שלך ומשווה אותן לרשימות שהתפרסמו באינטרנט. כשהפעולה הזו מבוצעת, הסיסמאות ושמות המשתמש מוצפנים, כך שאיש לא יוכל לקרוא אותם, כולל Google.</translation> <translation id="5554520618550346933">אם משתמשים בסיסמה והיא פורסמה באינטרנט, מוצגת אזהרה ב-Chrome. כשהבדיקה הזו מתבצעת, הסיסמאות ושמות המשתמשים מוצפנים, כך שאיש לא יכול לקרוא אותם, כולל Google.</translation> <translation id="5601180634394228718">כדי לראות אילו הגדרות נוספות מתבססות על נתונים לצורך שיפור חוויית השימוש ב-Chrome, אפשר לעבור אל <ph name="BEGIN_LINK" />שירותי Google<ph name="END_LINK" />.</translation> @@ -171,7 +171,7 @@ <translation id="5690427481109656848">Google LLC</translation> <translation id="5709557627224531708">הגדרת Chrome כדפדפן ברירת המחדל</translation> <translation id="571296537125272375">Chrome לא יכול לחפש עדכונים</translation> -<translation id="5716154293141027663">Chrome ייפתח בכל פעם שתתבצע הקשה על קישור באפליקציות אחרות</translation> +<translation id="5716154293141027663">Chrome ייפתח בכל פעם שתתבצע לחיצה על קישור באפליקציות אחרות</translation> <translation id="5772407442571703917">ניתן להוריד את Chrome כאן.</translation> <translation id="5779767936254214055">ניתן לנעול את הכרטיסיות הפרטיות כשיוצאים מ-Chrome או עוברים לאפליקציה אחרת.</translation> <translation id="5808435672482059465">הצגת ההיסטוריה ב‑Chrome</translation> @@ -187,7 +187,7 @@ <translation id="6181652351336379338">חיפוש רכיבים חזותיים ב-Chrome.</translation> <translation id="6200694931081795166">כדי להגדיר את Chrome כדפדפן ברירת המחדל: 1. פותחים את ההגדרות - 2. מקישים על אפליקציית הדפדפן שמוגדרת כברירת מחדל + 2. לוחצים על אפליקציית הדפדפן שמוגדרת כברירת מחדל 3. בוחרים באפשרות Chrome.</translation> <translation id="6238746320622508509">כרטיסיות מצב אנונימי יינעלו באמצעות Chrome.</translation> <translation id="6247557882553405851">מנהל הסיסמאות של Google</translation> @@ -238,11 +238,11 @@ <translation id="722167379782941918">ההמלצה של Chrome היא הגנה משופרת</translation> <translation id="723787869754590019">שימוש ב-Chrome למילוי אוטומטי</translation> <translation id="7261678641327190792">Chrome לא יכול לבדוק את הסיסמאות שלך</translation> -<translation id="7272930098487145294">כדי לשמור תמונות צריך להקיש על 'הגדרות' על מנת לאפשר ל-Chrome להוסיף תמונות לגלריה שלך</translation> +<translation id="7272930098487145294">כדי לשמור תמונות צריך ללחוץ על 'הגדרות' על מנת לאפשר ל-Chrome להוסיף תמונות לגלריה שלך</translation> <translation id="7275945473750112644">החשבון שלך מנוהל על ידי <ph name="HOSTED_DOMAIN" />, ולכן הנתונים שלך מ-Chrome יימחקו מהמכשיר הזה</translation> <translation id="7284245284340063465">אם שכחת את ביטוי הסיסמה או שברצונך לשנות את ההגדרה הזו, <ph name="BEGIN_LINK" />עליך למחוק את נתוני Chrome בחשבון<ph name="END_LINK" />.</translation> <translation id="7296102444587051536">Chrome ל-iOS</translation> -<translation id="7299681342915173313">עכשיו אפשר להשתמש ב-Chrome כשמקישים על קישורים באימיילים, במסמכים ובאפליקציות אחרות.</translation> +<translation id="7299681342915173313">עכשיו אפשר להשתמש ב-Chrome כשלוחצים על קישורים באימיילים, במסמכים ובאפליקציות אחרות.</translation> <translation id="7344094882820374540">נהנים מרמת האבטחה הכי יעילה של Chrome מפני אתרים מסוכנים</translation> <translation id="7349129508108954623">מתן הרשאה ל-Chrome להשתמש במפות Google כדי לספק מסלולים ומידע מקומי על כתובות שזוהו.</translation> <translation id="7394108421562933108">מפות Google ב-Chrome</translation> @@ -257,19 +257,19 @@ <translation id="7642373780953416937">אפשר לקבל התראות לגבי כל בעיה בפרטיות או באבטחה ש-Chromium מזהה באופן אוטומטי.</translation> <translation id="7660356333829433649">כדאי לחזור לכאן כדי לקבל עוד טיפים שימושיים שיעזרו לך להפיק את המירב מ-Chrome.</translation> <translation id="7662994914830945754">כדי לראות את הכרטיסיות שלך מכל מקום שבו פתחת את Chrome יש להיכנס לחשבון ולהפעיל את הסנכרון</translation> -<translation id="7693590760643069321">עכשיו משתמשים ב-Chrome בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="7693590760643069321">עכשיו משתמשים ב-Chrome בכל פעם שלוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="7698568245838009292">ל-Chrome דרושה גישה למצלמה</translation> <translation id="7707877166818730835">פתיחת הכרטיסייה האחרונה שלי ב-Chrome</translation> <translation id="776305366874821582">אפשר לגשת מהר יותר ל-Chrome דרך ה-Dock במסך הבית של האייפון.</translation> <translation id="7780154209050837198">אפשר להיכנס ל-Chrome באמצעות חשבון Google כדי להפיק את המרב מ-Chrome.</translation> -<translation id="7787205077729386167">פותחים את הגדרות Chrome ב-iOS, מקישים על 'אפליקציית ברירת המחדל לדפדפן' ובוחרים ב-Chrome.</translation> +<translation id="7787205077729386167">פותחים את הגדרות Chrome ב-iOS, לוחצים על 'אפליקציית ברירת המחדל לדפדפן' ובוחרים ב-Chrome.</translation> <translation id="778855399387580014">חיפוש בכרטיסיית Chrome חדשה.</translation> <translation id="7792140019572081272">Chrome שומר על האבטחה של מידע אישי רגיש באמצעות Face ID.</translation> <translation id="7855730255114109580">Google Chrome מעודכן</translation> <translation id="7897703007638178753">הצגת הכרטיסיות האחרונות ב-Chrome</translation> <translation id="7948283758957877064">מה חדש ב-Chrome</translation> <translation id="8000174216052461231">טיפ ל-Chrome: כדאי ליהנות מרמת האבטחה הכי יעילה של Chrome</translation> -<translation id="8006014511203279255">שימוש ב-Chrome בכל פעם שמקישים על קישורים בהודעות או באפליקציות אחרות.</translation> +<translation id="8006014511203279255">שימוש ב-Chrome בכל פעם שלוחצים על קישורים בהודעות או באפליקציות אחרות.</translation> <translation id="8014670471808569312">Chrome יציע לשמור את הסיסמה.</translation> <translation id="8018153653741938705">פשוט לשמור על הבטיחות בעזרת Google Chrome</translation> <translation id="8022947259858476807">כדאי להגדיר את Chrome כדפדפן ברירת המחדל כדי לפתוח קישורים, לחפש מווידג'טים ולבצע מילוי אוטומטי של סיסמאות באפליקציות אחרות</translation> @@ -299,7 +299,7 @@ הנתונים שלך הוצפנו באמצעות ביטוי הסיסמה ב-<ph name="TIME" />. כדי להשתמש בנתוני Chrome ולשמור אותם בחשבון Google, עליך להזין אותו.</translation> <translation id="8540666473246803645">Google Chrome</translation> <translation id="8544583291890527417">התראות לגבי כל בעיה בפרטיות או באבטחה ש-Chrome מזהה.</translation> -<translation id="8558480467877843976">אפשר עכשיו להשתמש ב-Chrome בכל פעם שגולשים או מקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> +<translation id="8558480467877843976">אפשר עכשיו להשתמש ב-Chrome בכל פעם שגולשים או לוחצים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation> <translation id="8603022514504485810">למנהל הסיסמאות של Google לא הייתה אפשרות לבדוק את כל הסיסמאות. אפשר לנסות שוב מחר או <ph name="BEGIN_LINK" />לבדוק את הסיסמאות בחשבון Google<ph name="END_LINK" />.</translation> <translation id="8630122478628016441">מפעילים את האפשרות 'כרטיסיות פרטיות יינעלו כש-Chrome ייסגר'.</translation> <translation id="8673726683583791503">קניות באמצעות Google Lens</translation> @@ -323,6 +323,6 @@ <translation id="9181628561061032322">ייפתחו הכרטיסיות האחרונות ב-Chrome.</translation> <translation id="9194404253580584015">פיד מותאם אישית שנוצר במיוחד בשבילך על ידי Google.</translation> <translation id="948597495737267756">פתיחת דף ההיסטוריה ב-Chrome.</translation> -<translation id="97300214378190234">שימוש ב-Chrome בכל פעם שמקישים על קישורים באפליקציות אחרות.</translation> +<translation id="97300214378190234">שימוש ב-Chrome בכל פעם שלוחצים על קישורים באפליקציות אחרות.</translation> <translation id="998677222109959694">ניהול הגדרות Chrome</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index aaa3f92..22b46e8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -1113,6 +1113,7 @@ <translation id="6027619584715411062">سجّل الدخول لاستخدام الإشارات المرجعية وكلمات المرور وغير ذلك على جميع أجهزتك.</translation> <translation id="6027945736510816438">هل كنت تقصد <ph name="WEBSITE" />؟</translation> <translation id="6032845897905314562">ميزة جديدة</translation> +<translation id="6038823991892265570">إدارة مساحة تخزين حساب Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />، <ph name="PUBLISHER_INFORMATION" />، <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">إغلاق</translation> <translation id="6042308850641462728">عرض المزيد</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index 00919f0..f80f385 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">আপোনাৰ আটাইবোৰ ডিভাইচত নিজৰ বুকমাৰ্ক, পাছৱৰ্ড আৰু আন বহুতো লাভ কৰিবলৈ ছাইন ইন কৰক।</translation> <translation id="6027945736510816438">আপুনি <ph name="WEBSITE" />ৰ কথা কৈছে নেকি?</translation> <translation id="6032845897905314562">নতুন সুবিধা</translation> +<translation id="6038823991892265570">Google ষ্ট’ৰেজ পৰিচালনা কৰক</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">বন্ধ কৰক</translation> <translation id="6042308850641462728">অধিক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index a0972eb..ca873be3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -1150,6 +1150,7 @@ <translation id="6160780110287872296">Fayl endirilsin?</translation> <translation id="6165508094623778733">Ətraflı öyrənin</translation> <translation id="6168647875670665004">Məqalə təklifləri</translation> +<translation id="6169031022444660352">Bütün saxlanılmış giriş məlumatlarını silmək üçün öncə cihazınızda giriş kodu təyin etməlisiniz.</translation> <translation id="6173499589275053515">Parol Google Hesabınızda (<ph name="EMAIL" />) yadda saxlanıldı</translation> <translation id="6187302354554850004">Son sinxronizasiya: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319">Yaradılıb: <ph name="DATE" /></translation> @@ -1201,6 +1202,7 @@ <translation id="6355820205320395730">Zəif parolları tapmaq asandır. Güclü parol yaratdığınızdan əmin olun. <ph name="BEGIN_LINK" />Daha çox təhlükəsizlik məsləhətinə baxın.<ph name="END_LINK" /></translation> <translation id="6361848730467328243"><ph name="DOMAIN_NAME" /> izləyin</translation> <translation id="6368038301482806847">Siyahıdan axtarış mexanizmi seçin.</translation> +<translation id="6368102751067608420">Bütün parol meneceri datasını silmək üçün</translation> <translation id="6374469231428023295">Yenidən cəhd edin</translation> <translation id="6387994324662817823">Parollar yalnız bu cihazda Google Parol Menecerində saxlanılır.</translation> <translation id="6404422529625928907">Google Diskdə açın</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index 8c0dc04..8fa66c3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Влезте в профила си, за да имате достъп до своите отметки, пароли и др. на всичките си устройства.</translation> <translation id="6027945736510816438">Може би имахте предвид <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">нова функция</translation> +<translation id="6038823991892265570">Управление на хранилището в Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Затваряне</translation> <translation id="6042308850641462728">Още</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index c2995e4..8332004a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -1116,6 +1116,7 @@ <translation id="6027619584715411062">আপনার সব ডিভাইসে বুকমার্ক, পাসওয়ার্ড ও আরও অনেক কিছু পেতে সাইন-ইন করুন।</translation> <translation id="6027945736510816438">আপনি কি <ph name="WEBSITE" /> ডোমেনের কথা বলছেন?</translation> <translation id="6032845897905314562">নতুন ফিচার</translation> +<translation id="6038823991892265570">Google স্টোরেজ ম্যানেজ করুন</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">বন্ধ</translation> <translation id="6042308850641462728">আরও</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index c8c409d2..a0f4ddf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Prijavite se da dobijete oznake, lozinke i još mnogo toga na svim uređajima.</translation> <translation id="6027945736510816438">Jeste li mislili <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">nova funkcija</translation> +<translation id="6038823991892265570">Upravljanje Google pohranom</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="6042308850641462728">Više</translation> @@ -1150,6 +1151,7 @@ <translation id="6160780110287872296">Preuzeti fajl?</translation> <translation id="6165508094623778733">Saznajte više</translation> <translation id="6168647875670665004">Prijedlozi članaka</translation> +<translation id="6169031022444660352">Da izbrišete sve sačuvane akreditive, prvo morate postaviti šifru na uređaju.</translation> <translation id="6173499589275053515">Lozinka je sačuvana na Google računu, <ph name="EMAIL" /></translation> <translation id="6187302354554850004">Posljednji put sinhronizirano: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319">Kreirano je <ph name="DATE" /></translation> @@ -1201,6 +1203,7 @@ <translation id="6355820205320395730">Slabe lozinke je lako pogoditi. Vodite računa da kreirate jake lozinke. <ph name="BEGIN_LINK" />Pogledajte još sigurnosnih savjeta.<ph name="END_LINK" /></translation> <translation id="6361848730467328243">Prati <ph name="DOMAIN_NAME" /></translation> <translation id="6368038301482806847">Odaberite pretraživač s liste.</translation> +<translation id="6368102751067608420">Da izbrišete sve podatke upravitelja lozinki</translation> <translation id="6374469231428023295">Pokušaj ponovo</translation> <translation id="6387994324662817823">Lozinke se pohranjuju u Google Upravitelju lozinki samo na ovom uređaju.</translation> <translation id="6404422529625928907">Otvaranje na Google Disku</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 2dc51f5..4b5e8d8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Inicia la sessió per obtenir les teves adreces d'interès, contrasenyes i més en tots els dispositius.</translation> <translation id="6027945736510816438">Volies dir <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">funció nova</translation> +<translation id="6038823991892265570">Gestiona l'emmagatzematge de Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Tanca</translation> <translation id="6042308850641462728">Més</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index b3765ad..4a09318 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Συνδεθείτε για να έχετε τους σελιδοδείκτες, τους κωδικούς πρόσβασης και άλλα δεδομένα διαθέσιμα σε όλες τις συσκευές σας.</translation> <translation id="6027945736510816438">Μήπως εννοούσατε <ph name="WEBSITE" />;</translation> <translation id="6032845897905314562">νέα λειτουργία</translation> +<translation id="6038823991892265570">Διαχείριση αποθηκευτικού χώρου Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Κλείσιμο</translation> <translation id="6042308850641462728">Περισσότερα</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 17a88fe..36c1d6aa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Inicia sesión para acceder a tus marcadores, contraseñas y más en todos tus dispositivos.</translation> <translation id="6027945736510816438">¿Quieres decir <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">nueva función</translation> +<translation id="6038823991892265570">Gestionar almacenamiento de Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Cerrar</translation> <translation id="6042308850641462728">Más</translation> @@ -1150,6 +1151,7 @@ <translation id="6160780110287872296">¿Descargar archivo?</translation> <translation id="6165508094623778733">Más información</translation> <translation id="6168647875670665004">Sugerencias de artículos</translation> +<translation id="6169031022444660352">Para eliminar todas las credenciales guardadas, primero debes configurar una contraseña en tu dispositivo.</translation> <translation id="6173499589275053515">Contraseña guardada en tu cuenta de Google (<ph name="EMAIL" />)</translation> <translation id="6187302354554850004">Última sincronización: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319">Fecha de creación: <ph name="DATE" /></translation> @@ -1201,6 +1203,7 @@ <translation id="6355820205320395730">Las contraseñas poco seguras son fáciles de adivinar. Asegúrate de que tus contraseñas sean seguras. <ph name="BEGIN_LINK" />Consulta más consejos sobre seguridad<ph name="END_LINK" />.</translation> <translation id="6361848730467328243">Seguir a <ph name="DOMAIN_NAME" /></translation> <translation id="6368038301482806847">Elige un buscador de la lista.</translation> +<translation id="6368102751067608420">Para eliminar todos los datos del Gestor de contraseñas</translation> <translation id="6374469231428023295">Reintentar</translation> <translation id="6387994324662817823">Las contraseñas se guardan en el Gestor de contraseñas de Google solo en este dispositivo.</translation> <translation id="6404422529625928907">Abrir en Google Drive</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index e07f6c8..183493b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">به سیستم وارد شوید تا نشانکها، گذرواژهها، و موارد دیگر را در همه دستگاههایتان دریافت کنید.</translation> <translation id="6027945736510816438">منظورتان <ph name="WEBSITE" /> بود؟</translation> <translation id="6032845897905314562">ویژگی جدید</translation> +<translation id="6038823991892265570">مدیریت فضای ذخیرهسازی Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />، <ph name="PUBLISHER_INFORMATION" />، <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">بستن</translation> <translation id="6042308850641462728">بیشتر</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index 8560aca..2ab1445 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -1150,6 +1150,7 @@ <translation id="6160780110287872296">I-download ang file?</translation> <translation id="6165508094623778733">Matuto pa</translation> <translation id="6168647875670665004">Suhestyong artikulo</translation> +<translation id="6169031022444660352">Para ma-delete ang lahat ng naka-save na kredensyal, kailangan mo munang mag-set up ng passcode sa iyong device.</translation> <translation id="6173499589275053515">Na-save ang password sa iyong Google Account, <ph name="EMAIL" /></translation> <translation id="6187302354554850004">Huling na-sync: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319">Ginawa noong <ph name="DATE" /></translation> @@ -1201,6 +1202,7 @@ <translation id="6355820205320395730">Madaling hulaan ang mahihinang password. Tiyaking malalakas na password ang gagawin mo. <ph name="BEGIN_LINK" />Tumingin pa ng mga tip sa seguridad.<ph name="END_LINK" /></translation> <translation id="6361848730467328243">Subaybayan ang <ph name="DOMAIN_NAME" /></translation> <translation id="6368038301482806847">Pumili ng search engine mula sa listahan.</translation> +<translation id="6368102751067608420">Para ma-delete ang lahat ng data ng passwords manager</translation> <translation id="6374469231428023295">Subukan Ulit</translation> <translation id="6387994324662817823">Sine-save ang mga password sa Google Password Manager sa device lang na ito.</translation> <translation id="6404422529625928907">Buksan sa Google Drive</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 29f4675..a891166 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">તમારા બધા ડિવાઇસ પર બુકમાર્ક અને પાસવર્ડ જેવું બીજું ઘણું મેળવવા સાઇન ઇન કરો.</translation> <translation id="6027945736510816438">શું તમારો અર્થ <ph name="WEBSITE" /> હતો?</translation> <translation id="6032845897905314562">નવી સુવિધા</translation> +<translation id="6038823991892265570">Google સ્ટોરેજ મેનેજ કરો</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">બંધ કરો</translation> <translation id="6042308850641462728">વધુ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index 1173acd..ac9e20b9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">अपने सभी डिवाइसों पर बुकमार्क, पासवर्ड वगैरह का ऐक्सेस पाने के लिए साइन इन करें.</translation> <translation id="6027945736510816438">क्या आपका मतलब <ph name="WEBSITE" /> से है?</translation> <translation id="6032845897905314562">नई सुविधा</translation> +<translation id="6038823991892265570">Google खाते का स्टोरेज मैनेज करें</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">बंद करें</translation> <translation id="6042308850641462728">और ज़्यादा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 2b22bd0..e636869 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Prijavite se kako biste imali pristup svojim oznakama, zaporkama i ostalom na svim svojim uređajima.</translation> <translation id="6027945736510816438">Jeste li mislili <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">nova značajka</translation> +<translation id="6038823991892265570">Upravljanje Google pohranom</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="6042308850641462728">Više</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index cbd8ab5..1c5622a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -1150,6 +1150,7 @@ <translation id="6160780110287872296">Sækja skrá?</translation> <translation id="6165508094623778733">Frekari upplýsingar</translation> <translation id="6168647875670665004">Tillögur um greinar</translation> +<translation id="6169031022444660352">Til að eyða öllum vistuðum skilríkjum verður þú fyrst að setja upp aðgangskóða í tækinu þínu.</translation> <translation id="6173499589275053515">Aðgangsorð vistað á Google-reikningnum þínum, <ph name="EMAIL" /></translation> <translation id="6187302354554850004">Síðast samstillt: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319">Búið til <ph name="DATE" /></translation> @@ -1201,6 +1202,7 @@ <translation id="6355820205320395730">Léleg aðgangsorð eru þau sem auðvelt er að giska á. Gakktu úr skugga um að þú búir til traust aðgangsorð. <ph name="BEGIN_LINK" />Sjá fleiri öryggisábendingar.<ph name="END_LINK" /></translation> <translation id="6361848730467328243">Fylgja <ph name="DOMAIN_NAME" /></translation> <translation id="6368038301482806847">Veldu leitarvél af listanum.</translation> +<translation id="6368102751067608420">Til að eyða öllum gögnum aðgangsorðastjórnunar</translation> <translation id="6374469231428023295">Reyna aftur</translation> <translation id="6387994324662817823">Aðgangsorð eru aðeins vistuð í aðgangsorðastjórnun Google í þessu tæki.</translation> <translation id="6404422529625928907">Opna í Google Drive</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index b98b981..027b861 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -78,7 +78,7 @@ <translation id="1321993286294231467">קרתה שגיאה בשמירת התמונה.</translation> <translation id="1322735045095424339">מצב אנונימי נדרש על ידי הארגון שלך</translation> <translation id="1323735185997015385">מחיקה</translation> -<translation id="132683371494960526">יש להקיש פעמיים כדי לשנות את תיקיית האב.</translation> +<translation id="132683371494960526">יש ללחוץ פעמיים כדי לשנות את תיקיית האב.</translation> <translation id="1333455942675373522">מקלדת</translation> <translation id="1334485477792811969">שירותי אינטרנט</translation> <translation id="1335767868357998043">בחירת המיקום של סרגל הכתובות</translation> @@ -101,7 +101,7 @@ <translation id="1396260204083880024">נכנסת לחשבון בתור <ph name="USER_NAME" />. <ph name="USER_EMAIL" />. לפתיחת תפריט החשבון.</translation> <translation id="1397144142234474689">הסתרת ההיסטוריה</translation> <translation id="1407135791313364759">פתיחת כל הכרטיסיות</translation> -<translation id="1408847409015257906">מקישים על 'פרטיות ואבטחה'.</translation> +<translation id="1408847409015257906">לוחצים על 'פרטיות ואבטחה'.</translation> <translation id="1411386976162024013">חיפוש חזותי ב-Lens</translation> <translation id="1417474386970818917">יציאה מהחשבון ומחיקה</translation> <translation id="1426410128494586442">כן</translation> @@ -178,7 +178,7 @@ <translation id="1715515772563243997">אם הכתובת <ph name="SITE" /> מהימנה מבחינתך, אפשר להשתמש בסיסמה שנשמרה כדי להיכנס לחשבון.</translation> <translation id="1728549374069268714">הדבקה והמשך</translation> <translation id="1732468323901456775">הפעלת ההתראות של <ph name="MODULE_NAME" /></translation> -<translation id="1740468249224277719">יש להקיש פעמיים כדי להתקין.</translation> +<translation id="1740468249224277719">יש ללחוץ פעמיים כדי להתקין.</translation> <translation id="1740650426894359238">החלפת פרופיל</translation> <translation id="1743244221910283364">מחיקת השינויים</translation> <translation id="174998178145075354">{count,plural, =1{אפשרות אחת ({count}) לכתובת זמינה מעל המקלדת.}one{{count} אפשרויות לכתובת זמינות מעל המקלדת.}two{{count} אפשרויות לכתובת זמינות מעל המקלדת.}other{{count} אפשרויות לכתובת זמינות מעל המקלדת.}}</translation> @@ -206,7 +206,7 @@ <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> -<translation id="1864266050569350424">באתר שבו שמרת סיסמה, מקישים על שדה הסיסמה לכניסה.</translation> +<translation id="1864266050569350424">באתר שבו שמרת סיסמה, לוחצים על שדה הסיסמה לכניסה.</translation> <translation id="1872096359983322073">פנס</translation> <translation id="1875733418125333939"><ph name="FILENAME" />.</translation> <translation id="1879793121657209834">יש לך אפשרות לבחור מה לעשות עם נתוני הגלישה הקיימים במכשיר הזה, כמו הסיסמאות, ההיסטוריה ועוד.</translation> @@ -292,7 +292,7 @@ <translation id="2236949375853147973">הפעילות שלי</translation> <translation id="2240256190924001613">יש פרופיל של הגדרות אישיות</translation> <translation id="2245007488813216650">בתהליך תרגום…</translation> -<translation id="2249119578464404734">בחלק העליון של המסך, מקישים על סמל החיפוש</translation> +<translation id="2249119578464404734">בחלק העליון של המסך, לוחצים על סמל החיפוש</translation> <translation id="2251686759395008410">תפריט ← היסטוריה</translation> <translation id="2252749852083403809">מתבצעת שמירה ב-Drive של <ph name="USER_EMAIL" />.</translation> <translation id="2256933947031277845">הארגון מאפשר לך להיכנס לדפדפן רק באמצעות חשבונות מסוימים.</translation> @@ -373,7 +373,7 @@ <translation id="2577522251608256362">שכונה</translation> <translation id="2579713773888829241">תיקיות באחסון השיתופי</translation> <translation id="2597486707832946298">מפיקים את המרב מדפדפן המחשב המוכר והאהוב גם באייפון.</translation> -<translation id="260378315836159338">בחלק העליון של המסך, מקישים על +</translation> +<translation id="260378315836159338">בחלק העליון של המסך, לוחצים על +</translation> <translation id="2612676031748830579">מספר הכרטיס</translation> <translation id="261305050785128654">יש אפשרות להגדיר את השפות שדוברים כך שהן יהיו ידועות לאתרים. יוצג בהם תוכן בשפות האלה, כשהדבר יתאפשר.</translation> <translation id="2613747923081026172">יצירת קבוצה</translation> @@ -426,11 +426,11 @@ <translation id="2797302972324086597">קוד מדינה</translation> <translation id="2802403747691280910"><ph name="NUMBER_OF_TABS_REMOVED" /> נסגרו</translation> <translation id="2816489851009559785">תפריט ← הגדרות ← דפדפן ברירת המחדל</translation> -<translation id="2818821771744632548">המערכת הוציאה אותך מהחשבון, <ph name="USER_NAME" />, במסגרת האיפוס של iPhone. כדי להיכנס שוב לחשבון צריך להקיש על 'המשך' למטה.</translation> +<translation id="2818821771744632548">המערכת הוציאה אותך מהחשבון, <ph name="USER_NAME" />, במסגרת האיפוס של iPhone. כדי להיכנס שוב לחשבון צריך ללחוץ על 'המשך' למטה.</translation> <translation id="2819667972867209401">כשההגדרה מופעלת, הנתונים נשמרים בחשבון שלך ב-Google. כשההגדרה מושבתת, הנתונים נשמרים רק במכשיר הזה ונמחקים כשיוצאים מהחשבון.</translation> <translation id="2827760117436553203">לשמור את הנתונים בנפרד?</translation> <translation id="2829172210806130158">חיפוש במסך</translation> -<translation id="2834399722155632105">3. מקישים על 'אפשרויות של סיסמאות'</translation> +<translation id="2834399722155632105">3. לוחצים על 'אפשרויות של סיסמאות'</translation> <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation> <translation id="284581348330507117">חשוב ליצור סיסמאות ייחודיות</translation> <translation id="2856883624744451946">שם הקבוצה</translation> @@ -502,12 +502,12 @@ <translation id="3190736958609431397">ביטול המעקב</translation> <translation id="3208260410153224535">הכניסה הושבתה על ידי הארגון שלך. סימניות, סיסמאות ונתונים נוספים חדשים יישמרו רק במכשיר הזה.</translation> <translation id="3213807041830307252">קונים, מתרגמים ומזהים את מה שרואים באמצעות המצלמה וגלריית התמונות.</translation> -<translation id="3214379938835224220">יצאת מהחשבון במהלך האיפוס של iPad. כדי להיכנס אליו, יש להקיש על 'המשך' למטה.</translation> +<translation id="3214379938835224220">יצאת מהחשבון במהלך האיפוס של iPad. כדי להיכנס אליו, יש ללחוץ על 'המשך' למטה.</translation> <translation id="3224075676564434205">הכרטיסיות יישארו פתוחות במכשיר הזה, אבל הקבוצה תימחק מכל המכשירים שמחוברים לחשבון <ph name="USER_EMAIL" />.</translation> <translation id="3224641773458703735">כדי שניתן יהיה לייצא את הסיסמאות, יש להגדיר קוד גישה במכשיר.</translation> <translation id="3227137524299004712">מיקרופון</translation> <translation id="3235063766008841141">הפרטים הוזנו לאתר מטעה ונחשפו בעקבות פרצה באבטחת מידע.</translation> -<translation id="3235242129752692527">עורכים את פרטי האירוע ומקישים על 'שמירה'.</translation> +<translation id="3235242129752692527">עורכים את פרטי האירוע ולוחצים על 'שמירה'.</translation> <translation id="3240426699337459095">הקישור הועתק</translation> <translation id="3244271242291266297">MM</translation> <translation id="3245429137663807393">אם בנוסף ישותפו דוחות שימוש ב-Chrome, הדוחות האלה יכללו את כתובות ה-URL שבהן ביקרת</translation> @@ -569,7 +569,7 @@ <translation id="355765753469272474">ביטול</translation> <translation id="3562379378751492229">אפשר לבחור את המיקום שהכי נוח לך.</translation> <translation id="3565930036634619844">מקש Tab. <ph name="TAB_INDEX" /> מתוך <ph name="NUMBER_OF_TABS" />.</translation> -<translation id="3570693105179140209">בהקשה כפולה יוצגו סיסמאות נוספות.</translation> +<translation id="3570693105179140209">בלחיצה כפולה יוצגו סיסמאות נוספות.</translation> <translation id="3572607909481582402">בחשבון Google שלך</translation> <translation id="3575234738189584619">חיפוש באמצעות Lens</translation> <translation id="3575426792457739946">הרשימה הזו מכילה את כל הפרופילים שאפשר לעבור אליהם.</translation> @@ -668,7 +668,7 @@ <translation id="4028871427853484857">שמירה בחשבון…</translation> <translation id="4038354071007134711">אין במכשיר זה אף אפליקציה שניתן לפתוח באמצעותה את הקובץ.</translation> <translation id="4042870976416480368">חיפוש בדף</translation> -<translation id="4045648459118332842">גישה לסיסמאות השמורות שלך בכל אפליקציה בהקשה אחת</translation> +<translation id="4045648459118332842">גישה לסיסמאות השמורות שלך בכל אפליקציה בלחיצה אחת</translation> <translation id="4049419681095579435">החבילה כבר נוספה למעקב</translation> <translation id="4049507953662678203">צריך לוודא שיש חיבור לרשת ולנסות שוב.</translation> <translation id="4054572406751135230">מתעדכנים בחדשות, בספורט ועוד.</translation> @@ -707,7 +707,7 @@ <translation id="422474357428465195">יש לך כמה בעיות בסיסמאות שעלולות לסכן את האבטחה שלך.</translation> <translation id="422477017457571619">הגנה מבוססת-AI בזמן אמת מפני אתרים, הורדות ותוספים מסוכנים, על סמך נתוני הגלישה שלך שנשלחים אל Google</translation> <translation id="4231395118547300571">ההתראות של הטיימר לדיווח על מצב מסוכן מופעלות</translation> -<translation id="4237377247299956313">מקישים על <ph name="BEGIN_BOLD" />אפליקציית הדפדפן שמוגדרת כברירת מחדל<ph name="END_BOLD" />.</translation> +<translation id="4237377247299956313">לוחצים על <ph name="BEGIN_BOLD" />אפליקציית הדפדפן שמוגדרת כברירת מחדל<ph name="END_BOLD" />.</translation> <translation id="4242533952199664413">פתיחת ההגדרות</translation> <translation id="4250432749243022864">{count,plural, =0{פתיחת {count} כרטיסיות}=1{פתיחת הכרטיסייה ({count})}one{פתיחת {count} הכרטיסיות}two{פתיחת {count} הכרטיסיות}other{פתיחת {count} הכרטיסיות}}</translation> <translation id="4250680216510889253">לא</translation> @@ -716,7 +716,7 @@ <translation id="4256782883801055595">רישיונות קוד פתוח</translation> <translation id="4263576668337963058">הצגה של פעולות זמינות בדף</translation> <translation id="4267586310863245665">{COUNT,plural, =1{סגרת אזהרה אחת ({COUNT})}one{סגרת {COUNT} אזהרות}two{סגרת {COUNT} אזהרות}other{סגרת {COUNT} אזהרות}}</translation> -<translation id="4271575273430679392">כדי לפתוח את ההיסטוריה, מקישים הקשה כפולה ולוחצים לחיצה ארוכה</translation> +<translation id="4271575273430679392">כדי לפתוח את ההיסטוריה, לוחצים לחיצה כפולה ולוחצים לחיצה ארוכה</translation> <translation id="4272631900155121838">כדי לסרוק את קוד ה-QR, יש להפעיל את המצלמה דרך ההגדרות</translation> <translation id="4277990410970811858">גלישה בטוחה</translation> <translation id="4279431713294750185">אפשר להחליק את הקצה כדי לעבור קדימה.</translation> @@ -731,7 +731,7 @@ <translation id="4320848494125124980">מהזמן האחרון</translation> <translation id="4322394346347055525">סגירת כרטיסיות אחרות</translation> <translation id="4324735664183300693">הפעלת ההתראות</translation> -<translation id="4326912346867677256">כדי להיכנס לחשבון בצורה מאובטחת, מקישים על 'שימוש בסיסמה'.</translation> +<translation id="4326912346867677256">כדי להיכנס לחשבון בצורה מאובטחת, לוחצים על 'שימוש בסיסמה'.</translation> <translation id="4328843285884395590">האחסון שלי</translation> <translation id="4331177082088332784">אפשר לנהל את ההגדרה הזו בBEGIN_LINKהגדרות התוכןEND_LINK</translation> <translation id="4334428914252001502">מאמר אחד שלא נקרא.</translation> @@ -743,7 +743,7 @@ <translation id="4367971618859387374">השם המוצג</translation> <translation id="4375772272517383391">סגירת כל הכרטיסיות</translation> <translation id="4378154925671717803">טלפון</translation> -<translation id="4389019817280890563">צריך להקיש לשינוי שפה</translation> +<translation id="4389019817280890563">צריך ללחוץ לשינוי שפה</translation> <translation id="4393294364304621138">{COUNT,plural, =1{אחרי יום אחד}one{אחרי {COUNT} ימים}two{אחרי יומיים ({COUNT})}other{אחרי {COUNT} ימים}}</translation> <translation id="4402672425188312225">{COUNT,plural, =1{כרטיסייה אחת}one{# כרטיסיות}two{# כרטיסיות}other{# כרטיסיות}}</translation> <translation id="4405320213589929829">אפשר להיעזר בכתובות בדפי אינטרנט כדי לקבל מידע מקומי ומסלולים.</translation> @@ -886,7 +886,7 @@ <translation id="5005498671520578047">העתקת הסיסמה</translation> <translation id="5016420433031926653">שליחה לכתובת <ph name="USER_EMAIL" /></translation> <translation id="5017529052065664584">15 הדקות האחרונות</translation> -<translation id="5020732097997376541">מקישים על סמל Lens</translation> +<translation id="5020732097997376541">לוחצים על סמל Lens</translation> <translation id="5024511550058813796">תהיה לך גישה להיסטוריה שלך בכל המכשירים המסונכרנים, כך שתהיה לך אפשרות להמשיך מהמקום שבו הפסקת.</translation> <translation id="5038113048373546701">רוצה לקבל התראות לגבי חדשות, ספורט ועוד על סמך תחומי העניין שלך?</translation> <translation id="5039804452771397117">זה בסדר</translation> @@ -969,7 +969,7 @@ <translation id="5415289094036440596">אי אפשר לשתף מפתחות גישה</translation> <translation id="5416455648658732408">העברה לקבוצת כרטיסיות</translation> <translation id="542659109038405424">אל</translation> -<translation id="5429624150850059322">כשחוזרים, הכרטיסיות מטושטשות עד שמקישים כדי להמשיך</translation> +<translation id="5429624150850059322">כשחוזרים, הכרטיסיות מטושטשות עד שלוחצים כדי להמשיך</translation> <translation id="5431239785743546285">דפים שקראת</translation> <translation id="5431252637281434233">המערכת תוציא אותך מהחשבון</translation> <translation id="543338862236136125">עריכת סיסמה</translation> @@ -1035,7 +1035,7 @@ <translation id="5657156137487675418">קבלת כל קובצי ה-Cookie</translation> <translation id="5659593005791499971">אימייל</translation> <translation id="5666313630530585305">נכנסים לחשבון באתר כלשהו.</translation> -<translation id="5669335982068190158">יצאת מהחשבון במהלך האיפוס של iPhone. כדי להיכנס שוב לחשבון, יש להקיש על 'המשך' למטה.</translation> +<translation id="5669335982068190158">יצאת מהחשבון במהלך האיפוס של iPhone. כדי להיכנס שוב לחשבון, יש ללחוץ על 'המשך' למטה.</translation> <translation id="5669528293118408608">www</translation> <translation id="567881659373499783">גרסה <ph name="PRODUCT_VERSION" /></translation> <translation id="5680012489335339762">לעבור לחשבון השני? נתוני החשבון שלא נשמרו יימחקו.</translation> @@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">כדאי להיכנס לחשבון כדי שהסימניות, הסיסמאות ונתונים נוספים יופיעו בכל המכשירים שלך.</translation> <translation id="6027945736510816438">האם התכוונת לאתר <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">תכונה חדשה</translation> +<translation id="6038823991892265570">ניהול נפח האחסון בחשבון Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">סגירה</translation> <translation id="6042308850641462728">עוד</translation> @@ -1124,7 +1125,7 @@ <translation id="6059103953801602038">אתרים שנמצאים במעקב נשמרים בחשבון Google שלך. ניתן לנהל אותם בהגדרות של Discover.</translation> <translation id="6059830886158432458">כאן אפשר לנהל את הסטוריז והפעילות שלך</translation> <translation id="6064824697233747382">לפי דרישת הארגון שלך, עליך להשבית את הסנכרון.</translation> -<translation id="6066301408025741299">יש להקיש כדי לבטל.</translation> +<translation id="6066301408025741299">יש ללחוץ כדי לבטל.</translation> <translation id="6074656473835429958">קבלת התראות</translation> <translation id="607620096698446287">לא ניתן להעלות את <ph name="FILENAME" /> (<ph name="FILESIZE" />)</translation> <translation id="6077126322656614846">יש הרשאת גישה למצלמה</translation> @@ -1179,7 +1180,7 @@ <translation id="628251768213143684">תמיד אפשר לנהל את הפריטים ששמורים בחשבון Google</translation> <translation id="6284652193729350524">הצגת הצעה לתרגום <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">בוטל המעקב אחר <ph name="CHANNEL_NAME" /></translation> -<translation id="6293101329759844770">כדי להפעיל גלישה בטוחה, יש להיכנס ל<ph name="BEGIN_LINK" />שירותי Google<ph name="END_LINK" /> ולהקיש על 'גלישה בטוחה'.</translation> +<translation id="6293101329759844770">כדי להפעיל גלישה בטוחה, יש להיכנס ל<ph name="BEGIN_LINK" />שירותי Google<ph name="END_LINK" /> וללחוץ על 'גלישה בטוחה'.</translation> <translation id="6295751040240588413">כינוי הכרטיס לא תקין</translation> <translation id="629730747756840877">חשבון</translation> <translation id="6301104306974789820">קבלת התראות לגבי מעקב אחר מחירים</translation> @@ -1344,7 +1345,7 @@ <translation id="6914783257214138813">כל מי שיוכל לגשת אל הקובץ המיוצא יוכל לראות את הסיסמאות שלך.</translation> <translation id="6924299883035848912">הסתרת האפשרות 'מחיקת נתוני הגלישה'</translation> <translation id="6930162026494574854">איפוס ההגדרות של Google Translate</translation> -<translation id="6930799952781667037">יש להקיש כדי לעבור לשפה הזו.</translation> +<translation id="6930799952781667037">יש ללחוץ כדי לעבור לשפה הזו.</translation> <translation id="693761253105515415">עליך להגדיר קוד גישה</translation> <translation id="6943681254152031826">{COUNT,plural, =1{לעקוב אחרי החבילה הזו?}one{לעקוב אחרי {COUNT} חבילות?}two{לעקוב אחרי {COUNT} חבילות?}other{לעקוב אחרי {COUNT} חבילות?}}</translation> <translation id="6945221475159498467">בחירה</translation> @@ -1444,7 +1445,7 @@ <translation id="7435356471928173109">מנהל המערכת כיבה את התכונה הזו</translation> <translation id="7438481509621345350">בפתיחת כרטיסייה חדשה, יוצגו לך סטוריז מהאתר <ph name="CHANNEL_NAME" />.</translation> <translation id="7451023311965289370">{count,plural, =1{הסימנייה נשמרה בתיקייה ’{title}‘}one{הסימניות נשמרו בתיקייה ‘{title}‘}two{הסימניות נשמרו בתיקייה ‘{title}‘}other{הסימניות נשמרו בתיקייה ‘{title}‘}}</translation> -<translation id="7451404862887877229">מקישים על 'פרטיות ואבטחה' ואז על 'גלישה בטוחה'</translation> +<translation id="7451404862887877229">לוחצים על 'פרטיות ואבטחה' ואז על 'גלישה בטוחה'</translation> <translation id="7454057999980797137">מדינה / ארץ</translation> <translation id="7458706065921255639">התאמה אישית וקישור</translation> <translation id="745899714366929493">כל היום</translation> @@ -1495,7 +1496,7 @@ <translation id="7640669552036055091">כרטיסיות מ-Android</translation> <translation id="7646263789464975852">תפריט ← הגדרות ← בדיקת אבטחה</translation> <translation id="7646772052135772216">סנכרון הסיסמאות לא פועל</translation> -<translation id="764827086632467055">מקישים על אפליקציית הדפדפן שמוגדרת כברירת מחדל</translation> +<translation id="764827086632467055">לוחצים על אפליקציית הדפדפן שמוגדרת כברירת מחדל</translation> <translation id="7649070708921625228">עזרה</translation> <translation id="7658239707568436148">ביטול</translation> <translation id="7662316065255305764">פרטי האתר</translation> @@ -1552,7 +1553,7 @@ <translation id="7883882164760409935">יש לך סיסמאות בשימוש חוזר.</translation> <translation id="7887174313503389866">סיור מודרך באמצעי הבקרה החשובים ביותר על פרטיות ואבטחה. לאפשרויות נוספות, יש לעבור להגדרות ספציפיות.</translation> <translation id="7887198238286927132">כדי לשמור על הפרטיות שלך, מערכת Chrome לא ממלאת את השדה הזה באופן אוטומטי.</translation> -<translation id="7887552845761062935">כדי לפתוח אפשרויות נוספות, אפשר להקיש הקשה כפולה וללחוץ לחיצה ארוכה</translation> +<translation id="7887552845761062935">כדי לפתוח אפשרויות נוספות, אפשר ללחוץ לחיצה כפולה וללחוץ לחיצה ארוכה</translation> <translation id="7889910613639381518">גישה פשוטה ומאובטחת דרך הווידג'ט של מנהל הסיסמאות של Google.</translation> <translation id="7899199123054742721">סימון הכול כ'לא נקרא'</translation> <translation id="7911190106180361398">בהתאם למדיניות הארגון שלך, אין לך אפשרות לסנכרן הכול.</translation> @@ -1591,7 +1592,7 @@ <translation id="8032569120109842252">במעקב</translation> <translation id="8035133914807600019">תיקייה חדשה…</translation> <translation id="8035412398498507358">תמונות</translation> -<translation id="8040407350301524547">לאפשרויות מסלול, מקישים על 'קבלת מסלול'.</translation> +<translation id="8040407350301524547">לאפשרויות מסלול, לוחצים על 'קבלת מסלול'.</translation> <translation id="804225253087497565"><ph name="BEGIN_LINK" />היסטוריית החיפושים<ph name="END_LINK" /> ו<ph name="BEGIN_LINK" />סוגי פעילות אחרים<ph name="END_LINK" /> יכולים להישמר בחשבון Google אחרי שנכנסים. אפשר למחוק אותם בכל שלב.</translation> <translation id="804427445359061970">כאן יופיעו הכרטיסיות שפתוחות במכשירים אחרים</translation> <translation id="8049767396294520796">אפליקציית דפדפן ברירת מחדל</translation> @@ -1612,7 +1613,7 @@ <translation id="8114753159095730575">יש קובץ זמין להורדה. האפשרויות זמינות בחלק התחתון של המסך.</translation> <translation id="8123502380991596210">הסתרת האפשרות 'מה חדש'</translation> <translation id="8123953306357309250">לבטל את הסנכרון? אפשר להפעיל את הסנכרון בכל זמן דרך ההגדרות.</translation> -<translation id="81313319706244542">2. מקישים על 'סיסמאות'</translation> +<translation id="81313319706244542">2. לוחצים על 'סיסמאות'</translation> <translation id="8131740175452115882">אישור</translation> <translation id="8132598642024322408">עכשיו במחיר <ph name="PRICE" />, היה <ph name="PREVIOUS_PRICE" />.</translation> <translation id="813370552429173916">יש להשתמש בסיסמה ייחודית לכל אתר או אפליקציה. אם מישהו יגלה סיסמה שהשתמשת בה במקומות שונים, הוא יוכל להשתמש בה כדי להיכנס גם לשאר החשבונות שלך. יש ללחוץ כדי לפתוח את האתר ולשנות את הסיסמאות עכשיו.</translation> @@ -1643,7 +1644,7 @@ <translation id="8263228331881858381">מפתח הגישה נשמר</translation> <translation id="8263809106706527890">יכול להיות שנעשה שינוי בהגדרות דפדפן ברירת המחדל. אפשר לבדוק את זה בהגדרות.</translation> <translation id="8264966119170358612">חלק מהסיסמאות השמורות שלך נחשפו ברשומות שאינן של Google עקב פרצה באבטחת מידע. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> -<translation id="826614135184049678">המערכת הוציאה אותך מהחשבון, <ph name="USER_NAME" />, במסגרת האיפוס של iPad. כדי להיכנס שוב לחשבון צריך להקיש על 'המשך' למטה.</translation> +<translation id="826614135184049678">המערכת הוציאה אותך מהחשבון, <ph name="USER_NAME" />, במסגרת האיפוס של iPad. כדי להיכנס שוב לחשבון צריך ללחוץ על 'המשך' למטה.</translation> <translation id="8273982424131314219">הפרטים ימולאו באתר <ph name="URL" /></translation> <translation id="8275068909952022340">עוד…</translation> <translation id="8278488584187265939">התאמה אישית של דף הבית</translation> @@ -1687,7 +1688,7 @@ <translation id="8473863474539038330">כתובות ועוד</translation> <translation id="8474378002946546633">אפשר התראות</translation> <translation id="8477178913400731244">מחיקת נתונים</translation> -<translation id="8481184073299279701">אפשר להקיש על הלחצן 'התחלת הרישום ביומן' כדי לאסוף רשומות יומן ושגיאות של לוח JavaScript מכל הכרטיסיות. רשומות היומן ייאספו (ויישמרו רק בזיכרון) עד לסגירת הדף הזה, או להקשה על 'הפסקת הרישום ביומן'.</translation> +<translation id="8481184073299279701">אפשר ללחוץ על הכפתור 'התחלת הרישום ביומן' כדי לאסוף רשומות יומן ושגיאות של לוח JavaScript מכל הכרטיסיות. רשומות היומן ייאספו (ויישמרו רק בזיכרון) עד לסגירת הדף הזה, או ללחיצה על 'הפסקת הרישום ביומן'.</translation> <translation id="8487667956631253959">מופעל</translation> <translation id="8487700953926739672">זמין אופליין</translation> <translation id="8487894141648868716">USPS</translation> @@ -1754,7 +1755,7 @@ <translation id="8712637175834984815">הבנתי</translation> <translation id="8717864919010420084">העתקת הקישור</translation> <translation id="8722229818691036192">החשבונות במכשיר הזה</translation> -<translation id="8722649775263832315">אפשר להקיש או לסמן כדי לחפש כל דבר באמצעות Google Lens</translation> +<translation id="8722649775263832315">אפשר ללחוץ או לסמן כדי לחפש כל דבר באמצעות Google Lens</translation> <translation id="8725066075913043281">ניסיון חוזר</translation> <translation id="8728922029615312208">סגירת הכול</translation> <translation id="8730621377337864115">בוצע</translation> @@ -1797,7 +1798,7 @@ <translation id="886477344907998366">הצגת הסימניות</translation> <translation id="8869239474428371589">נהנים מהמיטב של הדפדפן האהוב</translation> <translation id="8871974300055371298">הגדרות תוכן</translation> -<translation id="8879604564928138696">אפשר להקיש הקשה כפולה כדי לנסות</translation> +<translation id="8879604564928138696">אפשר ללחוץ לחיצה כפולה כדי לנסות</translation> <translation id="8879952635974818770">תוכן מותאם אישית</translation> <translation id="8887595428614802520">סגירה של כל הכרטיסיות והקבוצות</translation> <translation id="8893208530912252670">סרטונים</translation> @@ -1805,7 +1806,7 @@ <translation id="890565330728586731">אחורה</translation> <translation id="8907722425137681851">חיפוש בדף…</translation> <translation id="8909135823018751308">שיתוף…</translation> -<translation id="8909459547399237818">בוחרים במנהל הסיסמאות ומקישים על 'הוספת ווידג'ט'</translation> +<translation id="8909459547399237818">בוחרים במנהל הסיסמאות ולוחצים על 'הוספת ווידג'ט'</translation> <translation id="891282356902782456">הסיסמה הזו שמורה רק במכשיר הזה. כדי להשתמש בה במכשירים אחרים, עליך לשמור אותה בחשבון Google שלך, <ph name="EMAIL" />.</translation> <translation id="8915916167043355778">סגירת הכול</translation> <translation id="8921902386312975525">אפשרויות למעקב אחרי חבילות</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index da30cec..f5ddeed 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -1150,6 +1150,7 @@ <translation id="6160780110287872296">ファイルをダウンロードしますか?</translation> <translation id="6165508094623778733">詳細</translation> <translation id="6168647875670665004">記事の候補表示</translation> +<translation id="6169031022444660352">保存されているすべての認証情報を削除するには、まずデバイスでパスコードを設定する必要があります。</translation> <translation id="6173499589275053515">Google アカウント(<ph name="EMAIL" />)に保存されたパスワード</translation> <translation id="6187302354554850004">最終同期: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319">作成: <ph name="DATE" /></translation> @@ -1201,6 +1202,7 @@ <translation id="6355820205320395730">脆弱なパスワードは簡単に推測されてしまいます。安全なパスワードを作成してください。<ph name="BEGIN_LINK" />セキュリティに関する他のヒントを見る<ph name="END_LINK" /></translation> <translation id="6361848730467328243">「<ph name="DOMAIN_NAME" />」をフォロー</translation> <translation id="6368038301482806847">リストから対象の検索エンジンを選択します。</translation> +<translation id="6368102751067608420">パスワード マネージャーのすべてのデータを削除するには</translation> <translation id="6374469231428023295">再試行</translation> <translation id="6387994324662817823">パスワードは、このデバイスの Google パスワード マネージャーにのみ保存されます。</translation> <translation id="6404422529625928907">Google ドライブで開く</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 8fc6f17..a9d65af 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">შედით სისტემაში, რომ მიიღოთ თქვენი სანიშნეები, პაროლები და სხვა მონაცემები თქვენს ყველა მოწყობილობაზე.</translation> <translation id="6027945736510816438"><ph name="WEBSITE" /> ხომ არ იგულისხმეთ?</translation> <translation id="6032845897905314562">ახალი ფუნქცია</translation> +<translation id="6038823991892265570">Google მეხსიერების მართვა</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">დახურვა</translation> <translation id="6042308850641462728">სხვა</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index 76f1c73..a008f640 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -1150,6 +1150,7 @@ <translation id="6160780110287872296">ດາວໂຫຼດໄຟລ໌ບໍ?</translation> <translation id="6165508094623778733">ສຶກສາເພີ່ມເຕີມ</translation> <translation id="6168647875670665004">ການແນະນຳບົດຄວາມ</translation> +<translation id="6169031022444660352">ເພື່ອລຶບຂໍ້ມູນການເຂົ້າສູ່ລະບົບທີ່ບັນທຶກໄວ້ທັງໝົດ, ທ່ານຈະຕ້ອງຕັ້ງຄ່າລະຫັດຢູ່ອຸປະກອນຂອງທ່ານກ່ອນ.</translation> <translation id="6173499589275053515">ລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ໃນບັນຊີ Google ຂອງທ່ານ, <ph name="EMAIL" /></translation> <translation id="6187302354554850004">ຊິ້ງຂໍ້ມູນຫຼ້າສຸດ: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319">ສ້າງເມື່ອ <ph name="DATE" /></translation> @@ -1201,6 +1202,7 @@ <translation id="6355820205320395730">ລະຫັດຜ່ານງ່າຍແມ່ນລະຫັດຜ່ານທີ່ເດົາໄດ້ງ່າຍ. ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານກຳລັງສ້າງລະຫັດຜ່ານຍາກ. <ph name="BEGIN_LINK" />ເບິ່ງເຄັດລັບຄວາມປອດໄພເພີ່ມເຕີມ.<ph name="END_LINK" /></translation> <translation id="6361848730467328243">ຕິດຕາມ <ph name="DOMAIN_NAME" /></translation> <translation id="6368038301482806847">ເລືອກໂປຣແກຣມຊອກຫາຈາກລາຍຊື່.</translation> +<translation id="6368102751067608420">ເພື່ອລຶບຂໍ້ມູນໃນຕົວຈັດການລະຫັດຜ່ານທັງໝົດ</translation> <translation id="6374469231428023295">ລອງໃໝ່ອີກ</translation> <translation id="6387994324662817823">ລະຫັດຜ່ານແມ່ນຖືກບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ຢູ່ອຸປະກອນນີ້ເທົ່ານັ້ນ.</translation> <translation id="6404422529625928907">ເປີດໃນ Google Drive</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index d73aae5..a0f3e0f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड आणि आणखी बरेच काही मिळवण्यासाठी साइन इन करा.</translation> <translation id="6027945736510816438">तुम्हाला <ph name="WEBSITE" /> म्हणायचे आहे का?</translation> <translation id="6032845897905314562">नवीन वैशिष्ट्य</translation> +<translation id="6038823991892265570">Google स्टोरेज व्यवस्थापित करा</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">बंद करा</translation> <translation id="6042308850641462728">अधिक</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index f717e34..2a25eaf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Log masuk untuk mendapatkan penanda halaman, kata laluan dan pelbagai lagi pada semua peranti anda.</translation> <translation id="6027945736510816438">Adakah anda maksudkan <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">ciri baharu</translation> +<translation id="6038823991892265570">Urus storan Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Tutup</translation> <translation id="6042308850641462728">Lagi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index 4caec2f..daee3b89 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -1149,6 +1149,7 @@ <translation id="6160780110287872296">ဖိုင်ဒေါင်းလုဒ်လုပ်မလား။</translation> <translation id="6165508094623778733">ပိုမိုလေ့လာရန်</translation> <translation id="6168647875670665004">သတင်းဆောင်းပါး အကြံပြုချက်များ</translation> +<translation id="6169031022444660352">သိမ်းထားသော အထောက်အထားအားလုံး ဖျက်ရန် သင့်စက်တွင် လျှို့ဝှက်ကုဒ်ကို အရင်စီစဉ်သတ်မှတ်ရမည်။</translation> <translation id="6173499589275053515">စကားဝှက်ကို သင်၏ Google Account <ph name="EMAIL" /> တွင် သိမ်းလိုက်သည်</translation> <translation id="6187302354554850004">နောက်ဆုံး ထပ်တူပြုခြင်း: <ph name="LAST_USED_TIME" /></translation> <translation id="6188737759358894319"><ph name="DATE" /> တွင် ပြုလုပ်ထားသည်</translation> @@ -1200,6 +1201,7 @@ <translation id="6355820205320395730">အားနည်းသည့် စကားဝှက်များကို အလွယ်တကူ ခန့်မှန်းနိုင်သည်။ လုံခြုံမှုမြင့်သည့် စကားဝှက်များကို သတ်မှတ်ပါ။ <ph name="BEGIN_LINK" />နောက်ထပ် လုံခြုံရေးအကြံပြုချက်များ ကြည့်ရန်။<ph name="END_LINK" /></translation> <translation id="6361848730467328243"><ph name="DOMAIN_NAME" /> ကို လိုက်ကြည့်ခြင်း</translation> <translation id="6368038301482806847">စာရင်းမှ ရှာဖွေရေး အင်ဂျင်ကို ရွေးပါ။</translation> +<translation id="6368102751067608420">Password Manager ဒေတာအားလုံး ဖျက်ရန်</translation> <translation id="6374469231428023295">ထပ်စမ်းကြည့်ပါ</translation> <translation id="6387994324662817823">စကားဝှက်များကို ဤစက်တွင်သာရှိသော ‘Google စကားဝှက်မန်နေဂျာ’ သို့ သိမ်းထားသည်။</translation> <translation id="6404422529625928907">Google Drive တွင် ဖွင့်ရန်</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 6063e73..2e65e2f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Log in om onder andere je bookmarks en wachtwoorden op al je apparaten te gebruiken.</translation> <translation id="6027945736510816438">Bedoelde je <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">nieuwe functie</translation> +<translation id="6038823991892265570">Google-opslag beheren</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Sluiten</translation> <translation id="6042308850641462728">Meer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index a5ba5194f..faa378e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Logg på for å få blant annet bokmerkene og passordene dine på alle enhetene dine.</translation> <translation id="6027945736510816438">Mente du <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">ny funksjon</translation> +<translation id="6038823991892265570">Administrer Google-lagringsplassen</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Lukk</translation> <translation id="6042308850641462728">Mer</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 c3457c0e..16201b2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Inicie sessão para obter marcadores, palavras-passe e muito mais em todos os seus dispositivos.</translation> <translation id="6027945736510816438">Será que quis dizer <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">nova funcionalidade</translation> +<translation id="6038823991892265570">Gerir armazenamento Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Fechar</translation> <translation id="6042308850641462728">Mais</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 07a92fbd..a75dcd8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Prijavite se da biste pristupali obeleživačima, lozinkama i drugom sadržaju na svim uređajima.</translation> <translation id="6027945736510816438">Da li ste mislili <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">nova funkcija</translation> +<translation id="6038823991892265570">Upravljajte Google memorijskim prostorom</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="6042308850641462728">Još</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 54068b3..32637d4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Пријавите се да бисте приступали обележивачима, лозинкама и другом садржају на свим уређајима.</translation> <translation id="6027945736510816438">Да ли сте мислили <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">нова функција</translation> +<translation id="6038823991892265570">Управљајте Google меморијским простором</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Затвори</translation> <translation id="6042308850641462728">Још</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index fa07916..b391a2fd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Logga in om du vill ha dina bokmärken, lösenord med mera på alla dina enheter.</translation> <translation id="6027945736510816438">Menade du <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">ny funktion</translation> +<translation id="6038823991892265570">Hantera lagringsutrymme på Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Stäng</translation> <translation id="6042308850641462728">Mer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 75b6496a..1c42f6b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Ingia katika akaunti ili upate alamisho, manenosiri na zaidi kwenye vifaa vyako vyote.</translation> <translation id="6027945736510816438">Je, ulimaanisha <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">kipengele kipya</translation> +<translation id="6038823991892265570">Dhibiti nafasi ya hifadhi kwenye Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Funga</translation> <translation id="6042308850641462728">Zaidi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 70cbe6e..4ab0454 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">మీ అన్ని పరికరాలలో మీ బుక్మార్క్లు, పాస్వర్డ్లు, అలాగే మరిన్నింటిని పొందడానికి సైన్ ఇన్ చేయండి.</translation> <translation id="6027945736510816438">మీరు <ph name="WEBSITE" /> గురించి అడిగారా?</translation> <translation id="6032845897905314562">కొత్త ఫీచర్</translation> +<translation id="6038823991892265570">Google స్టోరేజ్ను మేనేజ్ చేయండి</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">మూసివేయండి</translation> <translation id="6042308850641462728">మరింత చూపించు</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 982cdfe..544b17c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">ลงชื่อเข้าใช้เพื่อรับบุ๊กมาร์ก รหัสผ่าน และอื่นๆ ในอุปกรณ์ทุกเครื่อง</translation> <translation id="6027945736510816438">คุณหมายถึง <ph name="WEBSITE" /> ใช่ไหม</translation> <translation id="6032845897905314562">ฟีเจอร์ใหม่</translation> +<translation id="6038823991892265570">จัดการพื้นที่เก็บข้อมูลใน Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">ปิด</translation> <translation id="6042308850641462728">แสดงเพิ่ม</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index c03c17f7..08c3638 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">Đăng nhập để sử dụng dấu trang, mật khẩu và nhiều nội dung khác trên mọi thiết bị của bạn.</translation> <translation id="6027945736510816438">Ý của bạn là <ph name="WEBSITE" /> phải không?</translation> <translation id="6032845897905314562">tính năng mới</translation> +<translation id="6038823991892265570">Quản lý bộ nhớ trên Google</translation> <translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">Đóng</translation> <translation id="6042308850641462728">Xem thêm</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 07afdb3..769025ebb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -112,7 +112,7 @@ <translation id="1450170672351507823">已开启标准保护。若要进一步提升安全性,请使用增强型保护。</translation> <translation id="1454615514353469963">密码、通行密钥和其他数据将从 Google 密码管理工具中永久删除</translation> <translation id="1455660774629812862">不隐藏</translation> -<translation id="1460751212339734034">节省时间,减少输入操作</translation> +<translation id="1460751212339734034">减少输入,节省时间</translation> <translation id="1466035273550360103">没有已打开的标签页</translation> <translation id="1469381646033328562">你的账号由家长管理。 <ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> @@ -1085,7 +1085,7 @@ <translation id="5888889603768021126">所用登录身份</translation> <translation id="5889333064153755823">删除浏览数据</translation> <translation id="5896576662943111387">专为 iOS 打造</translation> -<translation id="5897749768294722429">如果想快速重新访问浏览过的网站,请同步您的标签页和历史记录。</translation> +<translation id="5897749768294722429">同步标签页和历史记录,快速访问您浏览过的网站。</translation> <translation id="5898848375214731122">质量</translation> <translation id="5899314093904173337">若要与附近的人分享,请让他们用相机或二维码扫描器应用扫描此二维码</translation> <translation id="5911030830365207728">Google 翻译</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 ff4f4c7..2d28dde 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -1115,6 +1115,7 @@ <translation id="6027619584715411062">登入後,即可從任何裝置取得自己的書籤、密碼等項目。</translation> <translation id="6027945736510816438">您是不是要輸入 <ph name="WEBSITE" />?</translation> <translation id="6032845897905314562">新功能</translation> +<translation id="6038823991892265570">管理 Google 儲存空間</translation> <translation id="6039429417015973673"><ph name="TITLE" />,<ph name="PUBLISHER_INFORMATION" />,<ph name="PUBLICATION_DATE" /></translation> <translation id="6040143037577758943">關閉</translation> <translation id="6042308850641462728">更多選項</translation>
diff --git a/ios/chrome/app/theme/ios_theme_resources.grd b/ios/chrome/app/theme/ios_theme_resources.grd index ac79e6c6..7b1e08cc 100644 --- a/ios/chrome/app/theme/ios_theme_resources.grd +++ b/ios/chrome/app/theme/ios_theme_resources.grd
@@ -9,7 +9,7 @@ currently set to true for all resources, but the default will become false in near future. --> -<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> +<grit latest_public_release="0" current_release="1"> <outputs> <output filename="grit/ios_theme_resources.h" type="rc_header" context="default_100_percent"> <emit emit_type='prepend'></emit>
diff --git a/ios/chrome/browser/banner_promo/model/BUILD.gn b/ios/chrome/browser/banner_promo/model/BUILD.gn index 43042d86..02a1d16 100644 --- a/ios/chrome/browser/banner_promo/model/BUILD.gn +++ b/ios/chrome/browser/banner_promo/model/BUILD.gn
@@ -9,10 +9,15 @@ ] deps = [ "//base", + "//components/feature_engagement/public", + "//components/feature_engagement/public:feature_constants", "//components/google/core/common", "//ios/chrome/app/application_delegate:observing_app_state_agent", "//ios/chrome/app/profile", + "//ios/chrome/browser/default_browser/model:utils", + "//ios/chrome/browser/feature_engagement/model", "//ios/chrome/browser/shared/model/browser", + "//ios/chrome/browser/shared/model/url", "//ios/chrome/browser/shared/model/web_state_list", "//ios/chrome/browser/shared/public/features", "//ios/web/public",
diff --git a/ios/chrome/browser/banner_promo/model/DEPS b/ios/chrome/browser/banner_promo/model/DEPS new file mode 100644 index 0000000..19654b2 --- /dev/null +++ b/ios/chrome/browser/banner_promo/model/DEPS
@@ -0,0 +1,4 @@ +include_rules = [ + "+ios/chrome/browser/default_browser/model", + "+ios/chrome/browser/feature_engagement/model", +]
diff --git a/ios/chrome/browser/banner_promo/model/default_browser_banner_promo_app_agent.mm b/ios/chrome/browser/banner_promo/model/default_browser_banner_promo_app_agent.mm index e587844..1be3888 100644 --- a/ios/chrome/browser/banner_promo/model/default_browser_banner_promo_app_agent.mm +++ b/ios/chrome/browser/banner_promo/model/default_browser_banner_promo_app_agent.mm
@@ -5,14 +5,19 @@ #import "ios/chrome/browser/banner_promo/model/default_browser_banner_promo_app_agent.h" #import "base/ios/crb_protocol_observers.h" +#import "components/feature_engagement/public/feature_constants.h" +#import "components/feature_engagement/public/tracker.h" #import "components/google/core/common/google_util.h" #import "ios/chrome/app/profile/profile_init_stage.h" #import "ios/chrome/app/profile/profile_state.h" #import "ios/chrome/app/profile/profile_state_observer.h" +#import "ios/chrome/browser/default_browser/model/utils.h" +#import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/browser/browser_list.h" #import "ios/chrome/browser/shared/model/browser/browser_list_factory.h" #import "ios/chrome/browser/shared/model/browser/browser_list_observer_bridge.h" +#import "ios/chrome/browser/shared/model/url/url_util.h" #import "ios/chrome/browser/shared/model/web_state_list/active_web_state_observation_forwarder.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list_observer_bridge.h" @@ -49,6 +54,15 @@ // Stored observers. DefaultBrowserBannerAppAgentObserverList* _observers; + + // Main profile state to use for promo eligibility checking. + ProfileState* _mainProfileState; + + // Number of times the promo has been displayed in this promo session. + int _sessionDisplayCount; + + // Whether the promo is currently shown. + BOOL _promoCurrentlyShown; } - (instancetype)init { @@ -102,6 +116,41 @@ } } +// Makes sure the promo is shown and alerts observers if this causes a state +// change. +- (void)ensurePromoShown { + if (!_promoCurrentlyShown) { + _promoCurrentlyShown = YES; + [_observers displayPromoFromAppAgent:self]; + } +} + +// Makes sure the promo is hidden and alerts observers if this causes a state +// change. +- (void)ensurePromoHidden { + if (_promoCurrentlyShown) { + feature_engagement::Tracker* engagementTracker = + feature_engagement::TrackerFactory::GetForProfile( + _mainProfileState.profile); + if (engagementTracker) { + engagementTracker->Dismissed( + feature_engagement::kIPHiOSDefaultBrowserBannerPromoFeature); + } + _promoCurrentlyShown = NO; + [_observers hidePromoFromAppAgent:self]; + } +} + +// Checks if the promo can be displayed on all currently active pages. +- (BOOL)promoIsSuppressedOnCurrentURLs { + for (const auto& [webStateID, url] : _lastNavigatedURLs) { + if (IsUrlNtp(url) || google_util::IsGoogleSearchUrl(url)) { + return true; + } + } + return false; +} + #pragma mark - SceneStateObserver - (void)sceneState:(SceneState*)sceneState @@ -110,6 +159,7 @@ return; } [profileState addObserver:self]; + _mainProfileState = profileState; } #pragma mark - ProfileStateObserver @@ -197,14 +247,35 @@ navigationContext:navigationContext]) { return; } + _lastNavigatedURLs.insert_or_assign( webState->GetUniqueIdentifier(), navigationContext->GetUrl().GetWithoutRef()); - if (google_util::IsGoogleSearchUrl(navigationContext->GetUrl())) { - [_observers hidePromoFromAppAgent:self]; + if (_promoCurrentlyShown) { + // Check if session is over. + if (IsChromeLikelyDefaultBrowser() || + [self promoIsSuppressedOnCurrentURLs] || _sessionDisplayCount >= 10) { + [self ensurePromoHidden]; + return; + } + _sessionDisplayCount += 1; } else { - [_observers displayPromoFromAppAgent:self]; + // Check if session should begin. + if (IsChromeLikelyDefaultBrowser() || + [self promoIsSuppressedOnCurrentURLs]) { + return; + } + + feature_engagement::Tracker* engagementTracker = + feature_engagement::TrackerFactory::GetForProfile( + _mainProfileState.profile); + if (engagementTracker && + engagementTracker->ShouldTriggerHelpUI( + feature_engagement::kIPHiOSDefaultBrowserBannerPromoFeature)) { + _sessionDisplayCount = 1; + [self ensurePromoShown]; + } } }
diff --git a/ios/chrome/browser/bring_android_tabs/model/bring_android_tabs_to_ios_service_unittest.mm b/ios/chrome/browser/bring_android_tabs/model/bring_android_tabs_to_ios_service_unittest.mm index 98e31d2..5731c29 100644 --- a/ios/chrome/browser/bring_android_tabs/model/bring_android_tabs_to_ios_service_unittest.mm +++ b/ios/chrome/browser/bring_android_tabs/model/bring_android_tabs_to_ios_service_unittest.mm
@@ -344,7 +344,7 @@ if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_PHONE) { histogram_tester_.ExpectBucketCount( bring_android_tabs::kPromptAttemptStatusHistogramName, - static_cast<base::HistogramBase::Sample>(prompt_attempt_status), 1); + static_cast<base::HistogramBase::Sample32>(prompt_attempt_status), 1); } }
diff --git a/ios/chrome/browser/download/model/ar_quick_look_tab_helper_unittest.mm b/ios/chrome/browser/download/model/ar_quick_look_tab_helper_unittest.mm index 9e5044c..6862ead1 100644 --- a/ios/chrome/browser/download/model/ar_quick_look_tab_helper_unittest.mm +++ b/ios/chrome/browser/download/model/ar_quick_look_tab_helper_unittest.mm
@@ -92,17 +92,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kSuccessful), 1); } @@ -133,17 +133,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kSuccessful), 1); } @@ -176,17 +176,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kSuccessful), 1); } @@ -238,17 +238,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kSuccessful), 1); } @@ -318,17 +318,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kSuccessful), 1); } @@ -355,17 +355,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 2); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 2); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kSuccessful), 1); } @@ -398,17 +398,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 2); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 2); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kSuccessful), 1); } @@ -432,17 +432,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kWrongMimeTypeFailure), 1); } @@ -465,17 +465,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kOtherFailure), 1); } @@ -498,17 +498,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kUnauthorizedFailure), 1); } @@ -531,17 +531,17 @@ histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kCreated), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kStarted), 1); histogram_tester()->ExpectBucketCount( kHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSDownloadARModelState::kUnauthorizedFailure), 1); }
diff --git a/ios/chrome/browser/download/model/browser_download_service_unittest.mm b/ios/chrome/browser/download/model/browser_download_service_unittest.mm index d7ffed1..2625d12 100644 --- a/ios/chrome/browser/download/model/browser_download_service_unittest.mm +++ b/ios/chrome/browser/download/model/browser_download_service_unittest.mm
@@ -147,7 +147,7 @@ ASSERT_TRUE(download_manager_tab_helper()->tasks().empty()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>(DownloadMimeTypeResult::PkPass), + static_cast<base::HistogramBase::Sample32>(DownloadMimeTypeResult::PkPass), 1); } @@ -165,7 +165,7 @@ ASSERT_TRUE(download_manager_tab_helper()->tasks().empty()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>(DownloadMimeTypeResult::Other), + static_cast<base::HistogramBase::Sample32>(DownloadMimeTypeResult::Other), 1); } @@ -183,7 +183,7 @@ ASSERT_TRUE(download_manager_tab_helper()->tasks().empty()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>(DownloadMimeTypeResult::Other), + static_cast<base::HistogramBase::Sample32>(DownloadMimeTypeResult::Other), 1); } // Tests that BrowserDownloadService uses ARQuickLookTabHelper for USDZ Mime @@ -200,7 +200,7 @@ ASSERT_TRUE(download_manager_tab_helper()->tasks().empty()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadMimeTypeResult::UniversalSceneDescription), 1); } @@ -219,7 +219,7 @@ ASSERT_TRUE(download_manager_tab_helper()->tasks().empty()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadMimeTypeResult::LegacyUniversalSceneDescription), 1); } @@ -238,7 +238,7 @@ ASSERT_TRUE(download_manager_tab_helper()->tasks().empty()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadMimeTypeResult::LegacyPixarUniversalSceneDescription), 1); } @@ -257,7 +257,7 @@ EXPECT_EQ(task_ptr, download_manager_tab_helper()->tasks()[0].get()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadMimeTypeResult::AdobePortableDocumentFormat), 1); } @@ -275,7 +275,7 @@ ASSERT_EQ(1U, download_manager_tab_helper()->tasks().size()); EXPECT_EQ(task_ptr, download_manager_tab_helper()->tasks()[0].get()); histogram_tester_.ExpectUniqueSample("Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadMimeTypeResult::ZipArchive), 1); } @@ -294,7 +294,7 @@ EXPECT_EQ(task_ptr, download_manager_tab_helper()->tasks()[0].get()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadMimeTypeResult::MicrosoftApplication), 1); } @@ -313,7 +313,7 @@ EXPECT_EQ(task_ptr, download_manager_tab_helper()->tasks()[0].get()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadMimeType", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadMimeTypeResult::AndroidPackageArchive), 1); }
diff --git a/ios/chrome/browser/download/model/pass_kit_tab_helper_unittest.mm b/ios/chrome/browser/download/model/pass_kit_tab_helper_unittest.mm index 2c1465ae..6578eb1 100644 --- a/ios/chrome/browser/download/model/pass_kit_tab_helper_unittest.mm +++ b/ios/chrome/browser/download/model/pass_kit_tab_helper_unittest.mm
@@ -64,7 +64,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadBundledPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kParsingFailure), 1); } @@ -101,7 +101,7 @@ EXPECT_NSEQ(@"Paw Planet", second_pass.organizationName); histogram_tester_.ExpectUniqueSample(kUmaDownloadBundledPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kSuccessful), 1); } @@ -134,7 +134,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadBundledPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kPartialFailure), 1); } @@ -163,7 +163,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadBundledPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kParsingFailure), 1); } @@ -180,7 +180,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kParsingFailure), 1); } @@ -207,7 +207,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kParsingFailure), 2); } @@ -234,7 +234,7 @@ EXPECT_NSEQ(@"Toy Town", pass.organizationName); histogram_tester_.ExpectUniqueSample(kUmaDownloadPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kSuccessful), 1); } @@ -251,7 +251,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kWrongMimeTypeFailure), 1); } @@ -268,7 +268,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kOtherFailure), 1); } @@ -285,7 +285,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kUnauthorizedFailure), 1); } @@ -302,7 +302,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadPassKitResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadPassKitResult::kUnauthorizedFailure), 1); }
diff --git a/ios/chrome/browser/download/ui_bundled/ar_quick_look_coordinator_unittest.mm b/ios/chrome/browser/download/ui_bundled/ar_quick_look_coordinator_unittest.mm index 4b2ab22..b99563e 100644 --- a/ios/chrome/browser/download/ui_bundled/ar_quick_look_coordinator_unittest.mm +++ b/ios/chrome/browser/download/ui_bundled/ar_quick_look_coordinator_unittest.mm
@@ -124,7 +124,7 @@ histogram_tester_.ExpectUniqueSample( kIOSPresentQLPreviewControllerHistogram, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentQLPreviewController::kSuccessful), 1); } @@ -143,7 +143,7 @@ histogram_tester_.ExpectUniqueSample( kIOSPresentQLPreviewControllerHistogram, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentQLPreviewController::kInvalidFile), 1); } @@ -165,7 +165,7 @@ histogram_tester_.ExpectUniqueSample( kIOSPresentQLPreviewControllerHistogram, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentQLPreviewController::kSuccessful), 1); @@ -184,7 +184,7 @@ histogram_tester_.ExpectBucketCount( kIOSPresentQLPreviewControllerHistogram, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentQLPreviewController::kAnotherQLPreviewControllerIsPresented), 1); } @@ -217,7 +217,7 @@ histogram_tester_.ExpectUniqueSample( kIOSPresentQLPreviewControllerHistogram, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentQLPreviewController::kAnotherViewControllerIsPresented), 1); }
diff --git a/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm b/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm index 1f327d4..136c13c0 100644 --- a/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm +++ b/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm
@@ -231,7 +231,7 @@ EXPECT_EQ(0U, base_view_controller_.childViewControllers.count); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileResult", - static_cast<base::HistogramBase::Sample>(DownloadFileResult::Other), 1); + static_cast<base::HistogramBase::Sample32>(DownloadFileResult::Other), 1); } // Tests downloadManagerTabHelper:didCreateDownload:webStateIsVisible: callback @@ -423,7 +423,7 @@ EXPECT_EQ(web::DownloadTask::State::kCancelled, task->GetState()); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileResult", - static_cast<base::HistogramBase::Sample>(DownloadFileResult::NotStarted), + static_cast<base::HistogramBase::Sample32>(DownloadFileResult::NotStarted), 1); histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive", 0); @@ -491,16 +491,16 @@ histogram_tester_.ExpectTotalCount("Download.IOSDownloadedFileNetError", 0); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileResult", - static_cast<base::HistogramBase::Sample>(DownloadFileResult::Completed), + static_cast<base::HistogramBase::Sample32>(DownloadFileResult::Completed), 1); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadedFileAction", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadedFileAction::NoActionOrOpenedViaExtension), 1); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadedFileAction", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadFileInBackground::SucceededWithoutBackgrounding), 1); histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive", @@ -546,7 +546,7 @@ histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileInBackground", 0); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileResult", - static_cast<base::HistogramBase::Sample>(DownloadFileResult::Other), 1); + static_cast<base::HistogramBase::Sample32>(DownloadFileResult::Other), 1); histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive", 0); } @@ -592,12 +592,12 @@ histogram_tester_.ExpectTotalCount("Download.IOSDownloadedFileAction", 0); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileInBackground", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadFileInBackground::CanceledAfterAppQuit), 1); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileResult", - static_cast<base::HistogramBase::Sample>(DownloadFileResult::Other), 1); + static_cast<base::HistogramBase::Sample32>(DownloadFileResult::Other), 1); histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive", 0); } @@ -832,10 +832,10 @@ -net::ERR_INTERNET_DISCONNECTED, 1); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileResult", - static_cast<base::HistogramBase::Sample>(DownloadFileResult::Failure), 1); + static_cast<base::HistogramBase::Sample32>(DownloadFileResult::Failure), 1); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileInBackground", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadFileInBackground::FailedWithoutBackgrounding), 1); EXPECT_EQ(1, @@ -868,10 +868,10 @@ histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileResult", - static_cast<base::HistogramBase::Sample>(DownloadFileResult::Failure), 1); + static_cast<base::HistogramBase::Sample32>(DownloadFileResult::Failure), 1); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileInBackground", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadFileInBackground::FailedWithBackgrounding), 1); histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive", @@ -911,7 +911,7 @@ task_ptr->SetDone(true); histogram_tester_.ExpectUniqueSample( "Download.IOSDownloadFileInBackground", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( DownloadFileInBackground::SucceededWithBackgrounding), 1); }
diff --git a/ios/chrome/browser/download/ui_bundled/pass_kit_coordinator_unittest.mm b/ios/chrome/browser/download/ui_bundled/pass_kit_coordinator_unittest.mm index f93dd72..e3de4a39 100644 --- a/ios/chrome/browser/download/ui_bundled/pass_kit_coordinator_unittest.mm +++ b/ios/chrome/browser/download/ui_bundled/pass_kit_coordinator_unittest.mm
@@ -107,7 +107,7 @@ histogram_tester_.ExpectUniqueSample( kUmaPresentAddPassesDialogResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentAddPassesDialogResult::kSuccessful), 1); } @@ -138,7 +138,7 @@ histogram_tester_.ExpectUniqueSample( kUmaPresentAddPassesDialogResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentAddPassesDialogResult::kSuccessful), 1); @@ -154,7 +154,7 @@ histogram_tester_.ExpectBucketCount( kUmaPresentAddPassesDialogResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentAddPassesDialogResult:: kAnotherAddPassesViewControllerIsPresented), 1); @@ -200,7 +200,7 @@ histogram_tester_.ExpectBucketCount( kUmaPresentAddPassesDialogResult, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( PresentAddPassesDialogResult::kAnotherViewControllerIsPresented), 1); }
diff --git a/ios/chrome/browser/download/ui_bundled/safari_download_coordinator_unittest.mm b/ios/chrome/browser/download/ui_bundled/safari_download_coordinator_unittest.mm index bee86f5..675b1a6 100644 --- a/ios/chrome/browser/download/ui_bundled/safari_download_coordinator_unittest.mm +++ b/ios/chrome/browser/download/ui_bundled/safari_download_coordinator_unittest.mm
@@ -139,7 +139,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadMobileConfigFileUI, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( SafariDownloadFileUI::kWarningAlertIsPresented), 1); } @@ -155,7 +155,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadMobileConfigFileUI, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( SafariDownloadFileUI::kWarningAlertIsPresented), 0); } @@ -175,7 +175,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadCalendarFileUI, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( SafariDownloadFileUI::kWarningAlertIsPresented), 1); } @@ -191,7 +191,7 @@ histogram_tester_.ExpectUniqueSample( kUmaDownloadCalendarFileUI, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( SafariDownloadFileUI::kWarningAlertIsPresented), 0); }
diff --git a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm index a494394..3f6d372 100644 --- a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm +++ b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm
@@ -146,6 +146,12 @@ completion:(ProceduralBlock)completion { [self userAttemptedToSignin]; RecordMetricsReportingDefaultState(); + + // The sign-in screen should not be displayed if the user is already + // signed-in. + CHECK(!_authenticationService->HasPrimaryIdentity( + signin::ConsentLevel::kSignin), + base::NotFatalUntil::M140); [self.consumer setUIEnabled:NO]; __weak __typeof(self) weakSelf = self; ProceduralBlock startSignInCompletion = ^() { @@ -162,44 +168,18 @@ completion(); }]; }; - id<SystemIdentity> primaryIdentity = - _authenticationService->GetPrimaryIdentity(signin::ConsentLevel::kSignin); - if (primaryIdentity && ![primaryIdentity isEqual:self.selectedIdentity]) { - // This case is possible if the user signs in with the FRE, and quits Chrome - // without completed the FRE. And the user starts Chrome again. - // See crbug.com/1312449. - // TODO(crbug.com/40832610): Need test for this case. - _authenticationService->SignOut( - signin_metrics::ProfileSignout::kAbortSignin, - /*force_clear_browsing_data=*/false, startSignInCompletion); - return; - } startSignInCompletion(); } - (void)cancelSignInScreenWithCompletion:(ProceduralBlock)completion { - if (!_authenticationService->HasPrimaryIdentity( - signin::ConsentLevel::kSignin)) { - if (completion) { - completion(); - } - return; + // The sign-in screen should not be displayed if the user is already + // signed-in. + CHECK(!_authenticationService->HasPrimaryIdentity( + signin::ConsentLevel::kSignin), + base::NotFatalUntil::M140); + if (completion) { + completion(); } - [self.consumer setUIEnabled:NO]; - // This case is possible if the user signs in with the FRE, and quits Chrome - // without completed the FRE. And the user starts Chrome again. - // See crbug.com/1312449. - // TODO(crbug.com/40832610): Need test for this case. - __weak __typeof(self) weakSelf = self; - ProceduralBlock signOutCompletion = ^() { - [weakSelf.consumer setUIEnabled:YES]; - if (completion) { - completion(); - } - }; - _authenticationService->SignOut(signin_metrics::ProfileSignout::kAbortSignin, - /*force_clear_browsing_data=*/false, - signOutCompletion); } - (void)userAttemptedToSignin {
diff --git a/ios/chrome/browser/metrics/model/ios_chrome_stability_metrics_provider_unittest.mm b/ios/chrome/browser/metrics/model/ios_chrome_stability_metrics_provider_unittest.mm index d9e8aa0..77711166 100644 --- a/ios/chrome/browser/metrics/model/ios_chrome_stability_metrics_provider_unittest.mm +++ b/ios/chrome/browser/metrics/model/ios_chrome_stability_metrics_provider_unittest.mm
@@ -55,7 +55,7 @@ "Stability.Counts2", metrics::StabilityEventType::kPageLoad, 1); histogram_tester_.ExpectUniqueSample( IOSChromeStabilityMetricsProvider::kPageLoadCountMetric, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSChromeStabilityMetricsProvider::PageLoadCountNavigationType:: PAGE_LOAD_NAVIGATION), 1); @@ -72,7 +72,7 @@ histogram_tester_.ExpectUniqueSample( IOSChromeStabilityMetricsProvider::kPageLoadCountMetric, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSChromeStabilityMetricsProvider::PageLoadCountNavigationType:: SAME_DOCUMENT_WEB_NAVIGATION), 1); @@ -93,7 +93,7 @@ histogram_tester_.ExpectUniqueSample( IOSChromeStabilityMetricsProvider::kPageLoadCountMetric, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSChromeStabilityMetricsProvider::PageLoadCountNavigationType:: CHROME_URL_NAVIGATION), 1); @@ -113,7 +113,7 @@ histogram_tester_.ExpectUniqueSample( IOSChromeStabilityMetricsProvider::kPageLoadCountMetric, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSChromeStabilityMetricsProvider::PageLoadCountNavigationType:: CHROME_URL_NAVIGATION), 1); @@ -129,7 +129,7 @@ histogram_tester_.ExpectUniqueSample( IOSChromeStabilityMetricsProvider::kPageLoadCountMetric, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( IOSChromeStabilityMetricsProvider::PageLoadCountNavigationType:: PAGE_LOAD_NAVIGATION), 1);
diff --git a/ios/chrome/browser/mini_map/ui_bundled/mini_map_coordinator_unittest.mm b/ios/chrome/browser/mini_map/ui_bundled/mini_map_coordinator_unittest.mm index 58238f4..b7f53fe 100644 --- a/ios/chrome/browser/mini_map/ui_bundled/mini_map_coordinator_unittest.mm +++ b/ios/chrome/browser/mini_map/ui_bundled/mini_map_coordinator_unittest.mm
@@ -195,7 +195,11 @@ GTEST_SKIP() << "Feature only available on iOS16.4+"; } base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeature(web::features::kOneTapForMaps); + base::FieldTrialParams feature_parameters{ + {web::features::kOneTapForMapsConsentModeParamTitle, + web::features::kOneTapForMapsConsentModeDefaultParam}}; + scoped_feature_list.InitAndEnableFeatureWithParameters( + web::features::kOneTapForMaps, feature_parameters); profile_->GetPrefs()->SetBoolean(prefs::kDetectAddressesAccepted, false); profile_->GetPrefs()->SetBoolean(prefs::kDetectAddressesEnabled, true); id mini_map_controller = OCMStrictProtocolMock(@protocol(MiniMapController));
diff --git a/ios/chrome/browser/mini_map/ui_bundled/mini_map_mediator_unittest.mm b/ios/chrome/browser/mini_map/ui_bundled/mini_map_mediator_unittest.mm index a0f9739..e639c8c2 100644 --- a/ios/chrome/browser/mini_map/ui_bundled/mini_map_mediator_unittest.mm +++ b/ios/chrome/browser/mini_map/ui_bundled/mini_map_mediator_unittest.mm
@@ -74,7 +74,11 @@ GTEST_SKIP() << "Feature only available on iOS16.4+"; } base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeature(web::features::kOneTapForMaps); + base::FieldTrialParams feature_parameters{ + {web::features::kOneTapForMapsConsentModeParamTitle, + web::features::kOneTapForMapsConsentModeDefaultParam}}; + scoped_feature_list.InitAndEnableFeatureWithParameters( + web::features::kOneTapForMaps, feature_parameters); profile_->GetPrefs()->SetBoolean(prefs::kDetectAddressesAccepted, false); profile_->GetPrefs()->SetBoolean(prefs::kDetectAddressesEnabled, true); OCMExpect([delegate_ showConsentInterstitial]); @@ -93,7 +97,11 @@ GTEST_SKIP() << "Feature only available on iOS16.4+"; } base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeature(web::features::kOneTapForMaps); + base::FieldTrialParams feature_parameters{ + {web::features::kOneTapForMapsConsentModeParamTitle, + web::features::kOneTapForMapsConsentModeDefaultParam}}; + scoped_feature_list.InitAndEnableFeatureWithParameters( + web::features::kOneTapForMaps, feature_parameters); profile_->GetPrefs()->SetBoolean(prefs::kDetectAddressesAccepted, false); profile_->GetPrefs()->SetBoolean(prefs::kDetectAddressesEnabled, true); OCMExpect([delegate_ showConsentInterstitial]);
diff --git a/ios/chrome/browser/orchestrator/ui_bundled/omnibox_focus_orchestrator.mm b/ios/chrome/browser/orchestrator/ui_bundled/omnibox_focus_orchestrator.mm index 7035fe5..b74ac21 100644 --- a/ios/chrome/browser/orchestrator/ui_bundled/omnibox_focus_orchestrator.mm +++ b/ios/chrome/browser/orchestrator/ui_bundled/omnibox_focus_orchestrator.mm
@@ -358,17 +358,27 @@ delay:0 options:UIViewAnimationCurveEaseInOut animations:^{ - [UIView addKeyframeWithRelativeStartTime:0 - relativeDuration:relativeDurationAnimation1 - animations:^{ - [self contraction]; - }]; - [UIView - addKeyframeWithRelativeStartTime:relativeDurationAnimation1 - relativeDuration:1 - relativeDurationAnimation1 - animations:^{ - [self.toolbarAnimatee showControlButtons]; - }]; + BOOL isLowerThan17 = !base::ios::IsRunningOnOrLater(17, 0, 0); + BOOL isHigherThan17_2 = base::ios::IsRunningOnOrLater(17, 2, 0); + if (isLowerThan17 || isHigherThan17_2) { + [UIView addKeyframeWithRelativeStartTime:0 + relativeDuration:relativeDurationAnimation1 + animations:^{ + [self contraction]; + }]; + [UIView + addKeyframeWithRelativeStartTime:relativeDurationAnimation1 + relativeDuration:1 - relativeDurationAnimation1 + animations:^{ + [self.toolbarAnimatee + showControlButtons]; + }]; + } else { + // This is a workaround for a crash that is mostly happening on + // iOS 17.0-17.1. See crbug.com/369988988. + [self contraction]; + [self.toolbarAnimatee showControlButtons]; + } } completion:^(BOOL finished) { [self.toolbarAnimatee hideCancelButton];
diff --git a/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller_unittest.mm b/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller_unittest.mm index 1d70b98d..1117d83 100644 --- a/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/content_settings/content_settings_table_view_controller_unittest.mm
@@ -56,9 +56,9 @@ ASSERT_EQ(1, NumberOfSections()); } if (base::FeatureList::IsEnabled(web::features::kEnableMeasurements)) { - ASSERT_EQ(5, NumberOfItemsInSection(0)); + ASSERT_EQ(6, NumberOfItemsInSection(0)); } else { - ASSERT_EQ(4, NumberOfItemsInSection(0)); + ASSERT_EQ(5, NumberOfItemsInSection(0)); } CheckDetailItemTextWithIds(IDS_IOS_BLOCK_POPUPS, IDS_IOS_SETTING_ON, 0, 0); }
diff --git a/ios/chrome/browser/text_selection/model/text_selection_util.mm b/ios/chrome/browser/text_selection/model/text_selection_util.mm index cd7e9101..53d778d 100644 --- a/ios/chrome/browser/text_selection/model/text_selection_util.mm +++ b/ios/chrome/browser/text_selection/model/text_selection_util.mm
@@ -10,7 +10,7 @@ BASE_FEATURE(kEnableExpKitTextClassifier, "EnableExpKitTextClassifier", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kEnableExpKitTextClassifierDate, "EnableExpKitTextClassifierDate", @@ -18,7 +18,7 @@ BASE_FEATURE(kEnableExpKitTextClassifierAddress, "EnableExpKitTextClassifierAddress", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kEnableExpKitTextClassifierPhoneNumber, "EnableExpKitTextClassifierPhoneNumber",
diff --git a/ios/chrome/browser/toolbar/ui_bundled/BUILD.gn b/ios/chrome/browser/toolbar/ui_bundled/BUILD.gn index 7b7cff5..2493086f 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/toolbar/ui_bundled/BUILD.gn
@@ -161,6 +161,7 @@ "//ios/chrome/browser/toolbar/ui_bundled/buttons", "//ios/chrome/browser/toolbar/ui_bundled/public", "//ios/chrome/browser/toolbar/ui_bundled/public:constants", + "//ios/chrome/browser/toolbar/ui_bundled/tab_groups:features_utils", "//ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui", "//ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui:constants", "//ios/chrome/browser/ui/content_suggestions:content_suggestions_ui_util",
diff --git a/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view.mm b/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view.mm index b203e8104..2b3eed4 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view.mm +++ b/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view.mm
@@ -18,6 +18,7 @@ #import "ios/chrome/browser/toolbar/ui_bundled/buttons/toolbar_tab_group_state.h" #import "ios/chrome/browser/toolbar/ui_bundled/public/toolbar_constants.h" #import "ios/chrome/browser/toolbar/ui_bundled/public/toolbar_utils.h" +#import "ios/chrome/browser/toolbar/ui_bundled/tab_groups/tab_group_indicator_features_utils.h" #import "ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_constants.h" #import "ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.h" #import "ios/chrome/browser/toolbar/ui_bundled/toolbar_progress_bar.h" @@ -32,7 +33,7 @@ const CGFloat kBannerPromoVerticalSpacing = 8; } // namespace -@interface PrimaryToolbarView () +@interface PrimaryToolbarView () <TabGroupIndicatorViewDelegate> // Factory used to create the buttons. @property(nonatomic, strong) ToolbarButtonFactory* buttonFactory; @@ -119,6 +120,12 @@ // Constrains the height of the background promo for fullscreen purposes. NSLayoutConstraint* _bannerPromoBackgroundHeightConstraint; + // Indicates whether constraints for the tab group indicator have been set. + BOOL _tabGroupIndicatorConstraintsSet; + + // Constrains the height of the tab group indicator. + NSLayoutConstraint* _tabGroupIndicatorHeightConstraint; + // The location bar container has a bottom constraint where the constant // is controlled outside this class. However, the exact second item for // this constraint may vary, so use this layout guide to add a level in @@ -302,28 +309,8 @@ _tabGroupIndicatorView.translatesAutoresizingMaskIntoConstraints = NO; _tabGroupIndicatorView.backgroundColor = self.buttonFactory.toolbarConfiguration.backgroundColor; + _tabGroupIndicatorView.delegate = self; [self addSubview:_tabGroupIndicatorView]; - - id<LayoutGuideProvider> safeArea = self.safeAreaLayoutGuide; - [NSLayoutConstraint activateConstraints:@[ - [self.tabGroupIndicatorView.leadingAnchor - constraintEqualToAnchor:safeArea.leadingAnchor], - [self.tabGroupIndicatorView.trailingAnchor - constraintEqualToAnchor:safeArea.trailingAnchor], - [self.tabGroupIndicatorView.heightAnchor - constraintEqualToConstant:kTabGroupIndicatorHeight], - ]]; - self.tabGroupIndicatorTopOmniboxConstraints = @[ - [self.tabGroupIndicatorView.bottomAnchor - constraintEqualToAnchor:self.locationBarContainer.topAnchor - constant:-kAdaptiveLocationBarVerticalMargin], - ]; - self.tabGroupIndicatorBottomOmniboxConstraints = @[ - [self.tabGroupIndicatorView.bottomAnchor - constraintEqualToAnchor:self.bottomAnchor], - ]; - - [self updateTabGroupIndicatorAvailability]; } #pragma mark - UIView @@ -351,9 +338,8 @@ height += kTabGroupIndicatorHeight; // If the Omnibox is not at the top, remove the top vertical margin to avoid // extra space when the tab group indicator is present. - if (!isTopOmnibox) { + if (!isTopOmnibox && !HasTabGroupIndicatorBelowOmnibox()) { height -= kTopToolbarUnsplitMargin; - } else { } } // TODO(crbug.com/40279063): Find out why primary toolbar height cannot be @@ -718,9 +704,20 @@ _previousFullscreenProgress = progress; CGFloat alphaValue = fmax(progress * 2 - 1, 0); - _bannerPromoBackground.alpha = alphaValue; + if (IsTabGroupInGridEnabled()) { + if (!_tabGroupIndicatorView.hidden && HasTabGroupIndicatorBelowOmnibox()) { + CHECK(_tabGroupIndicatorConstraintsSet); + CGFloat tabgroupIndicatorHeight = + self.tabGroupIndicatorView.hidden + ? 0 + : kTabGroupIndicatorHeight * alphaValue; + _tabGroupIndicatorHeightConstraint.constant = tabgroupIndicatorHeight; + } + self.tabGroupIndicatorView.alpha = alphaValue; + } + _bannerPromoBackgroundHeightConstraint.constant = [self bannerPromoBackgroundHeightForFullscreenProgress:progress]; } @@ -755,4 +752,81 @@ _previousFullscreenProgress]; } +// Updates tabgroupIndicatorView constraints. +// `visible` is true when the group indicator view is visible. +- (void)updateTabGroupIndicatorViewConstraints:(BOOL)visible { + if (!visible) { + // reset the `locationBarBottomConstraint`. + self.locationBarBottomConstraint.active = NO; + self.locationBarBottomConstraint = [self.locationBarContainer.bottomAnchor + constraintEqualToAnchor:_locationBarContainerBottomLayoutGuide + .bottomAnchor]; + self.locationBarBottomConstraint.active = YES; + return; + } + + // `locationBarBottomConstraint` might have been reset when transitioning + // from grouped -> regular -> grouped tab. + if (HasTabGroupIndicatorBelowOmnibox()) { + self.locationBarBottomConstraint.active = NO; + self.locationBarBottomConstraint = [self.tabGroupIndicatorView.bottomAnchor + constraintEqualToAnchor:_locationBarContainerBottomLayoutGuide + .bottomAnchor]; + self.locationBarBottomConstraint.active = YES; + + self.tabGroupIndicatorTopOmniboxConstraints = @[ + [self.tabGroupIndicatorView.topAnchor + constraintEqualToAnchor:self.locationBarContainer.bottomAnchor], + ]; + } + + if (_tabGroupIndicatorConstraintsSet) { + return; + } + + id<LayoutGuideProvider> safeArea = self.safeAreaLayoutGuide; + _tabGroupIndicatorHeightConstraint = [self.tabGroupIndicatorView.heightAnchor + constraintEqualToConstant:kTabGroupIndicatorHeight]; + [NSLayoutConstraint activateConstraints:@[ + [self.tabGroupIndicatorView.leadingAnchor + constraintEqualToAnchor:safeArea.leadingAnchor], + [self.tabGroupIndicatorView.trailingAnchor + constraintEqualToAnchor:safeArea.trailingAnchor], + _tabGroupIndicatorHeightConstraint + ]]; + + if (HasTabGroupIndicatorBelowOmnibox()) { + self.locationBarBottomConstraint.active = NO; + self.locationBarBottomConstraint = [self.tabGroupIndicatorView.bottomAnchor + constraintEqualToAnchor:_locationBarContainerBottomLayoutGuide + .bottomAnchor]; + self.locationBarBottomConstraint.active = YES; + + self.tabGroupIndicatorTopOmniboxConstraints = @[ + [self.tabGroupIndicatorView.topAnchor + constraintEqualToAnchor:self.locationBarContainer.bottomAnchor], + ]; + } else { + self.tabGroupIndicatorTopOmniboxConstraints = @[ + [self.tabGroupIndicatorView.bottomAnchor + constraintEqualToAnchor:self.locationBarContainer.topAnchor + constant:-kAdaptiveLocationBarVerticalMargin], + ]; + } + + self.tabGroupIndicatorBottomOmniboxConstraints = @[ + [self.tabGroupIndicatorView.bottomAnchor + constraintEqualToAnchor:self.bottomAnchor], + ]; + + _tabGroupIndicatorConstraintsSet = YES; + [self updateTabGroupIndicatorAvailability]; +} + +#pragma mark - TabGroupIndicatorViewDelegate + +- (void)tabGroupIndicatorViewVisibilityUpdated:(BOOL)visible { + [self updateTabGroupIndicatorViewConstraints:visible]; +} + @end
diff --git a/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view_controller.mm b/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view_controller.mm index 10f19b7..da9cab3 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view_controller.mm +++ b/ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view_controller.mm
@@ -262,9 +262,6 @@ CGFloat alphaValue = fmax(progress * 2 - 1, 0); self.view.leadingStackView.alpha = alphaValue; self.view.trailingStackView.alpha = alphaValue; - if (IsTabGroupInGridEnabled()) { - self.view.tabGroupIndicatorView.alpha = alphaValue; - } self.view.locationBarBottomConstraint.constant = [self verticalMarginForLocationBarForFullscreenProgress:progress];
diff --git a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.h b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.h index 78cd060..998d863 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.h +++ b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.h
@@ -12,16 +12,27 @@ @protocol TabGroupIndicatorMutator; @protocol ToolbarHeightDelegate; +// Delegate for the TabGroupIndicatorView. +@protocol TabGroupIndicatorViewDelegate + +// Called when the visibility of the TabGroupIndicatorView is updated. +- (void)tabGroupIndicatorViewVisibilityUpdated:(BOOL)visible; + +@end + // UIView that contains information about the current tab group. @interface TabGroupIndicatorView : UIView <TabGroupIndicatorConsumer> +// Delegate that handles tab group indicator view updates. +@property(nonatomic, weak) id<TabGroupIndicatorViewDelegate> delegate; + // The view controller on which the face pile is presented. @property(nonatomic, weak) UIViewController* facePileParentViewController; // Mutator for actions happening in the view. @property(nonatomic, weak) id<TabGroupIndicatorMutator> mutator; -/// Delegate that handles the toolbars height. +// Delegate that handles the toolbars height. @property(nonatomic, weak) id<ToolbarHeightDelegate> toolbarHeightDelegate; // Tracks if the view is available.
diff --git a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm index 539ab42..7500e9a0 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm +++ b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/ui/tab_group_indicator_view.mm
@@ -131,6 +131,7 @@ } self.hidden = hidden; [_toolbarHeightDelegate toolbarsHeightChanged]; + [_delegate tabGroupIndicatorViewVisibilityUpdated:!hidden]; } // Returns the stack view.
diff --git a/ios/chrome/browser/ui/whats_new/strings/ios_whats_new_strings.grd b/ios/chrome/browser/ui/whats_new/strings/ios_whats_new_strings.grd index fc2f7288f..f28ab4e4 100644 --- a/ios/chrome/browser/ui/whats_new/strings/ios_whats_new_strings.grd +++ b/ios/chrome/browser/ui/whats_new/strings/ios_whats_new_strings.grd
@@ -6,7 +6,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_whats_new_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/browser/ui/whats_new/strings/resources/ios_whats_new_strings_iw.xtb b/ios/chrome/browser/ui/whats_new/strings/resources/ios_whats_new_strings_iw.xtb index fa3ab4ab..c866b53 100644 --- a/ios/chrome/browser/ui/whats_new/strings/resources/ios_whats_new_strings_iw.xtb +++ b/ios/chrome/browser/ui/whats_new/strings/resources/ios_whats_new_strings_iw.xtb
@@ -6,15 +6,15 @@ <translation id="1554523534964039554">שיתוף סיסמאות עם הקבוצה המשפחתית</translation> <translation id="1703743472724191604">מחיר $100 - $150</translation> <translation id="1741219894094057085">שעון חכם</translation> -<translation id="1841425245869881163">גוללים לתחתית המסך ומקישים על "אפשרויות רכישה אחרות"</translation> +<translation id="1841425245869881163">גוללים לתחתית המסך ולוחצים על "אפשרויות רכישה אחרות"</translation> <translation id="1988591645162894496">אפשר למצוא בקלות עוד חנויות שמציעות את המוצרים שרוצים לקנות</translation> -<translation id="2043455190894016404">בסרגל הכתובות, מקישים על סמל היסטוריית המחירים כדי לראות את השינויים במחיר לאורך הזמן</translation> +<translation id="2043455190894016404">בסרגל הכתובות, לוחצים על סמל היסטוריית המחירים כדי לראות את השינויים במחיר לאורך הזמן</translation> <translation id="2058876133802084300">$150</translation> <translation id="2216366330550244277">מעבר לדף של מוצר</translation> <translation id="2319645462410562206">Chrome יכול לזהות מספרי מעקב שהזנת באתרים ולהציג עדכונים על חבילות בדף 'כרטיסייה חדשה'.</translation> <translation id="2551790923936684824">לעקוב אחרי החבילה הזו?</translation> <translation id="2657494017069155956">אפשר להעביר את Chrome ל-Dock במסך הבית של האייפון כדי לגשת לאפליקציה מהר יותר</translation> -<translation id="3067067035910355531">בוחרים סיסמה ומקישים על סמל השיתוף</translation> +<translation id="3067067035910355531">בוחרים סיסמה ולוחצים על סמל השיתוף</translation> <translation id="3266153067803506235">לוחצים לחיצה ארוכה על סמל Chrome ואז לוחצים על 'עריכה של מסך הבית'</translation> <translation id="3764562164106905124">נוב'</translation> <translation id="3770157741494890119">מאשרים ל-Chrome לעקוב אחר החבילות.</translation> @@ -25,7 +25,7 @@ <translation id="4607887340472970274">מעקב מחירים</translation> <translation id="4874629658972056851">פתיחת תפריט Chrome</translation> <translation id="4989753829760610266">הסתרת פריטים שלא רוצים לראות.</translation> -<translation id="5119329531859909472">כדי לעקוב אחרי המוצר, מקישים על "מעקב"</translation> +<translation id="5119329531859909472">כדי לעקוב אחרי המוצר, לוחצים על "מעקב"</translation> <translation id="5423269318075950257">מעקב אחר המחיר</translation> <translation id="5475069061743940393">מעקב אחר חבילה</translation> <translation id="5777468213129569553">פתיחת Chrome</translation> @@ -42,19 +42,19 @@ <translation id="6944020103996173879">הצגת אפשרויות קנייה נוספות</translation> <translation id="6998251471716094661">מעקב אחר מחירים של מוצרים וקבלת התראות על ירידות במחיר באתרים</translation> <translation id="7065813315247345131">העברת Chrome ל-Dock</translation> -<translation id="7097046145876891318">בסרגל הכתובות, מקישים על היסטוריית המחירים כדי לראות את השינויים במחיר לאורך הזמן</translation> +<translation id="7097046145876891318">בסרגל הכתובות, לוחצים על היסטוריית המחירים כדי לראות את השינויים במחיר לאורך הזמן</translation> <translation id="7108338896283013870">הסתרה</translation> <translation id="7180865173735832675">התאמה אישית</translation> <translation id="7227293336683593977">היסטוריית המחירים</translation> <translation id="794945939108159738">$120</translation> <translation id="8094734579697217987">אפשר לשתף עותק של סיסמה עם הקבוצה המשפחתית באופן קל ומאובטח ב'מנהל הסיסמאות של Google'.</translation> -<translation id="8105002292464261990">מקישים על 'התאמה אישית של התפריט'</translation> -<translation id="8348530355586151720">מקישים על סמל האפשרויות הנוספות (3 נקודות)</translation> +<translation id="8105002292464261990">לוחצים על 'התאמה אישית של התפריט'</translation> +<translation id="8348530355586151720">לוחצים על סמל האפשרויות הנוספות (3 נקודות)</translation> <translation id="8625706492572042370">עריכה של מסך הבית</translation> <translation id="8856329583773053724">בוחרים חברים בקבוצה המשפחתית שאיתם רוצים לשתף את הסיסמה</translation> <translation id="8871142946513037507">חנויות אחרות באינטרנט</translation> <translation id="9085041112720733880">מזינים את מספר המעקב שמופיע באתר המשלוחים או באתר הקניות.</translation> <translation id="9093047661118118915">מועד המסירה המשוער</translation> <translation id="9181396888106868838">לוחצים לחיצה ארוכה על אפשרות כלשהי בתפריט</translation> -<translation id="991428047095920989">בסרגל הכתובות, מקישים על סמל היסטוריית המחירים כדי לראות את השינויים במחיר לאורך הזמן</translation> +<translation id="991428047095920989">בסרגל הכתובות, לוחצים על סמל היסטוריית המחירים כדי לראות את השינויים במחיר לאורך הזמן</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/browser/web/model/annotations/annotations_util.mm b/ios/chrome/browser/web/model/annotations/annotations_util.mm index 0d184055..30e2c4ac 100644 --- a/ios/chrome/browser/web/model/annotations/annotations_util.mm +++ b/ios/chrome/browser/web/model/annotations/annotations_util.mm
@@ -95,7 +95,8 @@ if (param == web::features::kOneTapForMapsConsentModeIPHForcedParam) { return true; } - if (param == web::features::kOneTapForMapsConsentModeIPHParam) { + if (param == web::features::kOneTapForMapsConsentModeIPHParam || + param == "") { return !IsAddressAutomaticDetectionAccepted(prefs); } return false; @@ -110,7 +111,8 @@ } if (param == web::features::kOneTapForMapsConsentModeDisabledParam || param == web::features::kOneTapForMapsConsentModeIPHParam || - param == web::features::kOneTapForMapsConsentModeIPHForcedParam) { + param == web::features::kOneTapForMapsConsentModeIPHForcedParam || + param == "") { return false; } return !IsAddressAutomaticDetectionAccepted(prefs);
diff --git a/ios/chrome/browser/web/model/blocked_popup_tab_helper_unittest.mm b/ios/chrome/browser/web/model/blocked_popup_tab_helper_unittest.mm index 6da1925..e7d422cb 100644 --- a/ios/chrome/browser/web/model/blocked_popup_tab_helper_unittest.mm +++ b/ios/chrome/browser/web/model/blocked_popup_tab_helper_unittest.mm
@@ -171,7 +171,7 @@ ASSERT_EQ(1U, GetInfobarManager()->infobars().size()); histogram_tester.ExpectUniqueSample( "Mobile.Messages.Confirm.Event.ConfirmInfobarTypeBlockPopups", - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( MobileMessagesConfirmInfobarEvents::Presented), 1); @@ -180,7 +180,7 @@ GetInfobarManager()->infobars()[0]->delegate()->InfoBarDismissed(); histogram_tester.ExpectBucketCount( kInfobarTypeBlockPopupsEventHistogram, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( MobileMessagesConfirmInfobarEvents::Dismissed), 1); } @@ -206,7 +206,7 @@ delegate->Accept(); histogram_tester.ExpectBucketCount( kInfobarTypeBlockPopupsEventHistogram, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( MobileMessagesConfirmInfobarEvents::Accepted), 1); }
diff --git a/ios/chrome/browser/youtube_incognito/ui/BUILD.gn b/ios/chrome/browser/youtube_incognito/ui/BUILD.gn index 7f09661..68f8f8c 100644 --- a/ios/chrome/browser/youtube_incognito/ui/BUILD.gn +++ b/ios/chrome/browser/youtube_incognito/ui/BUILD.gn
@@ -17,5 +17,6 @@ "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/confirmation_alert:confirmation_alert", "//ios/chrome/common/ui/util", + "//ui/base", ] }
diff --git a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_enterprise_sheet.mm b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_enterprise_sheet.mm index 989836f..5d5aa81 100644 --- a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_enterprise_sheet.mm +++ b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_enterprise_sheet.mm
@@ -10,7 +10,8 @@ #import "ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet_delegate.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" -#import "ios/chrome/grit/ios_branded_strings.h" +#import "ios/chrome/grit/ios_strings.h" +#import "ui/base/l10n/l10n_util_mac.h" namespace { @@ -35,13 +36,15 @@ self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; self.aboveTitleView = [self enterpriseTitleView]; - // TODO(crbug.com/374935670): Add a11y strings. - self.titleString = @"TODO Incognito Mode Is Unavailable"; + self.titleString = + l10n_util::GetNSString(IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_TITLE); self.secondaryTitleString = - @"TODO Your organization turned off private browsing."; + l10n_util::GetNSString(IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SUBTITLE); self.subtitleString = self.URLText; - self.primaryActionString = @"TODO Open Site Anyway"; - self.secondaryActionString = @"TODO cancel"; + self.primaryActionString = l10n_util::GetNSString( + IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_PRIMARY_BUTTON_TITLE); + self.secondaryActionString = l10n_util::GetNSString( + IDS_IOS_YOUTUBE_INCOGNITO_ENTERPRISE_SECONDARY_BUTTON_TITLE); self.customSpacing = kVerticalSpacing; self.titleTextStyle = UIFontTextStyleTitle3; self.scrollEnabled = YES;
diff --git a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm index 40a5fbf..4e0ac064 100644 --- a/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm +++ b/ios/chrome/browser/youtube_incognito/ui/youtube_incognito_sheet.mm
@@ -12,6 +12,8 @@ #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/grit/ios_branded_strings.h" +#import "ios/chrome/grit/ios_strings.h" +#import "ui/base/l10n/l10n_util_mac.h" namespace { @@ -44,11 +46,12 @@ self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; self.aboveTitleView = [self animatedTitleView]; - // TODO(crbug.com/374935670): Add a11y strings. - self.titleString = @"TODO You're In Chrome Incognito"; + self.titleString = + l10n_util::GetNSString(IDS_IOS_YOUTUBE_INCOGNITO_SHEET_TITLE); self.subtitleString = - @"TODO Chrome automatically opens Youtube incognito links in Incognito"; - self.primaryActionString = @"TODO Got It"; + l10n_util::GetNSString(IDS_IOS_YOUTUBE_INCOGNITO_SHEET_SUBTITLE); + self.primaryActionString = l10n_util::GetNSString( + IDS_IOS_YOUTUBE_INCOGNITO_SHEET_PRIMARY_BUTTON_TITLE); self.titleTextStyle = UIFontTextStyleTitle3; self.scrollEnabled = YES;
diff --git a/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_chromium_strings.grd b/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_chromium_strings.grd index d50707d..6e113fd9 100644 --- a/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_chromium_strings.grd +++ b/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_chromium_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_content_widget_extension_branded_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_google_chrome_strings.grd b/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_google_chrome_strings.grd index 2504f5cb..c4c19533 100644 --- a/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_google_chrome_strings.grd +++ b/ios/chrome/content_widget_extension/strings/ios_content_widget_extension_google_chrome_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_content_widget_extension_branded_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_chromium_strings_iw.xtb b/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_chromium_strings_iw.xtb index f5145ccc..a66171b 100644 --- a/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_chromium_strings_iw.xtb +++ b/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_chromium_strings_iw.xtb
@@ -2,5 +2,5 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="264609280318319531">Chromium - אתרים מומלצים</translation> -<translation id="628445239225255562">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, מקישים על 'עריכה' ואז על '+'. עוברים אל Chromium ובוחרים באפשרות 'קיצורי דרך ב-Chromium'.</translation> +<translation id="628445239225255562">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, לוחצים על 'עריכה' ואז על '+'. עוברים אל Chromium ובוחרים באפשרות 'קיצורי דרך ב-Chromium'.</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_google_chrome_strings_iw.xtb b/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_google_chrome_strings_iw.xtb index 0ff84a86..4d2120c 100644 --- a/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_google_chrome_strings_iw.xtb +++ b/ios/chrome/content_widget_extension/strings/resources/ios_content_widget_extension_google_chrome_strings_iw.xtb
@@ -2,5 +2,5 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="4544225832231827770">Chrome - אתרים מומלצים</translation> -<translation id="5724968293151962792">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, מקישים על 'עריכה' ואז על '+'. עוברים אל Chrome ובוחרים באפשרות קיצורי דרך ב-Chrome'.</translation> +<translation id="5724968293151962792">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, לוחצים על 'עריכה' ואז על '+'. עוברים אל Chrome ובוחרים באפשרות קיצורי דרך ב-Chrome'.</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd index 6f3cefb..a1d4b077 100644 --- a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd +++ b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_credential_provider_extension_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/open_extension/strings/ios_open_extension_chromium_strings.grd b/ios/chrome/open_extension/strings/ios_open_extension_chromium_strings.grd index 6dc5cc3..4f5b530 100644 --- a/ios/chrome/open_extension/strings/ios_open_extension_chromium_strings.grd +++ b/ios/chrome/open_extension/strings/ios_open_extension_chromium_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_open_extension_branded_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/open_extension/strings/ios_open_extension_google_chrome_strings.grd b/ios/chrome/open_extension/strings/ios_open_extension_google_chrome_strings.grd index 591f7a15..4797ad4 100644 --- a/ios/chrome/open_extension/strings/ios_open_extension_google_chrome_strings.grd +++ b/ios/chrome/open_extension/strings/ios_open_extension_google_chrome_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_open_extension_branded_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_chromium_strings.grd b/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_chromium_strings.grd index 83d79e0f..8f32ed1 100644 --- a/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_chromium_strings.grd +++ b/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_chromium_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_search_widget_extension_branded_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_google_chrome_strings.grd b/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_google_chrome_strings.grd index f19af98d..3527fbc 100644 --- a/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_google_chrome_strings.grd +++ b/ios/chrome/search_widget_extension/strings/ios_search_widget_extension_google_chrome_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_search_widget_extension_branded_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_chromium_strings_iw.xtb b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_chromium_strings_iw.xtb index bfb4466..1585798a 100644 --- a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_chromium_strings_iw.xtb +++ b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_chromium_strings_iw.xtb
@@ -2,5 +2,5 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="7091575783311734770">Chromium - פעולות מהירות</translation> -<translation id="8886794733440832930">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, מקישים על 'עריכה' ואז על '+'. עוברים אל Chromium ובוחרים באפשרות 'פעולות מהירות'.</translation> +<translation id="8886794733440832930">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, לוחצים על 'עריכה' ואז על '+'. עוברים אל Chromium ובוחרים באפשרות 'פעולות מהירות'.</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_google_chrome_strings_iw.xtb b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_google_chrome_strings_iw.xtb index 04875c1e..07c7f023 100644 --- a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_google_chrome_strings_iw.xtb +++ b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_google_chrome_strings_iw.xtb
@@ -2,5 +2,5 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="1848444672771235816">Chrome - פעולות מהירות</translation> -<translation id="6834084925134176532">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, מקישים על 'עריכה' ואז על '+'. עוברים אל Chrome ובוחרים באפשרות 'פעולות מהירות'.</translation> +<translation id="6834084925134176532">כדי להמשיך להשתמש בווידג'ט הזה, בתחתית המסך, לוחצים על 'עריכה' ואז על '+'. עוברים אל Chrome ובוחרים באפשרות 'פעולות מהירות'.</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/share_extension/strings/ios_share_extension_strings.grd b/ios/chrome/share_extension/strings/ios_share_extension_strings.grd index 61cf2d1..56014e3 100644 --- a/ios/chrome/share_extension/strings/ios_share_extension_strings.grd +++ b/ios/chrome/share_extension/strings/ios_share_extension_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_share_extension_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/chrome/test/app/histogram_test_util.h b/ios/chrome/test/app/histogram_test_util.h index 1ec4bd87..031d7305 100644 --- a/ios/chrome/test/app/histogram_test_util.h +++ b/ios/chrome/test/app/histogram_test_util.h
@@ -48,7 +48,7 @@ // buckets have samples. If not, call `failure_block` with a descriptive text // of the error. BOOL ExpectUniqueSample(const std::string& name, - base::HistogramBase::Sample sample, + base::HistogramBase::Sample32 sample, base::HistogramBase::Count expected_count, FailureBlock failure_block) const; @@ -58,7 +58,7 @@ // Returns true if the bucket contains `expected_count` samples. If not, call // `failure_block` with a descriptive text of the error. BOOL ExpectBucketCount(const std::string& name, - base::HistogramBase::Sample sample, + base::HistogramBase::Sample32 sample, base::HistogramBase::Count expected_count, FailureBlock failure_block) const; @@ -88,7 +88,7 @@ // `expected_count`. The bucket's current value is determined from `samples` // and is modified based on the snapshot stored for histogram `name`. BOOL CheckBucketCount(const std::string& name, - base::HistogramBase::Sample sample, + base::HistogramBase::Sample32 sample, base::Histogram::Count expected_count, const base::HistogramSamples& samples, FailureBlock failure_block) const; @@ -109,12 +109,12 @@ }; struct Bucket { - Bucket(base::HistogramBase::Sample min, base::HistogramBase::Count count) + Bucket(base::HistogramBase::Sample32 min, base::HistogramBase::Count count) : min(min), count(count) {} bool operator==(const Bucket& other) const; - base::HistogramBase::Sample min; + base::HistogramBase::Sample32 min; base::HistogramBase::Count count; };
diff --git a/ios/chrome/test/app/histogram_test_util.mm b/ios/chrome/test/app/histogram_test_util.mm index aa37332a..ac8a668 100644 --- a/ios/chrome/test/app/histogram_test_util.mm +++ b/ios/chrome/test/app/histogram_test_util.mm
@@ -42,7 +42,7 @@ BOOL HistogramTester::ExpectUniqueSample( const std::string& name, - base::HistogramBase::Sample sample, + base::HistogramBase::Sample32 sample, base::HistogramBase::Count expected_count, FailureBlock failure_block) const { base::HistogramBase* histogram = FindHistogram(name, failure_block); @@ -63,7 +63,7 @@ BOOL HistogramTester::ExpectBucketCount( const std::string& name, - base::HistogramBase::Sample sample, + base::HistogramBase::Sample32 sample, base::HistogramBase::Count expected_count, FailureBlock failure_block) const { BOOL not_found_fails = expected_count > 0; @@ -100,7 +100,7 @@ GetHistogramSamplesSinceCreation(name); if (snapshot) { for (auto it = snapshot->Iterator(); !it->Done(); it->Next()) { - base::HistogramBase::Sample sample; + base::HistogramBase::Sample32 sample; base::HistogramBase::Count count; it->Get(&sample, nullptr, &count); samples.push_back(Bucket(sample, count)); @@ -134,7 +134,7 @@ BOOL HistogramTester::CheckBucketCount( const std::string& name, - base::HistogramBase::Sample sample, + base::HistogramBase::Sample32 sample, base::HistogramBase::Count expected_count, const base::HistogramSamples& samples, FailureBlock failure_block) const {
diff --git a/ios/chrome/widget_kit_extension/strings/ios_widget_kit_extension_strings.grd b/ios/chrome/widget_kit_extension/strings/ios_widget_kit_extension_strings.grd index 13d3b93..90b393ad 100644 --- a/ios/chrome/widget_kit_extension/strings/ios_widget_kit_extension_strings.grd +++ b/ios/chrome/widget_kit_extension/strings/ios_widget_kit_extension_strings.grd
@@ -11,7 +11,7 @@ --> <grit base_dir="." latest_public_release="0" current_release="1" - output_all_resource_defines="false" source_lang_id="en" enc_check="möl"> + source_lang_id="en" enc_check="möl"> <outputs> <output filename="grit/ios_widget_kit_extension_strings.h" type="rc_header"> <emit emit_type="prepend"></emit>
diff --git a/ios/components/security_interstitials/lookalikes/lookalike_url_tab_helper_unittest.mm b/ios/components/security_interstitials/lookalikes/lookalike_url_tab_helper_unittest.mm index a2ec43e..719a7d2 100644 --- a/ios/components/security_interstitials/lookalikes/lookalike_url_tab_helper_unittest.mm +++ b/ios/components/security_interstitials/lookalikes/lookalike_url_tab_helper_unittest.mm
@@ -76,7 +76,7 @@ .ShouldAllowNavigation()); histogram_tester_.ExpectUniqueSample( lookalikes::kInterstitialHistogramName, - static_cast<base::HistogramBase::Sample>( + static_cast<base::HistogramBase::Sample32>( lookalikes::NavigationSuggestionEvent::kMatchSkeletonTop500), 1);
diff --git a/ios/web/common/features.mm b/ios/web/common/features.mm index 48d9dbe..c16c6f9 100644 --- a/ios/web/common/features.mm +++ b/ios/web/common/features.mm
@@ -51,7 +51,7 @@ const char kOneTapForMapsConsentModeIPHForcedParam[] = "iphforced"; BASE_FEATURE(kOneTapForMaps, "EnableOneTapForMaps", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kScrollViewProxyScrollEnabledWorkaround, "ScrollViewProxyScrollEnabledWorkaround",
diff --git a/ios/web/ios_web_resources.grd b/ios/web/ios_web_resources.grd index 6e4ff19..798b777c 100644 --- a/ios/web/ios_web_resources.grd +++ b/ios/web/ios_web_resources.grd
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> +<grit latest_public_release="0" current_release="1"> <outputs> <output filename="grit/ios_web_resources.h" type="rc_header"> <emit emit_type='prepend'></emit>
diff --git a/ios/web/test/test_resources.grd b/ios/web/test/test_resources.grd index 3274af6..2997e26e 100644 --- a/ios/web/test/test_resources.grd +++ b/ios/web/test/test_resources.grd
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> +<grit latest_public_release="0" current_release="1"> <outputs> <output filename="grit/test_resources.h" type="rc_header"> <emit emit_type='prepend'></emit>
diff --git a/ios_internal b/ios_internal index 728f205..7c7a0077 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit 728f2050ecc1547009c1ec095855a100e6554117 +Subproject commit 7c7a00774ea89513f74dcb2f89bf976d889ffb87
diff --git a/media/renderers/paint_canvas_video_renderer.cc b/media/renderers/paint_canvas_video_renderer.cc index 7bb844e..0495f08 100644 --- a/media/renderers/paint_canvas_video_renderer.cc +++ b/media/renderers/paint_canvas_video_renderer.cc
@@ -1819,7 +1819,6 @@ raster_context_provider->ContextSupport()); cache_->coded_size = video_frame->coded_size(); - cache_->visible_rect = video_frame->visible_rect(); // In OOPR mode, we can keep the entire TextureBacking. In non-OOPR, // we can recycle the mailbox/texture, but have to replace the SkImage.
diff --git a/media/renderers/paint_canvas_video_renderer.h b/media/renderers/paint_canvas_video_renderer.h index 1389a2c..0433ba8 100644 --- a/media/renderers/paint_canvas_video_renderer.h +++ b/media/renderers/paint_canvas_video_renderer.h
@@ -251,11 +251,6 @@ // This is only set if the VideoFrame was texture-backed. gfx::Size coded_size; - // The visible subrect of |coded_size| that represents the logical contents - // of the frame after cropping. - // This is only set if the VideoFrame was texture-backed. - gfx::Rect visible_rect; - // Used to allow recycling of the previous shared image. This requires that // no external users have access to this resource via SkImage. Returns true // if the existing resource can be recycled.
diff --git a/media/video/renderable_gpu_memory_buffer_video_frame_pool.cc b/media/video/renderable_gpu_memory_buffer_video_frame_pool.cc index 55756af..4f216eb 100644 --- a/media/video/renderable_gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/renderable_gpu_memory_buffer_video_frame_pool.cc
@@ -21,6 +21,7 @@ #include "gpu/GLES2/gl2extchromium.h" #include "gpu/command_buffer/client/client_shared_image.h" #include "gpu/command_buffer/client/shared_image_interface.h" +#include "gpu/command_buffer/common/shared_image_capabilities.h" #include "gpu/command_buffer/common/shared_image_usage.h" #include "media/base/format_utils.h" #include "media/base/media_switches.h" @@ -207,7 +208,7 @@ const gfx::Size buffer_size_in_pixels = GetBufferSizeInPixelsForVideoPixelFormat(format_, coded_size_); - constexpr gpu::SharedImageUsageSet kSharedImageUsage = + gpu::SharedImageUsageSet usage = #if BUILDFLAG(IS_MAC) gpu::SHARED_IMAGE_USAGE_MACOS_VIDEO_TOOLBOX | #endif @@ -222,7 +223,23 @@ gpu::SHARED_IMAGE_USAGE_GLES2_READ | gpu::SHARED_IMAGE_USAGE_GLES2_WRITE | gpu::SHARED_IMAGE_USAGE_RASTER_READ | gpu::SHARED_IMAGE_USAGE_RASTER_WRITE | - gpu::SHARED_IMAGE_USAGE_DISPLAY_READ | gpu::SHARED_IMAGE_USAGE_SCANOUT; + gpu::SHARED_IMAGE_USAGE_DISPLAY_READ; + + auto si_caps = context->GetCapabilities(); +#if BUILDFLAG(IS_WIN) + // On Windows, overlays are in general not supported. However, in some + // cases they are supported for the software video frame use case in + // particular. This cap details whether that support is present. + const bool add_scanout_usage = + si_caps.supports_scanout_shared_images_for_software_video_frames; +#else + // On all other platforms, whether scanout for SharedImages is supported + // for this particular use case is no different than the general case. + const bool add_scanout_usage = si_caps.supports_scanout_shared_images; +#endif + if (add_scanout_usage) { + usage |= gpu::SHARED_IMAGE_USAGE_SCANOUT; + } CHECK(format_ == PIXEL_FORMAT_NV12 || format_ == PIXEL_FORMAT_ABGR || format_ == PIXEL_FORMAT_ARGB) @@ -232,7 +249,7 @@ shared_image_ = context->CreateSharedImage(buffer_size_in_pixels, kBufferUsage, si_format, - color_space_, kSharedImageUsage, sync_token_); + color_space_, usage, sync_token_); if (!shared_image_) { DLOG(ERROR) << "Failed to allocate shared image for frame: coded_size=" << coded_size_.ToString() @@ -262,10 +279,8 @@ } video_frame->set_color_space(color_space_); - - // TODO(crbug.com/40174702): This should depend on the platform and - // format. - video_frame->metadata().allow_overlay = true; + video_frame->metadata().allow_overlay = + shared_image_->usage().Has(gpu::SHARED_IMAGE_USAGE_SCANOUT); // Only native (non shared memory) GMBs require waiting on GPU fences. const bool has_native_gmb = video_frame->HasNativeGpuMemoryBuffer();
diff --git a/media/video/renderable_gpu_memory_buffer_video_frame_pool.h b/media/video/renderable_gpu_memory_buffer_video_frame_pool.h index 08b2410..36b357b 100644 --- a/media/video/renderable_gpu_memory_buffer_video_frame_pool.h +++ b/media/video/renderable_gpu_memory_buffer_video_frame_pool.h
@@ -24,6 +24,7 @@ namespace gpu { class ClientSharedImage; class GpuMemoryBufferManager; +struct SharedImageCapabilities; class SharedImageInterface; struct SyncToken; } // namespace gpu @@ -69,6 +70,8 @@ const gpu::SyncToken& sync_token, scoped_refptr<gpu::ClientSharedImage> shared_image) = 0; + virtual const gpu::SharedImageCapabilities& GetCapabilities() = 0; + virtual ~Context() = default; };
diff --git a/media/video/renderable_gpu_memory_buffer_video_frame_pool_unittest.cc b/media/video/renderable_gpu_memory_buffer_video_frame_pool_unittest.cc index ae24bd6e..d32feca 100644 --- a/media/video/renderable_gpu_memory_buffer_video_frame_pool_unittest.cc +++ b/media/video/renderable_gpu_memory_buffer_video_frame_pool_unittest.cc
@@ -80,6 +80,10 @@ gpu::kNullSurfaceHandle, buffer_usage); } + const gpu::SharedImageCapabilities& GetCapabilities() override { + return context_provider_->SharedImageInterface()->GetCapabilities(); + } + MOCK_METHOD2(DoCreateGpuMemoryBuffer, void(const gfx::Size& size, gfx::BufferFormat format)); MOCK_METHOD5(DoCreateSharedImage,
diff --git a/net/android/BUILD.gn b/net/android/BUILD.gn index 7331c0ab..7a45070 100644 --- a/net/android/BUILD.gn +++ b/net/android/BUILD.gn
@@ -21,6 +21,7 @@ "java/src/org/chromium/net/MimeTypeFilter.java", "java/src/org/chromium/net/NetStringUtil.java", "java/src/org/chromium/net/NetworkActiveNotifier.java", + "java/src/org/chromium/net/NetworkCapabilitiesWrapper.java", "java/src/org/chromium/net/NetworkChangeNotifier.java", "java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java", "java/src/org/chromium/net/NetworkTrafficAnnotationTag.java",
diff --git a/net/android/java/src/org/chromium/net/NetworkCapabilitiesWrapper.java b/net/android/java/src/org/chromium/net/NetworkCapabilitiesWrapper.java new file mode 100644 index 0000000..fed21dd --- /dev/null +++ b/net/android/java/src/org/chromium/net/NetworkCapabilitiesWrapper.java
@@ -0,0 +1,66 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.net; + +/** + * Simplified internal representation of Android's android.net.NetworkCapabilities (as it's hidden). + * This class contains only the information from that class that we need and is safer than moving + * raw longs or int[]s around. + */ +/* package */ class NetworkCapabilitiesWrapper { + // Either this wrapped object should be set or the fields below it should be set. Never both. + private final android.net.NetworkCapabilities mWrapped; + private final long mNetworkCapabilities; + private final long mTransportTypes; + + /** + * Construct a new NetworkCapabilitiesWrapper. + * + * @param networkCapabilities the return value of {@code NetworkRequest.getCapabilities()}. + * @param transportTypes the return value of {@code NetworkRequest.getTransportTypes()}. + */ + NetworkCapabilitiesWrapper(int[] networkCapabilities, int[] transportTypes) { + mNetworkCapabilities = packIntoLong(networkCapabilities); + mTransportTypes = packIntoLong(transportTypes); + mWrapped = null; + } + + NetworkCapabilitiesWrapper(android.net.NetworkCapabilities other) { + mWrapped = other; + mNetworkCapabilities = -1; + mTransportTypes = -1; + } + + public boolean hasCapability(int capability) { + if (mWrapped != null) { + return mWrapped.hasCapability(capability); + } + // Note that we don't do any range checking. However, as long as the capability is within + // the size of a long, it should return false on any out of range bits. + return capability >= 0 + && capability < Long.SIZE + && ((mNetworkCapabilities & (1L << capability)) != 0); + } + + public boolean hasTransport(int transportType) { + if (mWrapped != null) { + return mWrapped.hasTransport(transportType); + } + return transportType >= 0 + && transportType < Long.SIZE + && ((mTransportTypes & (1 << transportType)) != 0); + } + + private static long packIntoLong(int[] bits) { + // The flags are packed into an int[] where each int represents the position of a 1 in the + // resulting long. It's much easier to query using the long representation so convert it + // back to a long. + long packed = 0; + for (int b : bits) { + packed |= (1L << b); + } + return packed; + } +}
diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java index b56e907b..cae4d5a 100644 --- a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java +++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
@@ -265,7 +265,7 @@ } if (network != null) { - final NetworkCapabilities capabilities = getNetworkCapabilities(network); + final NetworkCapabilitiesWrapper capabilities = getNetworkCapabilities(network); boolean isMetered = (capabilities != null && !capabilities.hasCapability( @@ -401,17 +401,18 @@ } /** - * Return the NetworkCapabilities for {@code network}, or {@code null} if they cannot - * be retrieved (e.g. {@code network} has disconnected). + * Return the NetworkCapabilities for {@code network}, or {@code null} if they cannot be + * retrieved (e.g. {@code network} has disconnected). */ @VisibleForTesting - protected @Nullable NetworkCapabilities getNetworkCapabilities(Network network) { + protected @Nullable NetworkCapabilitiesWrapper getNetworkCapabilities(Network network) { final int retryCount = 2; for (int i = 0; i < retryCount; ++i) { // This try-catch is a workaround for https://crbug.com/1218536. We ignore // the exception intentionally. try { - return mConnectivityManager.getNetworkCapabilities(network); + return new NetworkCapabilitiesWrapper( + mConnectivityManager.getNetworkCapabilities(network)); } catch (SecurityException e) { // Do nothing. } @@ -643,7 +644,7 @@ @RequiresApi(Build.VERSION_CODES.P) private class AndroidRDefaultNetworkCallback extends NetworkCallback { @Nullable LinkProperties mLinkProperties; - @Nullable NetworkCapabilities mNetworkCapabilities; + @Nullable NetworkCapabilitiesWrapper mNetworkCapabilities; @Override public void onAvailable(Network network) { @@ -679,7 +680,7 @@ @Override public void onCapabilitiesChanged( Network network, NetworkCapabilities networkCapabilities) { - mNetworkCapabilities = networkCapabilities; + mNetworkCapabilities = new NetworkCapabilitiesWrapper(networkCapabilities); if (mRegistered && mLinkProperties != null && mNetworkCapabilities != null) { connectionTypeChangedTo(getNetworkState(network)); } @@ -753,7 +754,7 @@ mVpnInPlace = null; // If the filtered list of networks contains just a VPN, then that VPN is in place. if (networks.length == 1) { - final NetworkCapabilities capabilities = + final NetworkCapabilitiesWrapper capabilities = mConnectivityManagerDelegate.getNetworkCapabilities(networks[0]); if (capabilities != null && capabilities.hasTransport(TRANSPORT_VPN)) { mVpnInPlace = networks[0]; @@ -775,13 +776,13 @@ * Should changes to connected network {@code network} be ignored? * * @param network Network to possibly consider ignoring changes to. - * @param capabilities {@code NetworkCapabilities} for {@code network} if known, otherwise - * {@code null}. + * @param capabilities {@code NetworkCapabilitiesWrapper} for {@code network} if known, + * otherwise {@code null}. * @return {@code true} when either: {@code network} is an inaccessible VPN, or has already * disconnected. */ private boolean ignoreConnectedInaccessibleVpn( - Network network, @Nullable NetworkCapabilities capabilities) { + Network network, @Nullable NetworkCapabilitiesWrapper capabilities) { // Ignore inaccessible VPNs as they don't apply to Chrome. return capabilities == null || (capabilities.hasTransport(TRANSPORT_VPN) @@ -790,12 +791,13 @@ /** * Should changes to connected network {@code network} be ignored? + * * @param network Network to possible consider ignoring changes to. - * @param capabilities {@code NetworkCapabilities} for {@code network} if known, otherwise - * {@code null}. + * @param capabilities {@code NetworkCapabilitiesWrapper} for {@code network} if known, + * otherwise {@code null}. */ private boolean ignoreConnectedNetwork( - Network network, @Nullable NetworkCapabilities capabilities) { + Network network, @Nullable NetworkCapabilitiesWrapper capabilities) { return ignoreNetworkDueToVpn(network) || ignoreConnectedInaccessibleVpn(network, capabilities); } @@ -803,7 +805,7 @@ @Override public void onAvailable(Network network) { try (TraceEvent e = TraceEvent.scoped("NetworkChangeNotifierCallback::onAvailable")) { - NetworkCapabilities capabilities = + NetworkCapabilitiesWrapper capabilities = mConnectivityManagerDelegate.getNetworkCapabilities(network); if (ignoreConnectedNetwork(network, capabilities)) { return; @@ -842,7 +844,8 @@ Network network, NetworkCapabilities networkCapabilities) { try (TraceEvent e = TraceEvent.scoped("NetworkChangeNotifierCallback::onCapabilitiesChanged")) { - if (ignoreConnectedNetwork(network, networkCapabilities)) { + if (ignoreConnectedNetwork( + network, new NetworkCapabilitiesWrapper(networkCapabilities))) { return; } // A capabilities change may indicate the ConnectionType has changed, @@ -862,7 +865,7 @@ @Override public void onLosing(Network network, int maxMsToLive) { try (TraceEvent e = TraceEvent.scoped("NetworkChangeNotifierCallback::onLosing")) { - final NetworkCapabilities capabilities = + final NetworkCapabilitiesWrapper capabilities = mConnectivityManagerDelegate.getNetworkCapabilities(network); if (ignoreConnectedNetwork(network, capabilities)) { return; @@ -1269,7 +1272,7 @@ if (network.equals(ignoreNetwork)) { continue; } - final NetworkCapabilities capabilities = + final NetworkCapabilitiesWrapper capabilities = connectivityManagerDelegate.getNetworkCapabilities(network); if (capabilities == null || !capabilities.hasCapability(NET_CAPABILITY_INTERNET)) { continue;
diff --git a/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java index d1f56b57..03cd1b60 100644 --- a/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java +++ b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
@@ -9,6 +9,8 @@ import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; +import static org.mockito.Mockito.when; + import android.annotation.SuppressLint; import android.app.Activity; import android.content.BroadcastReceiver; @@ -36,6 +38,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.chromium.base.ActivityState; import org.chromium.base.ApplicationState; @@ -53,7 +56,6 @@ import org.chromium.net.NetworkChangeNotifierAutoDetect.WifiManagerDelegate; import org.chromium.net.test.util.NetworkChangeNotifierTestUtil; -import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.concurrent.Callable; @@ -101,44 +103,59 @@ } private static class Helper { - private static final Constructor<Network> sNetworkConstructor; - static { - try { - sNetworkConstructor = - (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - ? Network.class.getConstructor(Integer.TYPE) - : null; - } catch (NoSuchMethodException | SecurityException e) { - throw new RuntimeException("Unable to get Network constructor", e); - } - } - - static NetworkCapabilities getCapabilities(int transport) { + static NetworkCapabilitiesWrapper getCapabilities(int transport) { // Create a NetworkRequest with corresponding capabilities NetworkRequest request = new NetworkRequest.Builder() .addCapability(NET_CAPABILITY_INTERNET) .addTransportType(transport) .build(); - // Extract the NetworkCapabilities from the NetworkRequest. - try { - return (NetworkCapabilities) - request.getClass().getDeclaredField("networkCapabilities").get(request); - } catch (NoSuchFieldException | IllegalAccessException e) { - return null; + // Pre S, we can extract the NetworkCapabilities using reflection. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { + // Extract the NetworkCapabilities from the NetworkRequest. + try { + return new NetworkCapabilitiesWrapper( + (NetworkCapabilities) + request.getClass() + .getDeclaredField("networkCapabilities") + .get(request)); + } catch (NoSuchFieldException | IllegalAccessException e) { + return null; + } } + // On S+, there are APIs to get the underlying data from the NetworkCapabilities. + int[] capabilities = request.getCapabilities(); + int[] transportTypes = request.getTransportTypes(); + return new NetworkCapabilitiesWrapper(capabilities, transportTypes); } - // Create Network object given a NetID. + // Create Network object given a NetID. The implementation is based on the code in + // android.net.Network#getNetworkHandle. static Network netIdToNetwork(int netId) { - try { - return sNetworkConstructor.newInstance(netId); - } catch (InstantiationException - | InvocationTargetException - | IllegalAccessException e) { - throw new IllegalStateException("Trying to create Network when not allowed"); + // Use the constructor on Android versions which can access it (R and below). + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + try { + return Network.class.getConstructor(Integer.TYPE).newInstance(netId); + } catch (InstantiationException + | InvocationTargetException + | IllegalAccessException + | NoSuchMethodException e) { + throw new IllegalStateException("Trying to create Network when not allowed"); + } } + // We can't use fromNetworkHandle to create a network with netId 0 as it causes an + // IllegalArgumentException so mock it instead. + if (netId == 0) { + Network mock = Mockito.mock(Network.class); + when(mock.getNetworkHandle()).thenReturn(0L); + return mock; + } + // If these tests start failing suddenly with IllegalArgumentException. Check whether + // this magic value has been updated in android.net.Network.java. + long magic = 0xcafed00dL; + long networkHandle = ((long) netId << 32) | magic; + return Network.fromNetworkHandle(networkHandle); } } @@ -165,7 +182,7 @@ // Is this VPN accessible to the current user? final boolean mVpnAccessible; - NetworkCapabilities getCapabilities() { + NetworkCapabilitiesWrapper getCapabilities() { return Helper.getCapabilities(mTransport); } @@ -208,7 +225,7 @@ } @Override - protected NetworkCapabilities getNetworkCapabilities(Network network) { + protected NetworkCapabilitiesWrapper getNetworkCapabilities(Network network) { int netId = demungeNetId(NetworkChangeNotifierAutoDetect.networkToNetId(network)); for (MockNetwork mockNetwork : mMockNetworks) { if (netId == mockNetwork.mNetId) { @@ -301,6 +318,7 @@ /** * Pretends a network connects. + * * @param netId Network identifier * @param transport Transport, one of android.net.NetworkCapabilities.TRANSPORT_* * @param vpnAccessible Is this VPN accessible to the current user? @@ -845,7 +863,6 @@ @UiThreadTest @MediumTest @Feature({"Android-AppBase"}) - @DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.R, message = "crbug.com/385118415") public void testConnectivityManagerDelegateDoesNotCrash() { ConnectivityManagerDelegate delegate = new ConnectivityManagerDelegate(InstrumentationRegistry.getTargetContext()); @@ -902,7 +919,6 @@ @UiThreadTest @MediumTest @Feature({"Android-AppBase"}) - @DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.R, message = "crbug.com/385118415") public void testQueryableAPIsReturnExpectedValuesFromMockDelegate() { NetworkChangeNotifierAutoDetect.Observer observer = new TestNetworkChangeNotifierAutoDetectObserver(); @@ -935,7 +951,7 @@ } @Override - protected NetworkCapabilities getNetworkCapabilities(Network network) { + protected NetworkCapabilitiesWrapper getNetworkCapabilities(Network network) { return Helper.getCapabilities(TRANSPORT_WIFI); } @@ -967,7 +983,6 @@ @MediumTest @Feature({"Android-AppBase"}) @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP) - @DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.R, message = "crbug.com/385118415") public void testNetworkCallbacks() throws Exception { // Setup NetworkChangeNotifierAutoDetect final TestNetworkChangeNotifierAutoDetectObserver observer = @@ -1143,7 +1158,6 @@ @Test @MediumTest @MinAndroidSdkLevel(Build.VERSION_CODES.O) // detectUntaggedSockets added in Oreo. - @DisableIf.Build(sdk_is_greater_than = Build.VERSION_CODES.R, message = "crbug.com/385118415") public void testVpnAccessibleDoesNotCreateUntaggedSockets() { ConnectivityManagerDelegate connectivityManagerDelegate = new ConnectivityManagerDelegate(
diff --git a/net/cookies/cookie_monster_perftest.cc b/net/cookies/cookie_monster_perftest.cc index fa16c07..373d3dc 100644 --- a/net/cookies/cookie_monster_perftest.cc +++ b/net/cookies/cookie_monster_perftest.cc
@@ -23,6 +23,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "testing/perf/perf_result_reporter.h" #include "url/gurl.h" +#include "base/test/allow_check_is_test_for_testing.h" namespace net { @@ -63,7 +64,9 @@ class CookieMonsterTest : public testing::Test { public: - CookieMonsterTest() = default; + CookieMonsterTest(){ + base::test::AllowCheckIsTestForTesting(); + } private: base::test::SingleThreadTaskEnvironment task_environment_{
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index a1940074..f62a9d9e 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-01-12 12:55 UTC +# Last updated: 2025-01-13 12:54 UTC PinsListTimestamp -1736686541 +1736772881 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/http/transport_security_state_static_pins.json b/net/http/transport_security_state_static_pins.json index 8934e97..a9274aac 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-01-12 12:55 UTC +// Last updated: 2025-01-13 12:54 UTC // { "pinsets": [
diff --git a/remoting/host/it2me/it2me_host.cc b/remoting/host/it2me/it2me_host.cc index e003595..2a596bd 100644 --- a/remoting/host/it2me/it2me_host.cc +++ b/remoting/host/it2me/it2me_host.cc
@@ -442,6 +442,14 @@ return; } + if (is_enterprise_session() && IsRunning()) { + // Don't notify on policy changes for Admin sessions as the policies can + // change as they log into different sessions and this should not cause + // them to be disconnected: See crbug.com/380421478. + HOST_LOG << "Dropping policy update during enterprise connection."; + return; + } + // Retrieve the policy value on whether to allow connections but don't apply // it until after we've finished reading the rest of the policies and started // the connection process.
diff --git a/remoting/host/it2me/it2me_host_unittest.cc b/remoting/host/it2me/it2me_host_unittest.cc index 339557e..f3af7784a 100644 --- a/remoting/host/it2me/it2me_host_unittest.cc +++ b/remoting/host/it2me/it2me_host_unittest.cc
@@ -1014,6 +1014,20 @@ StartHost(/*enterprise_params=*/std::nullopt); ASSERT_EQ(It2MeHostState::kReceivedAccessCode, last_host_state_); } + +TEST_F(It2MeHostTest, EnterpriseSessionsShouldNotDisconnectOnPolicyChange) { + StartHost(ChromeOsEnterpriseParams()); + const It2MeHostState initial_state = last_host_state_; + ASSERT_EQ(initial_state, It2MeHostState::kReceivedAccessCode); + + SetPolicies({{policy::key::kRemoteAccessHostFirewallTraversal, + base::Value(!last_nat_traversal_enabled_value_)}}); + + // Using RunUntilIdle is frowned upon, but there is no other way to check a + // change does *not* happen. + base::RunLoop().RunUntilIdle(); + ASSERT_EQ(last_host_state_, initial_state); +} #endif } // namespace remoting
diff --git a/remoting/resources/remoting_strings_iw.xtb b/remoting/resources/remoting_strings_iw.xtb index 69be6fb..cdf69cb 100644 --- a/remoting/resources/remoting_strings_iw.xtb +++ b/remoting/resources/remoting_strings_iw.xtb
@@ -182,7 +182,7 @@ <translation id="8804164990146287819">מדיניות פרטיות</translation> <translation id="8906511416443321782">נדרשת גישה למיקרופון כדי להקליט אודיו ולשדר אותו ללקוח Chrome Remote Desktop.</translation> <translation id="9042277333359847053">זכויות יוצרים 2024 Google LLC. כל הזכויות שמורות.</translation> -<translation id="9111855907838866522">התחברת למכשיר המרוחק שלך. כדי לפתוח את התפריט יש להקיש במסך עם ארבע אצבעות.</translation> +<translation id="9111855907838866522">התחברת למכשיר המרוחק שלך. כדי לפתוח את התפריט יש ללחוץ במסך עם ארבע אצבעות.</translation> <translation id="9126115402994542723">אין לבקש שוב קוד אימות בעת התחברות למארח הזה ממכשיר זה.</translation> <translation id="916856682307586697">הפעלת ה-XSession שמוגדר כברירת מחדל</translation> <translation id="9187628920394877737">מתן הרשאת 'הקלטת מסך' ל-<ph name="PRODUCT_NAME" /></translation>
diff --git a/styleguide/c++/c++-features.md b/styleguide/c++/c++-features.md index c6b479c..a7969b6 100644 --- a/styleguide/c++/c++-features.md +++ b/styleguide/c++/c++-features.md
@@ -257,6 +257,25 @@ `third_party/re2`. *** +### std::aligned_{storage,union} <sup>[banned]</sup> + +```c++ +std::aligned_storage<sizeof(T), alignof<T>>::type buf; +``` + +**Description:** Creates aligned, uninitialized storage to later hold one or +more objects. + +**Documentation:** +[`std::aligned_storage`](https://en.cppreference.com/w/cpp/types/aligned_storage) + +**Notes:** +*** promo +Deprecated in C++23. Generally, use `alignas(T) char buf[sizeof(T)];`. Aligned +unions can be handled similarly, using the max alignment and size of the union +members, either passed via a pack or computed inline. +*** + ### std::bind <sup>[banned]</sup> ```c++
diff --git a/testing/libfuzzer/tests/stacktrace_test.cc b/testing/libfuzzer/tests/stacktrace_test.cc index c96d31fe..739292c 100644 --- a/testing/libfuzzer/tests/stacktrace_test.cc +++ b/testing/libfuzzer/tests/stacktrace_test.cc
@@ -18,6 +18,9 @@ using testing::ContainsRegex; +// The UaF is not detected under UBSan, which happily runs the fuzzer forever. +#if !BUILDFLAG(IS_UBSAN) && !BUILDFLAG(IS_UBSAN_SECURITY) + base::FilePath FuzzerPath() { base::FilePath out_dir; base::PathService::Get(base::DIR_OUT_TEST_DATA_ROOT, &out_dir); @@ -33,8 +36,6 @@ .AppendASCII(input_file); } -// The UaF is not detected under UBSan, which happily runs the fuzzer forever. -#if !BUILDFLAG(IS_UBSAN) && !BUILDFLAG(IS_UBSAN_SECURITY) TEST(FuzzerStacktraceTest, SymbolizesUAF) { base::CommandLine cmd(FuzzerPath()); cmd.AppendArgPath(FuzzerInputPath("uaf"));
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index fdaa6ee3..36d7d37 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -3389,6 +3389,27 @@ ] } ], + "BookmarksUseBinaryTreeInTitledUrlIndex": [ + { + "platforms": [ + "android", + "chromeos", + "chromeos_lacros", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "BookmarksUseBinaryTreeInTitledUrlIndex" + ] + } + ] + } + ], "BoostRenderProcessForLoading": [ { "platforms": [ @@ -8969,29 +8990,6 @@ ] } ], - "EnableOneTapForMaps": [ - { - "platforms": [ - "ios" - ], - "experiments": [ - { - "name": "Enabled_20240709", - "params": { - "OneTapForMapsConsentModeParam": "iph", - "TCAddressOneTap": "true", - "confidence_score_threshold": "0.9963" - }, - "enable_features": [ - "EnableExpKitTextClassifier", - "EnableExpKitTextClassifierAddress", - "EnableOneTapForMaps" - ], - "min_os_version": "16.4.0" - } - ] - } - ], "EnableOverwritingPlaceholderUsernames": [ { "platforms": [ @@ -16978,6 +16976,25 @@ ] } ], + "PlusAddressAcceptedFirstTimeCreateSurvey": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PlusAddressAcceptedFirstTimeCreateSurvey" + ] + } + ] + } + ], "PlusAddressCreateSuggestion": [ { "platforms": [ @@ -16999,6 +17016,44 @@ ] } ], + "PlusAddressDeclinedFirstTimeCreateSurvey": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PlusAddressDeclinedFirstTimeCreateSurvey" + ] + } + ] + } + ], + "PlusAddressFilledPlusAddressViaManualFallbackSurvey": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PlusAddressFilledPlusAddressViaManualFallbackSurvey" + ] + } + ] + } + ], "PlusAddressFullFormFill": [ { "platforms": [ @@ -17019,6 +17074,82 @@ ] } ], + "PlusAddressUserCreatedMultiplePlusAddressesSurvey": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PlusAddressUserCreatedMultiplePlusAddressesSurvey" + ] + } + ] + } + ], + "PlusAddressUserCreatedPlusAddressViaManualFallbackSurvey": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PlusAddressUserCreatedPlusAddressViaManualFallbackSurvey" + ] + } + ] + } + ], + "PlusAddressUserDidChooseEmailOverPlusAddressSurvey": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PlusAddressUserDidChooseEmailOverPlusAddressSurvey" + ] + } + ] + } + ], + "PlusAddressUserDidChoosePlusAddressOverEmailSurvey": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PlusAddressUserDidChoosePlusAddressOverEmailSurvey" + ] + } + ] + } + ], "PlusAddressesExperiment": [ { "platforms": [ @@ -18194,6 +18325,25 @@ ] } ], + "ProtectedAudienceBAndAServerAPIMultiSeller": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "FledgeBiddingAndAuctionServerAPIMultiSeller" + ] + } + ] + } + ], "ProtectedAudienceBAndATriggeredUpdates": [ { "platforms": [
diff --git a/third_party/angle b/third_party/angle index 0a207b6..4b0f6f0 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 0a207b65f60fbfd3013df54cb3b9e650d94af48e +Subproject commit 4b0f6f0649d2ed2c214cc093d6a86d4ce0009e52
diff --git a/third_party/blink/common/permissions_policy/README.md b/third_party/blink/common/permissions_policy/README.md index 1715331..8bbaff4 100644 --- a/third_party/blink/common/permissions_policy/README.md +++ b/third_party/blink/common/permissions_policy/README.md
@@ -1,5 +1,6 @@ ## Permissions Policy Guide (Previously Feature Policy) -Permissions policy is the new name for feature policy with a new HTTP header which uses [structured header](https://httpwg.org/http-extensions/draft-ietf-httpbis-header-structure.html) syntax. +Permissions policy is the new name for feature policy with a new HTTP header which uses +[structured header](https://www.rfc-editor.org/rfc/rfc9651) syntax. ### How to add a new feature to permissions policy @@ -7,31 +8,31 @@ mechanism that allows developers to selectively enable and disable various [browser features an APIs](https://cs.chromium.org/chromium/src/third_party/blink/public/mojom/feature_policy/feature_policy.mojom) -(e.g, "vibrate", "fullscreen", "usb", etc.). A permissions policy can be defined +(e.g, "fullscreen", "usb", "web-share", etc.). A permissions policy can be defined via a HTTP header and/or an iframe "allow" attribute. Below is an example of a header policy (note that the header should be kept in one line, split into multiple for clarity reasons): - Permissions-Policy: vibrate=(), geolocation=(self https://example.com), camera=* + Permissions-Policy: web-share=(), geolocation=(self https://example.com), camera=* -- `vibrate` is disabled for all browsing contexts; +- `web-share` is disabled for all browsing contexts; - `geolocation` is disabled for all browsing contexts except for its own origin and those whose origin is "https://example.com"; - `camera` is enabled for all browsing contexts. Below is an example of a container policy: - <iframe allowpaymentrequest allow='vibrate; fullscreen'></iframe> + <iframe allowpaymentrequest allow='web-share; fullscreen'></iframe> OR - <iframe allowpaymentrequest allow="vibrate 'src'; fullscreen 'src'"></iframe> + <iframe allowpaymentrequest allow="web-share 'src'; fullscreen 'src'"></iframe> - `payment` is enabled (via `allowpaymentrequest`) on all browsing contexts within the iframe; -- `vibrate` and `fullscreen` are enabled on the origin of the URL of the +- `web-share` and `fullscreen` are enabled on the origin of the URL of the iframe's `src` attribute. Combined with a header policy and a container policy, [inherited @@ -51,7 +52,7 @@ 1. Permissions policy features are defined in `third_party/blink/renderer/core/permissions_policy/permissions_policy_features.json5`. Add the new feature, placing any runtime-enabled feature or origin trial dependencies in its "depends_on" field as -described in the file's comments. This list is used to generate `permissions_policy_helper.cc`. +described in the file's comments. This list is used to generate `permissions_policy_helper.cc`. 2. Append the new feature enum with a brief description as well in `third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom`. @@ -62,7 +63,10 @@ 3. Append the new feature name to the `PermissionsPolicyFeature` enum in `third_party/blink/public/devtools_protocol/browser_protocol.pdl`. -4. Send a Pull Request to the webappsec-permissions-policy github repo +4. Add the new feature name to `third_party/blink/web_tests/webexposed/feature-policy-features-expected.txt` +and `third_party/blink/web_tests/wpt_internal/isolated-permissions-policy/permissions_policy.https.html`. + +5. Send a Pull Request to the webappsec-permissions-policy github repo in order to propose the new permissions policy name. See: https://github.com/w3c/webappsec-permissions-policy/blob/main/features.md @@ -70,7 +74,7 @@ 1. The most common way to check if features are enabled is `ExecutionContext::IsFeatureEnabled`. 2. Examples: -- `vibrate`: `NavigatorVibration::vibrate()` +- `web-share`: `NavigatorShare::canShare()` - `payment`: `AllowedToUsePaymentRequest()` - `usb`: `USB::getDevices()` @@ -90,9 +94,12 @@ ## Document Policy Guide ### How to add a new feature to document policy -Document Policy (see [spec](https://w3c.github.io/webappsec-permissions-policy/document-policy.html)) is a similar mechanism to Feature Policy. It is intended - -to cover those kinds of features which don't involve delegation of permission to trusted origins; features which are more about configuring a document, or removing features (sandboxing) from a document or a frame. Document Policy can only be set through HTTP header, and will not inherit to subframes. +Document Policy (see [spec](https://wicg.github.io/document-policy/)) is a +similar mechanism to Permissions Policy. It is intended to cover those kinds of +features which don't involve delegation of permission to trusted origins; +features which are more about configuring a document, or removing features +(sandboxing) from a document or a frame. Document Policy can only be set through +an HTTP header, and will not inherit to subframes. Example HTTP header: `Document-Policy: force-load-at-top=?0, lossy-images-max-bpp=1.0`
diff --git a/third_party/blink/public/strings/translations/blink_strings_iw.xtb b/third_party/blink/public/strings/translations/blink_strings_iw.xtb index bfc146e..d5574f9 100644 --- a/third_party/blink/public/strings/translations/blink_strings_iw.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_iw.xtb
@@ -55,7 +55,7 @@ <translation id="5514612371225420585">קובץ במכשיר שלך</translation> <translation id="5516235301412634559">0.75</translation> <translation id="5537725057119320332">הפעלת Cast</translation> -<translation id="5630795885300617244">הקשה כפולה בצד ימין או שמאל מדלגת על 10 שניות</translation> +<translation id="5630795885300617244">לחיצה כפולה בצד ימין או שמאל מדלגת על 10 שניות</translation> <translation id="57838592816432529">השתקה</translation> <translation id="588258955323874662">מסך מלא</translation> <translation id="5888666972993069672">מתבצעת העברה אל <ph name="DEVICE_FRIENDLY_NAME" /></translation>
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc index 829f4a8..9ea7dd4 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
@@ -674,22 +674,21 @@ : true)) { auto delay = base::Milliseconds(features::kCacheCodeOnIdleDelayParam.Get()); - // Workers don't have a concept of idle tasks, so use a default task for - // these. - TaskType task_type = - frame ? TaskType::kIdleTask : TaskType::kInternalDefault; - execution_context->GetTaskRunner(task_type)->PostDelayedTask( - FROM_HERE, - WTF::BindOnce(&DelayedProduceCodeCacheTask, - // TODO(leszeks): Consider passing the - // script state as a weak persistent. - WrapPersistent(script_state), - v8::Global<v8::Script>(isolate, script), - WrapPersistent(cache_handler), - classic_script->SourceText().length(), - classic_script->SourceUrl(), - classic_script->StartPosition()), - delay); + // TODO(crbug.com/40202028): Consider scheduling idle tasks via + // ThreadScheduler::PostDelayedIdleTask(). + execution_context->GetTaskRunner(TaskType::kInternalDefault) + ->PostDelayedTask( + FROM_HERE, + WTF::BindOnce(&DelayedProduceCodeCacheTask, + // TODO(leszeks): Consider passing the + // script state as a weak persistent. + WrapPersistent(script_state), + v8::Global<v8::Script>(isolate, script), + WrapPersistent(cache_handler), + classic_script->SourceText().length(), + classic_script->SourceUrl(), + classic_script->StartPosition()), + delay); } else { V8CodeCache::ProduceCache( isolate,
diff --git a/third_party/blink/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni index 753f5dd..7816dc3 100644 --- a/third_party/blink/renderer/bindings/generated_in_core.gni +++ b/third_party/blink/renderer/bindings/generated_in_core.gni
@@ -541,14 +541,10 @@ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_fullscreen_navigation_ui.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_highlight_type.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_highlight_type.h", - "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_color_space.cc", - "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_color_space.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_data_storage_format.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_data_storage_format.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_orientation.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_orientation.h", - "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_pixel_format.cc", - "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_pixel_format.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_ip_address_space.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_ip_address_space.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_mojo_interface_interceptor_scope.cc",
diff --git a/third_party/blink/renderer/core/css/basic_shape_functions.cc b/third_party/blink/renderer/core/css/basic_shape_functions.cc index cf4ee3d..ee5b76b 100644 --- a/third_party/blink/renderer/core/css/basic_shape_functions.cc +++ b/third_party/blink/renderer/core/css/basic_shape_functions.cc
@@ -92,95 +92,139 @@ CSSValuePair::IdenticalValuesPolicy::kKeepIdenticalValues); } -constexpr CSSValueID ShapeSegmentOriginToCSSValueID( - StyleShape::Segment::PointOrigin origin) { - return origin == StyleShape::Segment::PointOrigin::kPreviousSegment - ? CSSValueID::kBy - : CSSValueID::kTo; -} - -constexpr StyleShape::Segment::PointOrigin CSSValueIDToShapeSegmentOrigin( - CSSValueID id) { - return id == CSSValueID::kBy - ? StyleShape::Segment::PointOrigin::kPreviousSegment - : StyleShape::Segment::PointOrigin::kReferenceBox; -} - StyleShape::Segment ShapeCommandToShapeSegment( const cssvalue::CSSShapeCommand& command, const StyleResolverState& state) { // TODO(crbug.com/384870259): support other segment types. + bool is_relative = command.GetEndPointOrigin() == CSSValueID::kBy; + using Segment = StyleShape::Segment; + switch (command.GetType()) { - case CSSValueID::kMove: - return StyleShape::Segment{ - .type = StyleShape::Segment::kMove, - .end_point_origin = - CSSValueIDToShapeSegmentOrigin(command.GetEndPointOrigin()), - .end_point = StyleBuilderConverter::ConvertPosition( - state, command.GetEndPoint())}; - case CSSValueID::kLine: - return StyleShape::Segment{ - .type = StyleShape::Segment::kLine, - .end_point_origin = - CSSValueIDToShapeSegmentOrigin(command.GetEndPointOrigin()), - .end_point = StyleBuilderConverter::ConvertPosition( - state, command.GetEndPoint())}; - case CSSValueID::kHline: - return StyleShape::Segment{ - .type = StyleShape::Segment::kHorizontalLine, - .end_point_origin = - CSSValueIDToShapeSegmentOrigin(command.GetEndPointOrigin()), - .end_point = LengthPoint( - StyleBuilderConverter::ConvertPositionLength<CSSValueID::kLeft, - CSSValueID::kRight>( - state, command.GetEndPoint()), - Length::Fixed(0))}; - case CSSValueID::kVline: - return StyleShape::Segment{ - .type = StyleShape::Segment::kVerticalLine, - .end_point_origin = - CSSValueIDToShapeSegmentOrigin(command.GetEndPointOrigin()), - .end_point = LengthPoint( - Length::Fixed(0), - StyleBuilderConverter::ConvertPositionLength<CSSValueID::kTop, - CSSValueID::kBottom>( - state, command.GetEndPoint()))}; + case CSSValueID::kMove: { + LengthPoint target_point = + StyleBuilderConverter::ConvertPosition(state, command.GetEndPoint()); + return is_relative ? Segment(StyleShape::MoveBySegment{target_point}) + : Segment(StyleShape::MoveToSegment{target_point}); + } + case CSSValueID::kLine: { + LengthPoint target_point = + StyleBuilderConverter::ConvertPosition(state, command.GetEndPoint()); + return is_relative ? Segment(StyleShape::LineBySegment{target_point}) + : Segment(StyleShape::LineToSegment{target_point}); + } + case CSSValueID::kHline: { + Length x = + StyleBuilderConverter::ConvertPositionLength<CSSValueID::kLeft, + CSSValueID::kRight>( + state, command.GetEndPoint()); + return is_relative ? Segment(StyleShape::HLineBySegment{x}) + : Segment(StyleShape::HLineToSegment{x}); + } + case CSSValueID::kVline: { + Length y = + StyleBuilderConverter::ConvertPositionLength<CSSValueID::kTop, + CSSValueID::kBottom>( + state, command.GetEndPoint()); + return is_relative ? Segment(StyleShape::VLineBySegment{y}) + : Segment(StyleShape::VLineToSegment{y}); + } + case CSSValueID::kArc: { + const cssvalue::CSSShapeArcCommand& arc = + static_cast<const cssvalue::CSSShapeArcCommand&>(command); + + LengthPoint target_point = + StyleBuilderConverter::ConvertPosition(state, command.GetEndPoint()); + + float angle = + arc.Angle().ComputeDegrees(state.CssToLengthConversionData()); + LengthSize radius = + StyleBuilderConverter::ConvertRadius(state, arc.Radius()); + bool large = arc.Size() == CSSValueID::kLarge; + bool sweep = arc.Sweep() == CSSValueID::kCw; + return is_relative ? Segment(StyleShape::ArcBySegment{ + {{target_point}, angle, radius, large, sweep}}) + : Segment(StyleShape::ArcToSegment{ + {{target_point}, angle, radius, large, sweep}}); + } case CSSValueID::kClose: - return StyleShape::Segment{.type = StyleShape::Segment::kClose}; + return StyleShape::CloseSegment{}; default: NOTREACHED(); } } -const cssvalue::CSSShapeCommand* ShapeSegmentToShapeCommand( - const StyleShape::Segment& segment, - float zoom) { - // TODO(crbug.com/384870259): support other segment types. - switch (segment.type) { - case blink::StyleShape::Segment::Type::kMove: - return MakeGarbageCollected<const cssvalue::CSSShapeCommand>( - CSSValueID::kMove, - ShapeSegmentOriginToCSSValueID(segment.end_point_origin), - LengthPointToCSSValue(segment.end_point, zoom)); - case blink::StyleShape::Segment::Type::kLine: - return MakeGarbageCollected<const cssvalue::CSSShapeCommand>( - CSSValueID::kLine, - ShapeSegmentOriginToCSSValueID(segment.end_point_origin), - LengthPointToCSSValue(segment.end_point, zoom)); - case blink::StyleShape::Segment::Type::kHorizontalLine: - return MakeGarbageCollected<const cssvalue::CSSShapeCommand>( - CSSValueID::kHline, - ShapeSegmentOriginToCSSValueID(segment.end_point_origin), - *CSSPrimitiveValue::CreateFromLength(segment.end_point.X(), zoom)); - case blink::StyleShape::Segment::Type::kVerticalLine: - return MakeGarbageCollected<const cssvalue::CSSShapeCommand>( - CSSValueID::kVline, - ShapeSegmentOriginToCSSValueID(segment.end_point_origin), - *CSSPrimitiveValue::CreateFromLength(segment.end_point.Y(), zoom)); - case blink::StyleShape::Segment::Type::kClose: - return cssvalue::CSSShapeCommand::Close(); +struct ShapeSegmentToShapeCommandVisitor { + // TODO(crbug.com/384870259): support curve/smooth. + + using CSSShapeCommand = cssvalue::CSSShapeCommand; + + const CSSShapeCommand* operator()(const StyleShape::MoveToSegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kMove, CSSValueID::kTo, + LengthPointToCSSValue(segment.target_point, zoom)); } -} + const CSSShapeCommand* operator()(const StyleShape::MoveBySegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kMove, CSSValueID::kBy, + LengthPointToCSSValue(segment.target_point, zoom)); + } + const CSSShapeCommand* operator()(const StyleShape::LineToSegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kLine, CSSValueID::kTo, + LengthPointToCSSValue(segment.target_point, zoom)); + } + const CSSShapeCommand* operator()(const StyleShape::LineBySegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kLine, CSSValueID::kBy, + LengthPointToCSSValue(segment.target_point, zoom)); + } + const CSSShapeCommand* operator()(const StyleShape::HLineToSegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kHline, CSSValueID::kTo, + *CSSPrimitiveValue::CreateFromLength(segment.x, zoom)); + } + const CSSShapeCommand* operator()(const StyleShape::HLineBySegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kHline, CSSValueID::kBy, + *CSSPrimitiveValue::CreateFromLength(segment.x, zoom)); + } + const CSSShapeCommand* operator()(const StyleShape::VLineToSegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kVline, CSSValueID::kTo, + *CSSPrimitiveValue::CreateFromLength(segment.y, zoom)); + } + const CSSShapeCommand* operator()(const StyleShape::VLineBySegment& segment) { + return MakeGarbageCollected<const CSSShapeCommand>( + CSSValueID::kVline, CSSValueID::kBy, + *CSSPrimitiveValue::CreateFromLength(segment.y, zoom)); + } + const CSSShapeCommand* Arc(CSSValueID origin, + const StyleShape::ArcSegment& segment) { + return MakeGarbageCollected<const cssvalue::CSSShapeArcCommand>( + origin, LengthPointToCSSValue(segment.target_point, zoom), + *CSSNumericLiteralValue::Create(segment.angle, + CSSPrimitiveValue::UnitType::kDegrees), + *MakeGarbageCollected<CSSValuePair>( + CSSPrimitiveValue::CreateFromLength(segment.radius.Width(), zoom), + CSSPrimitiveValue::CreateFromLength(segment.radius.Height(), zoom), + CSSValuePair::IdenticalValuesPolicy::kDropIdenticalValues), + segment.large ? CSSValueID::kLarge : CSSValueID::kSmall, + segment.sweep ? CSSValueID::kCw : CSSValueID::kCcw); + } + + const CSSShapeCommand* operator()(const StyleShape::ArcToSegment& segment) { + return Arc(CSSValueID::kTo, segment); + } + const CSSShapeCommand* operator()(const StyleShape::ArcBySegment& segment) { + return Arc(CSSValueID::kBy, segment); + } + + const CSSShapeCommand* operator()(const StyleShape::CloseSegment&) { + return CSSShapeCommand::Close(); + } + + float zoom; +}; static CSSValue* ValueForCenterCoordinate( const ComputedStyle& style, @@ -280,9 +324,9 @@ const StyleShape* shape = To<StyleShape>(basic_shape); HeapVector<Member<const cssvalue::CSSShapeCommand>> commands; commands.reserve(shape->Segments().size()); + ShapeSegmentToShapeCommandVisitor visitor{style.EffectiveZoom()}; for (const auto& segment : shape->Segments()) { - commands.push_back( - ShapeSegmentToShapeCommand(segment, style.EffectiveZoom())); + commands.push_back(std::visit(visitor, segment)); } return MakeGarbageCollected<cssvalue::CSSShapeValue>( shape->GetWindRule(),
diff --git a/third_party/blink/renderer/core/css/css_shape_value.cc b/third_party/blink/renderer/core/css/css_shape_value.cc index 935a286..72c9bb1 100644 --- a/third_party/blink/renderer/core/css/css_shape_value.cc +++ b/third_party/blink/renderer/core/css/css_shape_value.cc
@@ -6,7 +6,9 @@ #include <memory> +#include "third_party/blink/renderer/core/css/css_numeric_literal_value.h" #include "third_party/blink/renderer/core/css/css_value.h" +#include "third_party/blink/renderer/core/css/cssom/css_numeric_value.h" #include "third_party/blink/renderer/core/css_value_keywords.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" @@ -27,6 +29,23 @@ builder.Append(' '); builder.Append(end_point_->CssText()); + if (type_ == CSSValueID::kArc) { + const CSSShapeArcCommand& arc = + static_cast<const CSSShapeArcCommand&>(*this); + builder.Append(" of "); + builder.Append(arc.Radius().CssText()); + if (arc.Size() == CSSValueID::kCw) { + builder.Append(" cw"); + } + if (arc.Sweep() == CSSValueID::kLarge) { + builder.Append(" large"); + } + auto* numeric_angle = DynamicTo<CSSNumericLiteralValue>(arc.Angle()); + if (!numeric_angle || numeric_angle->ComputeDegrees() != 0) { + builder.Append(" rotate "); + builder.Append(arc.Angle().CssText()); + } + } return builder.ReleaseString(); }
diff --git a/third_party/blink/renderer/core/css/css_shape_value.h b/third_party/blink/renderer/core/css/css_shape_value.h index 9d01063..9a90397b 100644 --- a/third_party/blink/renderer/core/css/css_shape_value.h +++ b/third_party/blink/renderer/core/css/css_shape_value.h
@@ -6,7 +6,9 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_SHAPE_VALUE_H_ #include <initializer_list> +#include "third_party/blink/renderer/core/css/css_primitive_value.h" #include "third_party/blink/renderer/core/css/css_value.h" +#include "third_party/blink/renderer/core/css/css_value_list.h" #include "third_party/blink/renderer/core/css/css_value_pair.h" #include "third_party/blink/renderer/core/css_value_keywords.h" #include "third_party/blink/renderer/platform/graphics/graphics_types.h" @@ -29,13 +31,13 @@ String CSSText() const; bool operator==(const CSSShapeCommand& other) const; - void Trace(Visitor* visitor) const { visitor->Trace(end_point_); } + virtual void Trace(Visitor* visitor) const { visitor->Trace(end_point_); } CSSShapeCommand(CSSValueID type, CSSValueID origin, const CSSValue& end_point) : type_(type), end_point_origin_(origin), end_point_(end_point) { CHECK(type == CSSValueID::kMove || type == CSSValueID::kLine || type == CSSValueID::kHline || type == CSSValueID::kVline || - type == CSSValueID::kClose); + type == CSSValueID::kArc); CHECK(origin == CSSValueID::kTo || origin == CSSValueID::kBy); } @@ -59,6 +61,44 @@ Member<const CSSValue> end_point_; }; +class CSSShapeArcCommand : public CSSShapeCommand { + public: + CSSShapeArcCommand(CSSValueID origin, + const CSSValue& end_point, + const CSSPrimitiveValue& angle, + const CSSValuePair& radius, + CSSValueID size, + CSSValueID sweep) + : CSSShapeCommand(CSSValueID::kArc, origin, end_point), + angle_(angle), + radius_(radius), + size_(size), + sweep_(sweep) { + CHECK(sweep == CSSValueID::kCw || sweep == CSSValueID::kCcw); + CHECK(size == CSSValueID::kLarge || size == CSSValueID::kSmall); + } + const CSSPrimitiveValue& Angle() const { return *angle_; } + const CSSValuePair& Radius() const { return *radius_; } + CSSValueID Size() const { return size_; } + CSSValueID Sweep() const { return sweep_; } + bool operator==(const CSSShapeArcCommand& other) const { + return CSSShapeCommand::operator==(other) && sweep_ == other.sweep_ && + size_ == other.size_ && radius_ == other.radius_ && + angle_ == other.angle_; + } + void Trace(Visitor* visitor) const override { + visitor->Trace(angle_); + visitor->Trace(radius_); + CSSShapeCommand::Trace(visitor); + } + + private: + Member<const CSSPrimitiveValue> angle_; + Member<const CSSValuePair> radius_; + CSSValueID size_; + CSSValueID sweep_; +}; + class CSSShapeValue : public CSSValue { public: CSSShapeValue(WindRule wind_rule,
diff --git a/third_party/blink/renderer/core/css/css_value_keywords.json5 b/third_party/blink/renderer/core/css/css_value_keywords.json5 index a5dc42d..94f6e29 100644 --- a/third_party/blink/renderer/core/css/css_value_keywords.json5 +++ b/third_party/blink/renderer/core/css/css_value_keywords.json5
@@ -1394,6 +1394,13 @@ "close", "hline", "vline", + "arc", + // "rotate", + "cw", + "ccw", + // "large", + // "small", + // "of", // @font-face src "format",
diff --git a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc index 360ab28..d75f90bb 100644 --- a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc +++ b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
@@ -6773,7 +6773,7 @@ // <shape-command># HeapVector<Member<const CSSShapeCommand>> commands; while (!args.AtEnd()) { - CSSValueID end_point_origin; + CSSValueID end_point_origin = CSSValueID::kInvalid; CSSValueID command_type = args.ConsumeIncludingWhitespace().Id(); switch (command_type) { // https://drafts.csswg.org/css-shapes-2/#typedef-shape-move-command @@ -6828,6 +6828,111 @@ } break; } + + // https://drafts.csswg.org/css-shapes-2/#typedef-shape-arc-command + // arc [[<by-to> <coordinate-pair>] || [of <length-percentage>{1,2}] || + // <arc-sweep>? || <arc-size>?|| rotate <angle>? ] + case CSSValueID::kArc: { + CSSValueID sweep = CSSValueID::kInvalid; + CSSValueID size = CSSValueID::kInvalid; + + const CSSValuePair* end_point = nullptr; + const CSSValuePair* radius = nullptr; + const CSSPrimitiveValue* angle = nullptr; + while (!args.AtEnd() && args.Peek().GetType() != kCommaToken) { + CSSValueID next_id = args.Peek().Id(); + switch (next_id) { + case CSSValueID::kTo: + case CSSValueID::kBy: { + if (end_point) { + return nullptr; + } + end_point = + ConsumeShapeCommandEndPoint(args, context, end_point_origin); + if (!end_point) { + return nullptr; + } + break; + } + case CSSValueID::kOf: { + if (radius) { + return nullptr; + } + args.ConsumeIncludingWhitespace(); + const CSSValue* radius_x = ConsumeLengthOrPercent( + args, context, CSSPrimitiveValue::ValueRange::kAll); + if (!radius_x) { + return nullptr; + } + + const CSSValue* radius_y = ConsumeLengthOrPercent( + args, context, CSSPrimitiveValue::ValueRange::kAll); + + if (!radius_y) { + radius_y = radius_x; + } + + radius = MakeGarbageCollected<CSSValuePair>( + radius_x, radius_y, CSSValuePair::kDropIdenticalValues); + break; + } + // https://drafts.csswg.org/css-shapes-2/#typedef-shape-arc-sweep + case CSSValueID::kCw: + case CSSValueID::kCcw: { + if (sweep != CSSValueID::kInvalid) { + return nullptr; + } + args.ConsumeIncludingWhitespace(); + sweep = next_id; + break; + } + + // https://drafts.csswg.org/css-shapes-2/#typedef-shape-arc-size + case CSSValueID::kLarge: + case CSSValueID::kSmall: { + if (size != CSSValueID::kInvalid) { + return nullptr; + } + args.ConsumeIncludingWhitespace(); + size = next_id; + break; + } + case CSSValueID::kRotate: { + if (angle) { + return nullptr; + } + args.ConsumeIncludingWhitespace(); + angle = ConsumeAngle(args, context, std::nullopt); + if (!angle) { + return nullptr; + } + break; + } + default: + return nullptr; + } + } + + if (!end_point || !radius) { + return nullptr; + } + + if (!angle) { + angle = CSSNumericLiteralValue::Create( + 0, CSSPrimitiveValue::UnitType::kDegrees); + } + if (size == CSSValueID::kInvalid) { + size = CSSValueID::kSmall; + } + if (sweep == CSSValueID::kInvalid) { + sweep = CSSValueID::kCw; + } + + commands.push_back(MakeGarbageCollected<cssvalue::CSSShapeArcCommand>( + end_point_origin, *end_point, *angle, *radius, size, sweep)); + break; + } + // https://drafts.csswg.org/css-shapes-2/#typedef-shape-close case CSSValueID::kClose: commands.push_back(CSSShapeCommand::Close());
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc index 633ac9f..c96fc99 100644 --- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc +++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
@@ -2237,7 +2237,7 @@ return nullptr; } -LengthSize StyleBuilderConverter::ConvertRadius(StyleResolverState& state, +LengthSize StyleBuilderConverter::ConvertRadius(const StyleResolverState& state, const CSSValue& value) { const auto& pair = To<CSSValuePair>(value); Length radius_width = To<CSSPrimitiveValue>(pair.First())
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.h b/third_party/blink/renderer/core/css/resolver/style_builder_converter.h index cd705e1..97dc547 100644 --- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.h +++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.h
@@ -266,7 +266,7 @@ static Length ConvertQuirkyLength(StyleResolverState&, const CSSValue&); static scoped_refptr<QuotesData> ConvertQuotes(StyleResolverState&, const CSSValue&); - static LengthSize ConvertRadius(StyleResolverState&, const CSSValue&); + static LengthSize ConvertRadius(const StyleResolverState&, const CSSValue&); static EPaintOrder ConvertPaintOrder(StyleResolverState&, const CSSValue&); static GapDataList<StyleColor> ConvertGapDecorationColorDataList( StyleResolverState&,
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc index 6fa6048..e504663 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -1330,22 +1330,6 @@ (!style_request.IsPseudoStyleRequest() && IsAtShadowBoundary(&element)) ? ComputedStyleBuilder::kAtShadowBoundary : ComputedStyleBuilder::kNotAtShadowBoundary); - - // contenteditable attribute (implemented by -webkit-user-modify) should - // be propagated from shadow host to distributed node. - if (!element.IsPseudoElement() && !style_request.IsPseudoStyleRequest() && - element.AssignedSlot()) { - if (Element* parent = element.parentElement()) { - if (!RuntimeEnabledFeatures:: - InheritUserModifyWithoutContenteditableEnabled() || - !element.FastHasAttribute(html_names::kContenteditableAttr)) { - if (const ComputedStyle* shadow_host_style = - parent->GetComputedStyle()) { - state.StyleBuilder().SetUserModify(shadow_host_style->UserModify()); - } - } - } - } } if (element.IsPseudoElement()) { state.StyleBuilder().SetStyleType(element.GetPseudoIdForStyling()); @@ -2568,6 +2552,26 @@ : *initial_style_; InitStyle(element, style_request, initial_style, state.ParentStyle(), state); + + // contenteditable attribute (implemented by -webkit-user-modify) should + // be propagated from shadow host to distributed node. + // + // This can be overridden by matched properties, so we don't want to do it + // when we have a cache hit; both this fixup and any overriding of it have + // already been applied in the cached data. + if (!element.IsPseudoElement() && !style_request.IsPseudoStyleRequest() && + element.AssignedSlot()) { + if (Element* parent = element.parentElement()) { + if (!RuntimeEnabledFeatures:: + InheritUserModifyWithoutContenteditableEnabled() || + !element.FastHasAttribute(html_names::kContenteditableAttr)) { + if (const ComputedStyle* shadow_host_style = + parent->GetComputedStyle()) { + state.StyleBuilder().SetUserModify(shadow_host_style->UserModify()); + } + } + } + } } // This is needed because pseudo_argument is copied to the
diff --git a/third_party/blink/renderer/core/fetch/multipart_parser.cc b/third_party/blink/renderer/core/fetch/multipart_parser.cc index 2ec7dc7..d1dc9bc 100644 --- a/third_party/blink/renderer/core/fetch/multipart_parser.cc +++ b/third_party/blink/renderer/core/fetch/multipart_parser.cc
@@ -251,12 +251,12 @@ DCHECK_EQ(0u, matcher_.NumMatchedBytes()); // Search for a complete delimiter within the bytes. - auto delimiter_begin = base::ranges::search(bytes, delimiter_); - if (delimiter_begin != bytes.end()) { + auto found_delimiter = std::ranges::search(bytes, delimiter_); + if (found_delimiter.begin() != bytes.end()) { // A complete delimiter was found. The bytes before that are octet // bytes. - auto delimiter_and_rest = - bytes.subspan(static_cast<size_t>(delimiter_begin - bytes.begin())); + auto delimiter_and_rest = bytes.subspan( + static_cast<size_t>(found_delimiter.begin() - bytes.begin())); auto [delimiter, rest] = delimiter_and_rest.split_at(delimiter_.size()); const bool matched = matcher_.Match(delimiter); DCHECK(matched);
diff --git a/third_party/blink/renderer/core/html/canvas/image_encode_options.idl b/third_party/blink/renderer/core/html/canvas/image_encode_options.idl index dd7202de..c661d9c 100644 --- a/third_party/blink/renderer/core/html/canvas/image_encode_options.idl +++ b/third_party/blink/renderer/core/html/canvas/image_encode_options.idl
@@ -2,20 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -enum ImageColorSpace { - "srgb", // default - "rec2020", - "display-p3", -}; - -enum ImagePixelFormat { - "uint8", // default - "uint16", -}; - dictionary ImageEncodeOptions { DOMString type = "image/png"; unrestricted double quality = 1.0; - ImageColorSpace colorSpace = "srgb"; - ImagePixelFormat pixelFormat = "uint8"; };
diff --git a/third_party/blink/renderer/core/layout/inline/inline_node.cc b/third_party/blink/renderer/core/layout/inline/inline_node.cc index 79908c3..09fc42a 100644 --- a/third_party/blink/renderer/core/layout/inline/inline_node.cc +++ b/third_party/blink/renderer/core/layout/inline/inline_node.cc
@@ -68,8 +68,8 @@ template <typename Span1, typename Span2> unsigned MismatchInternal(const Span1& span1, const Span2& span2) { - const auto old_new = base::ranges::mismatch(span1, span2); - return static_cast<unsigned>(old_new.first - span1.begin()); + const auto old_new = std::ranges::mismatch(span1, span2); + return static_cast<unsigned>(old_new.in1 - span1.begin()); } unsigned Mismatch(const String& old_text, const String& new_text) { @@ -89,9 +89,9 @@ template <typename Span1, typename Span2> unsigned MismatchFromEnd(const Span1& span1, const Span2& span2) { - const auto old_new = - base::ranges::mismatch(base::Reversed(span1), base::Reversed(span2)); - return static_cast<unsigned>(old_new.first - span1.rbegin()); + auto rspan1 = base::Reversed(span1); + const auto old_new = std::ranges::mismatch(rspan1, base::Reversed(span2)); + return static_cast<unsigned>(old_new.in1 - rspan1.begin()); } unsigned MismatchFromEnd(StringView old_text, StringView new_text) {
diff --git a/third_party/blink/renderer/core/layout/inline/offset_mapping.cc b/third_party/blink/renderer/core/layout/inline/offset_mapping.cc index 0db5a53..df2fdde 100644 --- a/third_party/blink/renderer/core/layout/inline/offset_mapping.cc +++ b/third_party/blink/renderer/core/layout/inline/offset_mapping.cc
@@ -298,10 +298,8 @@ return nullptr; // Find the last unit where unit.dom_start <= offset auto range = base::span(units_).subspan(range_start, range_end - range_start); - auto i = base::ranges::upper_bound( - range, offset, [](unsigned offset, const OffsetMappingUnit& unit) { - return offset < unit.DOMStart(); - }); + auto i = std::ranges::upper_bound(range, offset, std::ranges::less(), + &OffsetMappingUnit::DOMStart); const OffsetMappingUnit* unit = &range[std::distance(range.begin(), i) - 1]; if (unit->DOMEnd() < offset) return nullptr; @@ -331,22 +329,17 @@ auto span1 = base::span(units_).subspan(range_start, range_end - range_start); size_t result_begin = range_start + - std::distance(span1.begin(), - base::ranges::lower_bound( - span1, start_offset, - [](const OffsetMappingUnit& unit, unsigned offset) { - return unit.DOMEnd() < offset; - })); + std::distance(span1.begin(), std::ranges::lower_bound( + span1, start_offset, std::ranges::less(), + &OffsetMappingUnit::DOMEnd)); // Find the next of the last unit where unit.dom_start <= end_offset auto span2 = base::span(units_).subspan(result_begin, range_end - result_begin); size_t result_size = std::distance( - span2.begin(), base::ranges::upper_bound( - span2, end_offset, - [](unsigned offset, const OffsetMappingUnit& unit) { - return offset < unit.DOMStart(); - })); + span2.begin(), + std::ranges::upper_bound(span2, end_offset, std::ranges::less(), + &OffsetMappingUnit::DOMStart)); UnitVector result; result.reserve(base::checked_cast<wtf_size_t>(result_size));
diff --git a/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc b/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc index b8638c2..71aa435 100644 --- a/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc +++ b/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc
@@ -167,11 +167,13 @@ // doesn't require the dashes to exist. See nsMultiMixedConv::FindToken. wtf_size_t MultipartImageResourceParser::FindBoundary(const Vector<char>& data, Vector<char>* boundary) { - auto it = base::ranges::search(data, *boundary); - if (it == data.end()) + auto found_boundary = std::ranges::search(data, *boundary); + if (found_boundary.empty()) { return kNotFound; + } - wtf_size_t boundary_position = static_cast<wtf_size_t>(it - data.begin()); + wtf_size_t boundary_position = + static_cast<wtf_size_t>(found_boundary.begin() - data.begin()); // Back up over -- for backwards compat // TODO(tc): Don't we only want to do this once? Gecko code doesn't seem to // care.
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc index 3c71d7c7..7a84a7e 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
@@ -33,6 +33,7 @@ #include "third_party/blink/renderer/core/workers/worklet_global_scope.h" #include "third_party/blink/renderer/platform/bindings/origin_trial_features.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" +#include "third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.h" #include "third_party/blink/renderer/platform/runtime_feature_state/runtime_feature_state_override_context.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
diff --git a/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc b/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc index a8db0c2..20b66fa7 100644 --- a/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc +++ b/third_party/blink/renderer/core/speculation_rules/document_speculation_rules.cc
@@ -326,10 +326,10 @@ } void DocumentSpeculationRules::RemoveRuleSet(SpeculationRuleSet* rule_set) { - auto it = base::ranges::remove(rule_sets_, rule_set); - CHECK(it != rule_sets_.end(), base::NotFatalUntil::M130) + auto removed = std::ranges::remove(rule_sets_, rule_set); + CHECK(!removed.empty(), base::NotFatalUntil::M130) << "rule set was removed without existing"; - rule_sets_.erase(it, rule_sets_.end()); + rule_sets_.erase(removed.begin(), removed.end()); if (rule_set->has_document_rule()) { InvalidateAllLinks(); if (!rule_set->selectors().empty()) { @@ -707,12 +707,13 @@ // Note that the document's URL is not necessarily the same as the base URL // (e,g., when a <base> element is present in the document). const KURL& document_url = document.Url(); - auto last = base::ranges::remove_if(candidates, [&](const auto& candidate) { + auto last = std::ranges::remove_if(candidates, [&](const auto& candidate) { const KURL& url = candidate->url(); return url.HasFragmentIdentifier() && EqualIgnoringFragmentIdentifier(url, document_url); }); - candidates.Shrink(base::checked_cast<wtf_size_t>(last - candidates.begin())); + candidates.Shrink( + base::checked_cast<wtf_size_t>(last.begin() - candidates.begin())); probe::SpeculationCandidatesUpdated(document, candidates);
diff --git a/third_party/blink/renderer/core/style/style_shape.cc b/third_party/blink/renderer/core/style/style_shape.cc index 1db1a48e..b3742e10 100644 --- a/third_party/blink/renderer/core/style/style_shape.cc +++ b/third_party/blink/renderer/core/style/style_shape.cc
@@ -4,6 +4,9 @@ #include "third_party/blink/renderer/core/style/style_shape.h" +#include <variant> + +#include "base/memory/stack_allocated.h" #include "third_party/blink/renderer/core/svg/svg_path_builder.h" #include "third_party/blink/renderer/core/svg/svg_path_data.h" #include "third_party/blink/renderer/core/svg/svg_path_parser.h" @@ -11,6 +14,7 @@ #include "third_party/blink/renderer/platform/geometry/length_functions.h" #include "third_party/blink/renderer/platform/geometry/length_point.h" #include "third_party/blink/renderer/platform/graphics/path.h" +#include "ui/gfx/geometry/size.h" namespace blink { @@ -25,57 +29,107 @@ segments_ == other.segments_; } -void StyleShape::ResolvePath(Path& path, const gfx::SizeF& box_size) const { - SVGPathBuilder builder(path); - builder.EmitSegment({.command = SVGPathSegType::kPathSegMoveToAbs, - .target_point = PointForLengthPoint(origin_, box_size)}); +namespace { +class SegmentVisitor { + STACK_ALLOCATED(); - for (const Segment& segment : segments_) { - // TODO(crbug.com/384870259): support other segment types. - switch (segment.type) { - case Segment::Type::kMove: - builder.EmitSegment( - {.command = - segment.end_point_origin == Segment::PointOrigin::kReferenceBox - ? SVGPathSegType::kPathSegMoveToAbs - : SVGPathSegType::kPathSegMoveToRel, - .target_point = PointForLengthPoint(segment.end_point, box_size)}); - break; - case Segment::Type::kLine: - builder.EmitSegment( - {.command = - segment.end_point_origin == Segment::PointOrigin::kReferenceBox - ? SVGPathSegType::kPathSegLineToAbs - : SVGPathSegType::kPathSegLineToRel, - .target_point = PointForLengthPoint(segment.end_point, box_size)}); - break; - case Segment::Type::kHorizontalLine: - builder.EmitSegment( - {.command = - segment.end_point_origin == Segment::PointOrigin::kReferenceBox - ? SVGPathSegType::kPathSegLineToHorizontalAbs - : SVGPathSegType::kPathSegLineToHorizontalRel, - .target_point = PointForLengthPoint(segment.end_point, box_size)}); - break; - case Segment::Type::kVerticalLine: - builder.EmitSegment( - {.command = - segment.end_point_origin == Segment::PointOrigin::kReferenceBox - ? SVGPathSegType::kPathSegLineToVerticalAbs - : SVGPathSegType::kPathSegLineToVerticalRel, - .target_point = PointForLengthPoint(segment.end_point, box_size)}); - break; - case Segment::Type::kClose: - builder.EmitSegment({.command = SVGPathSegType::kPathSegClosePath}); - break; - } + public: + SegmentVisitor(SVGPathBuilder& path_builder, const gfx::SizeF& size) + : builder(path_builder), box_size(size) {} + + void operator()(const StyleShape::MoveToSegment& segment) { + Emit(segment, SVGPathSegType::kPathSegMoveToAbs); } -} + + void operator()(const StyleShape::MoveBySegment& segment) { + Emit(segment, SVGPathSegType::kPathSegMoveToRel); + } + + void operator()(const StyleShape::LineToSegment& segment) { + Emit(segment, SVGPathSegType::kPathSegLineToAbs); + } + + void operator()(const StyleShape::LineBySegment& segment) { + Emit(segment, SVGPathSegType::kPathSegLineToRel); + } + + void operator()(const StyleShape::HLineToSegment& segment) { + Emit(segment, SVGPathSegType::kPathSegLineToHorizontalAbs); + } + + void operator()(const StyleShape::HLineBySegment& segment) { + Emit(segment, SVGPathSegType::kPathSegLineToHorizontalRel); + } + + void operator()(const StyleShape::VLineToSegment& segment) { + Emit(segment, SVGPathSegType::kPathSegLineToVerticalAbs); + } + + void operator()(const StyleShape::VLineBySegment& segment) { + Emit(segment, SVGPathSegType::kPathSegLineToVerticalRel); + } + + void operator()(const StyleShape::ArcToSegment& segment) { + Emit(segment, SVGPathSegType::kPathSegArcAbs); + } + void operator()(const StyleShape::ArcBySegment& segment) { + Emit(segment, SVGPathSegType::kPathSegArcRel); + } + void operator()(const StyleShape::CloseSegment&) { + builder.EmitSegment({.command = SVGPathSegType::kPathSegClosePath}); + } + + private: + void Emit(const StyleShape::SegmentWithTargetPoint& segment, + SVGPathSegType command) { + builder.EmitSegment( + {.command = command, + .target_point = PointForLengthPoint(segment.target_point, box_size)}); + } + + void Emit(const StyleShape::HLineSegment& segment, SVGPathSegType command) { + builder.EmitSegment( + {.command = command, + .target_point = {FloatValueForLength(segment.x, box_size.width()), + 0}}); + } + void Emit(const StyleShape::VLineSegment& segment, SVGPathSegType command) { + builder.EmitSegment( + {.command = command, + .target_point = {0, + FloatValueForLength(segment.y, box_size.height())}}); + } + + void Emit(const StyleShape::ArcSegment& segment, SVGPathSegType command) { + PathSegmentData arc_data{ + .command = command, + .target_point = PointForLengthPoint(segment.target_point, box_size), + .arc_sweep = segment.sweep, + .arc_large = segment.large}; + gfx::SizeF radius = SizeForLengthSize(segment.radius, box_size); + arc_data.SetArcRadiusX(radius.width()); + arc_data.SetArcRadiusY(radius.height()); + arc_data.SetArcAngle(segment.angle); + builder.EmitSegment(arc_data); + } + + SVGPathBuilder& builder; + const gfx::SizeF& box_size; +}; +} // namespace void StyleShape::GetPath(Path& path, const gfx::RectF& box_rect, float zoom) const { - ResolvePath(path, box_rect.size()); + SVGPathBuilder builder(path); + builder.EmitSegment( + {.command = SVGPathSegType::kPathSegMoveToAbs, + .target_point = PointForLengthPoint(origin_, box_rect.size())}); + + SegmentVisitor visitor(builder, box_rect.size()); + for (const Segment& segment : segments_) { + std::visit(visitor, segment); + } // TODO(crbug.com/384870258): retain an LRU size->path cache. path.Translate(box_rect.OffsetFromOrigin()); }
diff --git a/third_party/blink/renderer/core/style/style_shape.h b/third_party/blink/renderer/core/style/style_shape.h index d70f154..9ec8468 100644 --- a/third_party/blink/renderer/core/style/style_shape.h +++ b/third_party/blink/renderer/core/style/style_shape.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_STYLE_SHAPE_H_ #include <optional> +#include <variant> #include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/core/style/basic_shapes.h" @@ -21,16 +22,50 @@ // values. class StyleShape final : public BasicShape { public: - struct Segment { - enum Type { kMove, kLine, kHorizontalLine, kVerticalLine, kClose }; - enum PointOrigin { kReferenceBox, kPreviousSegment }; - - bool operator==(const Segment& other) const = default; - - Type type; - PointOrigin end_point_origin; - LengthPoint end_point; + enum class TargetPointOrigin { kReferenceBox, kPreviousSegment }; + using CloseSegment = std::monostate; + struct SegmentWithTargetPoint { + LengthPoint target_point; + bool operator==(const SegmentWithTargetPoint& other) const = default; }; + struct MoveToSegment : public SegmentWithTargetPoint {}; + struct MoveBySegment : public SegmentWithTargetPoint {}; + struct LineToSegment : public SegmentWithTargetPoint {}; + struct LineBySegment : public SegmentWithTargetPoint {}; + struct HLineSegment { + Length x; + bool operator==(const HLineSegment& other) const = default; + }; + struct HLineBySegment : public HLineSegment {}; + struct HLineToSegment : public HLineSegment {}; + + struct VLineSegment { + Length y; + bool operator==(const VLineSegment& other) const = default; + }; + struct VLineBySegment : public VLineSegment {}; + struct VLineToSegment : public VLineSegment {}; + struct ArcSegment : public SegmentWithTargetPoint { + double angle; + LengthSize radius; + bool large; + bool sweep; + bool operator==(const ArcSegment& other) const = default; + }; + struct ArcToSegment : public ArcSegment {}; + struct ArcBySegment : public ArcSegment {}; + + using Segment = std::variant<MoveToSegment, + MoveBySegment, + LineToSegment, + LineBySegment, + HLineToSegment, + HLineBySegment, + VLineToSegment, + VLineBySegment, + ArcToSegment, + ArcBySegment, + CloseSegment>; static scoped_refptr<StyleShape> Create(WindRule wind_rule, const LengthPoint& origin, @@ -56,7 +91,6 @@ const LengthPoint& origin, Vector<Segment> segments); - void ResolvePath(Path&, const gfx::SizeF&) const; WindRule wind_rule_; LengthPoint origin_; Vector<Segment> segments_;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 179f789c..54d0e94 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -1632,6 +1632,39 @@ node_data->AddIntAttribute(ax::mojom::blink::IntAttribute::kColor, color); } +void AXObject::SerializeImplicitActions(ui::AXNodeData* node_data) const { + // Serialize implicit actions for the following roles only. + if (RoleValue() != ax::mojom::blink::Role::kMenuItem && + RoleValue() != ax::mojom::blink::Role::kListBoxOption && + RoleValue() != ax::mojom::blink::Role::kMenuListOption) { + return; + } + + // Sometimes the children of these elements are nested in a generic container, + // skip the container to reach the actions we wish to surface. + const AXObjectVector& children = ChildrenIncludingIgnored(); + bool hasContainer = + children.size() == 1 && + (children[0]->RoleValue() == ax::mojom::blink::Role::kGenericContainer || + children[0]->RoleValue() == ax::mojom::blink::Role::kNone); + const AXObjectVector& potential_actions = + hasContainer ? children[0]->ChildrenIncludingIgnored() : children; + + auto actions_ids = node_data->GetIntListAttribute( + ax::mojom::blink::IntListAttribute::kActionsIds); + for (const auto& child : potential_actions) { + if (child->RoleValue() == ax::mojom::blink::Role::kButton || + child->RoleValue() == ax::mojom::blink::Role::kLink) { + actions_ids.push_back(child->AXObjectID()); + } + } + + if (!actions_ids.empty()) { + node_data->AddIntListAttribute( + ax::mojom::blink::IntListAttribute::kActionsIds, actions_ids); + } +} + void AXObject::SerializeElementAttributes(ui::AXNodeData* node_data) const { Element* element = GetElement(); if (!element) @@ -2594,6 +2627,12 @@ node_data->AddState(ax::mojom::blink::State::kHasActions); } + // Author-defined actions should take precedence over implicit ones. + if (RuntimeEnabledFeatures::AccessibilityImplicitActionsEnabled() && + !HasAriaAttribute(html_names::kAriaActionsAttr)) { + SerializeImplicitActions(node_data); + } + if (IsScrollableContainer()) SerializeScrollAttributes(node_data);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index 9671ff1..6717b4b 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -190,6 +190,7 @@ using pointer = value_type*; using reference = value_type&; + AncestorsIterator() = default; ~AncestorsIterator() = default; AncestorsIterator(const AncestorsIterator& other) @@ -239,8 +240,6 @@ } private: - AncestorsIterator() = default; - explicit AncestorsIterator(AXObject& current) : current_(¤t) {} friend class AXObject; @@ -1545,6 +1544,7 @@ void SerializeChildTreeID(ui::AXNodeData* node_data) const; void SerializeChooserPopupAttributes(ui::AXNodeData* node_data) const; void SerializeColorAttributes(ui::AXNodeData* node_data) const; + void SerializeImplicitActions(ui::AXNodeData* node_data) const; void SerializeElementAttributes(ui::AXNodeData* node_data) const; void SerializeHTMLNonStandardAttributesForJAWS( ui::AXNodeData* node_data) const;
diff --git a/third_party/blink/renderer/modules/ad_auction/ad_auction_data_config.idl b/third_party/blink/renderer/modules/ad_auction/ad_auction_data_config.idl index 9d08b2c..3681f2b 100644 --- a/third_party/blink/renderer/modules/ad_auction/ad_auction_data_config.idl +++ b/third_party/blink/renderer/modules/ad_auction/ad_auction_data_config.idl
@@ -21,6 +21,7 @@ // provided. USVString seller; USVString coordinatorOrigin; + [RuntimeEnabled=FledgeBiddingAndAuctionServerAPIMultiSeller] sequence<AdAuctionOneSeller> sellers; unsigned long requestSize; @@ -42,5 +43,6 @@ // Required When `AdAuctionDataConfig.seller` is provided. Uint8Array request; // Required When `AdAuctionDataConfig.sellers` is provided. + [RuntimeEnabled=FledgeBiddingAndAuctionServerAPIMultiSeller] sequence<AdAuctionPerSellerData> requests; };
diff --git a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc index 4c607d0..fcce1da 100644 --- a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc +++ b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc
@@ -85,6 +85,7 @@ #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/heap/heap_traits.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" #include "third_party/blink/renderer/platform/wtf/text/base64.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" @@ -4436,13 +4437,35 @@ scoped_refptr<const SecurityOrigin>> sellers; bool is_single_seller = false; - if (config->hasSeller()) { - if (config->hasSellers()) { + // Keep the seller being required when + // kFledgeBiddingAndAuctionServerAPIMultiSeller is disabled. Throw the same + // error as the field being required in idl. + bool serverAPIMultiSellerEnabled = RuntimeEnabledFeatures:: + FledgeBiddingAndAuctionServerAPIMultiSellerEnabled(); + if (!serverAPIMultiSellerEnabled && !config->hasSeller()) { + exception_state.ThrowTypeError( + "Failed to read the 'seller' property from 'AdAuctionDataConfig': " + "Required member is undefined."); + return EmptyPromise(); + } + + // When kFledgeBiddingAndAuctionServerAPIMultiSeller is enabled, one of seller + // and sellers must be provided, but not both. + if (serverAPIMultiSellerEnabled) { + if (config->hasSeller() && config->hasSellers()) { exception_state.ThrowTypeError( "Cannot provide both seller and sellers fields for " "AdAuctionDataConfig."); return EmptyPromise(); } + if (!config->hasSeller() && !config->hasSellers()) { + exception_state.ThrowTypeError( + "One of seller or sellers for AdAuctionDataConfig must be provided."); + return EmptyPromise(); + } + } + + if (config->hasSeller()) { is_single_seller = true; scoped_refptr<const SecurityOrigin> seller = ParseAndValidateOrigin(config->seller(), "seller", exception_state); @@ -4465,7 +4488,7 @@ } } sellers.Set(seller, coordinator); - } else if (config->hasSellers()) { + } else if (serverAPIMultiSellerEnabled && config->hasSellers()) { is_single_seller = false; for (const auto& seller_and_coordinator : config->sellers()) { scoped_refptr<const SecurityOrigin> seller = ParseAndValidateOrigin( @@ -4497,12 +4520,8 @@ } sellers.Set(seller, coordinator); } - - } else { - exception_state.ThrowTypeError( - "One of seller or sellers for AdAuctionDataConfig must be provided."); - return EmptyPromise(); } + std::optional<mojom::blink::AuctionDataConfigPtr> maybe_config_ptr = createAuctionDataConfig(config, exception_state); if (!maybe_config_ptr.has_value()) {
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc index 19303beb..60581a9 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
@@ -4001,7 +4001,7 @@ } wgpu::TextureFormat dawn_format = - AsDawnType(viz::ToClosestSkColorType(true, client_si->format())); + AsDawnType(viz::ToClosestSkColorType(client_si->format())); wgpu::TextureDescriptor desc = { .usage = tex_usage, .size = {base::checked_cast<uint32_t>(client_si->size().width()),
diff --git a/third_party/blink/renderer/modules/compute_pressure/pressure_observer.cc b/third_party/blink/renderer/modules/compute_pressure/pressure_observer.cc index 549512b..8de1d66 100644 --- a/third_party/blink/renderer/modules/compute_pressure/pressure_observer.cc +++ b/third_party/blink/renderer/modules/compute_pressure/pressure_observer.cc
@@ -97,11 +97,8 @@ // Reject all pending promises for `source`. RejectPendingResolvers(source.AsEnum(), DOMExceptionCode::kAbortError, "Called unobserve method."); - records_.erase(base::ranges::remove_if(records_, - [source](const auto& record) { - return record->source() == source; - }), - records_.end()); + auto removed = std::ranges::remove(records_, source, &PressureRecord::source); + records_.erase(removed.begin(), removed.end()); } void PressureObserver::disconnect() {
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h index 9b332416..2e8630a31 100644 --- a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h +++ b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h
@@ -32,7 +32,6 @@ class CableAuthenticationData; class Credential; class CurrentUserDetailsOptions; -class DigitalCredentialProvider; class IdentityCredentialDisconnectOptions; class IdentityProviderAccount; class IdentityProviderConfig; @@ -260,13 +259,6 @@ }; template <> -struct TypeConverter<blink::mojom::blink::DigitalCredentialProviderPtr, - blink::DigitalCredentialProvider> { - static blink::mojom::blink::DigitalCredentialProviderPtr Convert( - const blink::DigitalCredentialProvider&); -}; - -template <> struct MODULES_EXPORT TypeConverter<blink::mojom::blink::RpContext, blink::V8IdentityCredentialRequestOptionsContext> {
diff --git a/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc b/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc index def09a6..518c7011 100644 --- a/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc +++ b/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc
@@ -263,10 +263,12 @@ context->HandlePostRenderTasks(); - context->HandleVolumeMultiplier(destination_bus); - + // Handle audibility before handling the volume multiplier since the volume + // multiplier should not be taken into account for audibility. context->HandleAudibility(destination_bus); + context->HandleVolumeMultiplier(destination_bus); + // Advances the current sample-frame. AdvanceCurrentSampleFrame(number_of_frames);
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc index 49b03e421..4ee8764c 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_canvas_context.cc
@@ -115,8 +115,7 @@ if (!swap_buffers_) { return kN32_SkColorType; } - return viz::ToClosestSkColorType( - /*gpu_compositing=*/true, swap_buffers_->Format()); + return viz::ToClosestSkColorType(swap_buffers_->Format()); } sk_sp<SkColorSpace> GPUCanvasContext::GetSkColorSpace() const { @@ -311,8 +310,7 @@ } DCHECK(release_callback); - auto sk_color_type = viz::ToClosestSkColorType( - /*gpu_compositing=*/true, client_si->format()); + auto sk_color_type = viz::ToClosestSkColorType(client_si->format()); const SkImageInfo sk_image_info = SkImageInfo::Make( texture_descriptor_.size.width, texture_descriptor_.size.height,
diff --git a/third_party/blink/renderer/modules/xr/xr_hand.cc b/third_party/blink/renderer/modules/xr/xr_hand.cc index e423ca4..64bfbd4 100644 --- a/third_party/blink/renderer/modules/xr/xr_hand.cc +++ b/third_party/blink/renderer/modules/xr/xr_hand.cc
@@ -99,7 +99,9 @@ } else if (has_missing_poses_ && new_poses) { // Need to check if there are any missing poses has_missing_poses_ = - !base::ranges::all_of(*joints_, &XRJointSpace::MojoFromNative); + std::ranges::any_of(*joints_, [](const Member<XRJointSpace>& joint) { + return !joint->MojoFromNative().has_value(); + }); } }
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.cc b/third_party/blink/renderer/platform/graphics/canvas_resource.cc index 0c1782bd..4710248e3 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
@@ -236,10 +236,9 @@ } SkImageInfo CanvasResource::CreateSkImageInfo() const { - return SkImageInfo::Make( - SkISize::Make(size_.width(), size_.height()), - viz::ToClosestSkColorType(/*gpu_compositing=*/true, format_), alpha_type_, - color_space_.ToSkColorSpace()); + return SkImageInfo::Make(SkISize::Make(size_.width(), size_.height()), + viz::ToClosestSkColorType(format_), alpha_type_, + color_space_.ToSkColorSpace()); } // CanvasResourceSharedBitmap
diff --git a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc index cc6480d..30aa4a5d 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
@@ -447,40 +447,40 @@ out_resource->color_space = shared_image->color_space(); out_resource->hdr_metadata = hdr_metadata_; out_resource->origin = shared_image->surface_origin(); - return true; + } else { + // Populate the TransferableResource with a SharedImage for the software + // compositor. + RegisteredBitmap registered = CreateOrRecycleBitmap(); + if (!registered.bitmap) { + return false; + } + + ReadFramebufferIntoBitmapPixels( + static_cast<uint8_t*>(registered.bitmap->memory())); + + *out_resource = viz::TransferableResource::MakeSoftwareSharedImage( + registered.shared_image, registered.sync_token, size_, + viz::SinglePlaneFormat::kBGRA_8888, + viz::TransferableResource::ResourceSource::kDrawingBuffer); + out_resource->color_space = back_color_buffer_->shared_image->color_space(); + out_resource->hdr_metadata = hdr_metadata_; + + // ReadFramebufferIntoBitmapPixels always produced bottom-Left origin. + out_resource->origin = kBottomLeft_GrSurfaceOrigin; + + // This holds a ref on the DrawingBuffer that will keep it alive until the + // mailbox is released (and while the release callback is running). It also + // owns the SharedBitmap. + *out_release_callback = + base::BindOnce(&DrawingBuffer::MailboxReleasedSoftware, + weak_factory_.GetWeakPtr(), std::move(registered)); + + contents_changed_ = false; + if (preserve_drawing_buffer_ == kDiscard) { + SetBufferClearNeeded(true); + } } - // Populate the TransferableResource with a SharedImage for the software - // compositor. - RegisteredBitmap registered = CreateOrRecycleBitmap(); - if (!registered.bitmap) { - return false; - } - - ReadFramebufferIntoBitmapPixels( - static_cast<uint8_t*>(registered.bitmap->memory())); - - *out_resource = viz::TransferableResource::MakeSoftwareSharedImage( - registered.shared_image, registered.sync_token, size_, - viz::SinglePlaneFormat::kBGRA_8888, - viz::TransferableResource::ResourceSource::kDrawingBuffer); - out_resource->color_space = back_color_buffer_->shared_image->color_space(); - out_resource->hdr_metadata = hdr_metadata_; - - // ReadFramebufferIntoBitmapPixels always produced bottom-Left origin. - out_resource->origin = kBottomLeft_GrSurfaceOrigin; - - // This holds a ref on the DrawingBuffer that will keep it alive until the - // mailbox is released (and while the release callback is running). It also - // owns the SharedBitmap. - *out_release_callback = - base::BindOnce(&DrawingBuffer::MailboxReleasedSoftware, - weak_factory_.GetWeakPtr(), std::move(registered)); - - contents_changed_ = false; - if (preserve_drawing_buffer_ == kDiscard) { - SetBufferClearNeeded(true); - } return true; } @@ -748,8 +748,7 @@ DCHECK_EQ(size_.width(), shared_image->size().width()); DCHECK_EQ(size_.height(), shared_image->size().height()); - auto sk_color_type = viz::ToClosestSkColorType( - /*gpu_compositing=*/true, shared_image->format()); + auto sk_color_type = viz::ToClosestSkColorType(shared_image->format()); const SkImageInfo sk_image_info = SkImageInfo::Make( size_.width(), size_.height(), sk_color_type, kPremul_SkAlphaType);
diff --git a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc index 716b2957..3303204 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc
@@ -6,7 +6,6 @@ #include "base/memory/read_only_shared_memory_region.h" #include "cc/layers/texture_layer.h" -#include "cc/resources/cross_thread_shared_bitmap.h" #include "components/viz/common/resources/bitmap_allocation.h" #include "components/viz/common/resources/shared_bitmap.h" #include "components/viz/common/resources/shared_image_format_utils.h" @@ -234,11 +233,14 @@ SkImageInfo dst_info = SkImageInfo::Make(size.width(), size.height(), dst_color_type, kPremul_SkAlphaType, sk_image->refColorSpace()); - void* pixels = registered.bitmap->memory(); // Copy from SkImage into SharedMemory owned by |registered|. - if (!sk_image->readPixels(dst_info, pixels, dst_info.minRowBytes(), 0, 0)) + auto dst_mapping = registered.shared_image->Map(); + if (!sk_image->readPixels(dst_info, + dst_mapping->GetMemoryForPlane(0).data(), + dst_info.minRowBytes(), 0, 0)) { return false; + } *out_resource = viz::TransferableResource::MakeSoftwareSharedImage( registered.shared_image, registered.sync_token, size, format, @@ -285,16 +287,13 @@ if (!shared_image_interface) { return registered; } - auto shared_image_mapping = shared_image_interface->CreateSharedImage( - {format, size, gfx::ColorSpace(), gpu::SHARED_IMAGE_USAGE_CPU_WRITE_ONLY, - "ImageLayerBridgeBitmap"}); + registered.shared_image = + shared_image_interface->CreateSharedImageForSoftwareCompositor( + {format, size, gfx::ColorSpace(), + gpu::SHARED_IMAGE_USAGE_CPU_WRITE_ONLY, "ImageLayerBridgeBitmap"}); registered.sii_provider = sii_provider->GetWeakPtr(); registered.sync_token = shared_image_interface->GenVerifiedSyncToken(); - registered.shared_image = std::move(shared_image_mapping.shared_image); - registered.bitmap = base::MakeRefCounted<cc::CrossThreadSharedBitmap>( - viz::SharedBitmapId(), base::ReadOnlySharedMemoryRegion(), - std::move(shared_image_mapping.mapping), size, format); return registered; }
diff --git a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h index 77a3cbc..f46dae7 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h +++ b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.h
@@ -14,7 +14,6 @@ #include "ui/gfx/geometry/point_f.h" namespace cc { -class CrossThreadSharedBitmap; class Layer; class TextureLayer; } @@ -61,7 +60,6 @@ RegisteredBitmap(RegisteredBitmap&& other); RegisteredBitmap& operator=(RegisteredBitmap&& other); - scoped_refptr<cc::CrossThreadSharedBitmap> bitmap; scoped_refptr<gpu::ClientSharedImage> shared_image; gpu::SyncToken sync_token; base::WeakPtr<blink::WebGraphicsSharedImageInterfaceProvider> sii_provider;
diff --git a/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_video_frame_pool.cc b/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_video_frame_pool.cc index 75e0683b..996ca62 100644 --- a/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_video_frame_pool.cc +++ b/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_video_frame_pool.cc
@@ -102,6 +102,10 @@ shared_image->UpdateDestructionSyncToken(sync_token); } + const gpu::SharedImageCapabilities& GetCapabilities() override { + return SharedImageInterface()->GetCapabilities(); + } + private: gpu::SharedImageInterface* SharedImageInterface() const { if (!weak_context_provider_)
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index a24a244..1caf2ce 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -241,6 +241,12 @@ status: "test", }, { + // If the author did not define aria-actions, surface button and link + // children inside option and menuitem elements as implicit actions. + name: "AccessibilityImplicitActions", + status: "experimental", + }, + { // Use a minimum role of group on elements that are keyboard-focusable. // See https://w3c.github.io/html-aam/#minimum-role. name: "AccessibilityMinRoleTabbable", @@ -1038,7 +1044,7 @@ }, { name: "CSSDynamicRangeLimit", - status: "experimental", + status: "stable", }, { // Include custom properties in CSSComputedStyleDeclaration::item/length. @@ -2030,6 +2036,9 @@ status: "stable", }, { + name: "FledgeBiddingAndAuctionServerAPIMultiSeller", + }, + { name: "FledgeCustomMaxAuctionAdComponents", status: "stable", },
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc index e139c660..79fcaad2 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
@@ -20,6 +20,7 @@ #include "third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/renderer/platform/back_forward_cache_utils.h" +#include "third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/scheduler/common/features.h" #include "third_party/blink/renderer/platform/scheduler/common/task_priority.h"
diff --git a/third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h index c435569..5ac9076 100644 --- a/third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h
@@ -12,7 +12,6 @@ #include "base/unguessable_token.h" #include "third_party/blink/public/mojom/loader/pause_subresource_loading_handle.mojom-blink.h" #include "third_party/blink/public/platform/task_type.h" -#include "third_party/blink/renderer/platform/instrumentation/resource_coordinator/document_resource_coordinator.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" @@ -21,6 +20,7 @@ namespace blink { class AgentGroupScheduler; +class DocumentResourceCoordinator; class PageScheduler; class FrameScheduler : public FrameOrWorkerScheduler {
diff --git a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc index 3201ac5..cabc0df 100644 --- a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc +++ b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc
@@ -115,6 +115,10 @@ shared_image->UpdateDestructionSyncToken(sync_token); } + const gpu::SharedImageCapabilities& GetCapabilities() override { + return SharedImageInterface()->GetCapabilities(); + } + private: gpu::SharedImageInterface* SharedImageInterface() const { return raster_context_provider_->SharedImageInterface();
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 8c7f06f..f131e6b 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -556,19 +556,12 @@ crbug.com/40829059 [ Win11 ] external/wpt/css/css-masking/animations/clip-path-interpolation-shape.html [ Failure ] crbug.com/384990511 [ Win11-arm64 ] external/wpt/css/css-masking/animations/clip-path-interpolation-shape.html [ Failure ] crbug.com/40829059 [ Win ] external/wpt/css/css-masking/parsing/clip-path-shape-parsing.html [ Failure ] -crbug.com/40829059 external/wpt/css/css-masking/clip-path/clip-path-shape-001.html [ Failure ] crbug.com/40829059 external/wpt/css/css-masking/clip-path/clip-path-shape-002-units.html [ Failure ] crbug.com/40829059 external/wpt/css/css-masking/clip-path/clip-path-shape-002.html [ Failure ] crbug.com/40829059 external/wpt/css/css-masking/clip-path/clip-path-shape-003.html [ Failure ] crbug.com/40829059 external/wpt/css/css-masking/clip-path/clip-path-shape-004.html [ Failure ] crbug.com/40829059 external/wpt/css/css-masking/clip-path/animations/clip-path-shape-interpolation-001.html [ Failure ] crbug.com/40829059 external/wpt/css/css-masking/clip-path/animations/clip-path-shape-interpolation-002.html [ Failure ] -crbug.com/40829059 external/wpt/css/css-masking/clip-path/clip-path-shape-005.html [ Failure ] -crbug.com/40829059 [ Win11 ] external/wpt/css/css-masking/clip-path/clip-path-shape-006.html [ Failure ] -crbug.com/40829059 [ Win11-arm64 ] external/wpt/css/css-masking/clip-path/clip-path-shape-006.html [ Failure Timeout ] -crbug.com/40829059 [ Win10.20h2 ] external/wpt/css/css-masking/clip-path/clip-path-shape-006.html [ Failure ] -crbug.com/40829059 [ Linux ] external/wpt/css/css-masking/clip-path/clip-path-shape-006.html [ Failure ] -crbug.com/40829059 [ Mac ] external/wpt/css/css-masking/clip-path/clip-path-shape-006.html [ Failure ] crbug.com/40829059 virtual/composite-clip-path-animation/external/wpt/css/css-masking/clip-path/animations/clip-path-shape-interpolation-003.html [ Failure ] crbug.com/40829059 virtual/composite-clip-path-animation/external/wpt/css/css-masking/clip-path/animations/clip-path-shape-interpolation-004.html [ Failure ] crbug.com/40829059 virtual/main-thread-clip-path-animation/external/wpt/css/css-masking/clip-path/animations/clip-path-shape-interpolation-003.html [ Failure ] @@ -2690,8 +2683,6 @@ crbug.com/388922812 external/wpt/svg/animations/reftests/discard-rect-with-anim-child-b.svg [ Failure ] crbug.com/388934352 external/wpt/trusted-types/block-eval-function-constructor.html [ Failure ] crbug.com/388934352 external/wpt/trusted-types/WorkerGlobalScope-importScripts.html [ Failure ] -crbug.com/388592307 external/wpt/css/selectors/invalidation/has-nested-pseudo-002-crash.html [ Crash ] -crbug.com/388592307 external/wpt/css/selectors/invalidation/has-nested-pseudo-003-crash.html [ Crash ] crbug.com/388580242 [ Mac14 ] external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html [ Crash Failure ] [ Mac14 ] external/wpt/webrtc/protocol/h264-unidirectional-codec-offer.https.html [ Timeout ] crbug.com/388309400 [ Mac15 ] external/wpt/css/CSS2/backgrounds/background-position-applies-to-012.xht [ Crash ] @@ -8344,6 +8335,7 @@ # Temporarily disable for DevTools change crbug.com/325443331 http/tests/devtools/a11y-axe-core/sources/dom-breakpoints-pane-a11y-test.js [ Failure Pass ] +crbug.com/325443331 http/tests/devtools/network/failed-request-response-mimetype.js [ Failure Pass ] # Branch Gardener 2024-03-20 crbug.com/330547706 [ Debug Mac13 ] virtual/controls-refresh-hc/fast/forms/color-scheme/select/select-multiple-appearance-basic.html [ Crash Pass ]
diff --git a/third_party/blink/web_tests/TestLists/content_shell.filter b/third_party/blink/web_tests/TestLists/content_shell.filter index 23da2531..72c7796 100644 --- a/third_party/blink/web_tests/TestLists/content_shell.filter +++ b/third_party/blink/web_tests/TestLists/content_shell.filter
@@ -1071,7 +1071,6 @@ virtual/fenced-frame-mparch/external/wpt/fenced-frame/key-scrolling.https.html virtual/fenced-frame-mparch/external/wpt/fenced-frame/notification.https.html virtual/fenced-frame-mparch/external/wpt/fenced-frame/permission-api-denied.https.html -virtual/fenced-frame-mparch/external/wpt/fenced-frame/prerender.https.html virtual/fenced-frame-mparch/external/wpt/fenced-frame/resize-lock* virtual/fenced-frame-mparch/external/wpt/fenced-frame/window-outer-dimensions.https.html virtual/fractional-scroll-offsets/external/wpt/css/css-position/sticky/position-sticky-hyperlink.html @@ -1145,30 +1144,12 @@ virtual/select-parser-relaxation/external/wpt/html/semantics/forms/the-select-element/select-tabindex-order.tentative.html virtual/shared-storage-fenced-frame-mparch/external/wpt/shared-storage/select-url-saved-query-cross-origin-multi-query.tentative.https.sub.html virtual/shared-storage-fenced-frame-mparch/external/wpt/shared-storage/select-url-saved-query-same-origin-multi-query.tentative.https.sub.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/clients-matchall.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/cross-origin-isolated.https.html* -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/fetch-intercepted-by-service-worker.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/navigation-intercepted-by-service-worker.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/navigator-plugins.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/referrer.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/referrer-policy-no-referrer.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/referrer-policy-origin.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/referrer-policy-strict-origin.html virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-background-sync.tentative.https.html?target_hint=_blank virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-background-sync.tentative.https.html?target_hint=_self -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-idle-detection.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-local-file-system-access.https.html virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-notification.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-presentation-request.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-prompt-by-before-unload.html virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-push.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-request-picture-in-picture.html virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html?target_hint=_blank -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html?target_hint=_self virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-speech-synthesis.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/restriction-web-share.https.html -virtual/speculation-rules-prerender-target-hint/external/wpt/speculation-rules/prerender/windowclient-navigate.https.html virtual/speech-with-unified-autoplay/external/wpt/speech-api/idlharness.window.html virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechSynthesis* virtual/stable/external/wpt/soft-navigation-heuristics/disabled.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-computed-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-computed-expected.txt index 005f8e0d4..4e42b7b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-computed-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-computed-expected.txt
@@ -38,3 +38,4 @@ [FAIL] Property animation-name value '"DEFAULT"' assert_true: '"DEFAULT"' is a supported value for animation-name. expected true got false Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-valid-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-valid-expected.txt index 3599b277..2e6be8a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-valid-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/parsing/animation-name-valid-expected.txt
@@ -38,3 +38,4 @@ [FAIL] e.style['animation-name'] = "\\"DEFAULT\\"" should set the property value assert_not_equals: property should be set got disallowed value "" Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-weight-computed-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-weight-computed-expected.txt index a3d29ed..1cc8299 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-weight-computed-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-weight-computed-expected.txt
@@ -7,3 +7,4 @@ [FAIL] Property font-weight value 'calc(100 + (sign(20cqw - 10px) * 5))' assert_equals: expected "95" but got "105" Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/variations/font-style-parsing-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-fonts/variations/font-style-parsing-expected.txt index 5c0076e..3e11b01 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/variations/font-style-parsing-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/variations/font-style-parsing-expected.txt
@@ -6,3 +6,4 @@ [FAIL] Font-style (computed): 'oblique' followed by calc is valid even if it mixes units (with computation) assert_equals: Font-style computed style: 'oblique' followed by calc is valid even if it mixes units (with computation) expected "oblique" but got "italic" Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/color-stops-parsing-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/color-stops-parsing-expected.txt index 484a6c5..9ec1bf3a1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-images/gradient/color-stops-parsing-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-images/gradient/color-stops-parsing-expected.txt
@@ -25,3 +25,4 @@ [FAIL] repeating-conic-gradient(black 0%) [ parsable ] assert_equals: expected true but got false Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt index c330f52fb..cf1cd9b3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt
@@ -5,3 +5,4 @@ [FAIL] e.style['background-image'] = "-webkit-image-set(linear-gradient(red) 1x)" should set the property value assert_not_equals: property should be set got disallowed value "" Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/animations/clip-path-interpolation-shape-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-masking/animations/clip-path-interpolation-shape-expected.txt index 32538241..0fccd134 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-masking/animations/clip-path-interpolation-shape-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/animations/clip-path-interpolation-shape-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 314 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 302 FAIL, 0 TIMEOUT, 0 NOTRUN. [FAIL] CSS Transitions: property <clip-path> from neutral to [shape(from -5px 5px, line to 20px 20%)] at (-0.3) should be [shape(from 8px 5px, line to 7px 7%)] assert_equals: expected "shape ( from 8px 5px , line to 7px 7 % ) " but got "shape ( from - 5px 5px , line to 20px 20 % ) " [FAIL] CSS Transitions: property <clip-path> from neutral to [shape(from -5px 5px, line to 20px 20%)] at (0) should be [shape(from 5px 5px, line to 10px 10%)] @@ -249,53 +249,41 @@ [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, smooth by 10% 10px with 0% 80px, smooth by 30% 20px)] to [shape(from 15% 15px, smooth by 20% 0px with 10% 60px, smooth by 20% 30px)] at (1.5) should be [shape(from 20% 20px, smooth by 25% -5px with 15% 50px, smooth by 15% 35px)] assert_true: 'from' value should be supported expected true got false [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2% 2px, arc to 18% -12px of 7px 17px ccw small, arc by 12% -2px of 33px 33px rotate -42deg cw large , arc to 25% 20px of 10px 5px ccw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 2 % 2px , arc to 18 % - 12px of 7px 17px , arc by 12 % - 2px of 33px rotate - 42deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8% 8px, arc to 12% -18px of 13px 23px ccw small, arc by 18% -8px of 27px 27px rotate 102deg cw large, arc to 25% 20px of 10px 5px cw small )] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 8 % 8px , arc to 12 % - 18px of 13px 23px , arc by 18 % - 8px of 27px rotate 102deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10% 10px, arc to 10% -20px of 15px 25px ccw small, arc by 20% -10px of 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false -[FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1) should be [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px rotate 270deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 10 % 10px , arc to 10 % - 20px of 15px 25px , arc by 20 % - 10px of 25px rotate 150deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20% 20px, arc to 0% -30px of 25px 35px ccw small, arc by 30% -20px of 15px rotate 390deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 20 % 20px , arc to 0 % - 30px of 25px 35px , arc by 30 % - 20px of 15px rotate 390deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2% 2px, arc to 18% -12px of 7px 17px ccw small, arc by 12% -2px of 33px 33px rotate -42deg cw large , arc to 25% 20px of 10px 5px ccw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 2 % 2px , arc to 18 % - 12px of 7px 17px , arc by 12 % - 2px of 33px rotate - 42deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8% 8px, arc to 12% -18px of 13px 23px ccw small, arc by 18% -8px of 27px 27px rotate 102deg cw large, arc to 25% 20px of 10px 5px cw small )] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 8 % 8px , arc to 12 % - 18px of 13px 23px , arc by 18 % - 8px of 27px rotate 102deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10% 10px, arc to 10% -20px of 15px 25px ccw small, arc by 20% -10px of 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false -[FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1) should be [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px rotate 270deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 10 % 10px , arc to 10 % - 20px of 15px 25px , arc by 20 % - 10px of 25px rotate 150deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20% 20px, arc to 0% -30px of 25px 35px ccw small, arc by 30% -20px of 15px rotate 390deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 20 % 20px , arc to 0 % - 30px of 25px 35px , arc by 30 % - 20px of 15px rotate 390deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2% 2px, arc to 18% -12px of 7px 17px ccw small, arc by 12% -2px of 33px 33px rotate -42deg cw large , arc to 25% 20px of 10px 5px ccw small)] - assert_true: 'from' value should be supported expected true got false -[FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 2 % 2px , arc to 18 % - 12px of 7px 17px , arc by 12 % - 2px of 33px rotate - 42deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8% 8px, arc to 12% -18px of 13px 23px ccw small, arc by 18% -8px of 27px 27px rotate 102deg cw large, arc to 25% 20px of 10px 5px cw small )] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 8 % 8px , arc to 12 % - 18px of 13px 23px , arc by 18 % - 8px of 27px rotate 102deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10% 10px, arc to 10% -20px of 15px 25px ccw small, arc by 20% -10px of 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false -[FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1) should be [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px rotate 270deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 10 % 10px , arc to 10 % - 20px of 15px 25px , arc by 20 % - 10px of 25px rotate 150deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20% 20px, arc to 0% -30px of 25px 35px ccw small, arc by 30% -20px of 15px rotate 390deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 20 % 20px , arc to 0 % - 30px of 25px 35px , arc by 30 % - 20px of 15px rotate 390deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2% 2px, arc to 18% -12px of 7px 17px ccw small, arc by 12% -2px of 33px 33px rotate -42deg cw large , arc to 25% 20px of 10px 5px ccw small)] - assert_true: 'from' value should be supported expected true got false -[FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 2 % 2px , arc to 18 % - 12px of 7px 17px , arc by 12 % - 2px of 33px rotate - 42deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8% 8px, arc to 12% -18px of 13px 23px ccw small, arc by 18% -8px of 27px 27px rotate 102deg cw large, arc to 25% 20px of 10px 5px cw small )] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 8 % 8px , arc to 12 % - 18px of 13px 23px , arc by 18 % - 8px of 27px rotate 102deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10% 10px, arc to 10% -20px of 15px 25px ccw small, arc by 20% -10px of 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false -[FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1) should be [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px rotate 270deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 10 % 10px , arc to 10 % - 20px of 15px 25px , arc by 20 % - 10px of 25px rotate 150deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20% 20px, arc to 0% -30px of 25px 35px ccw small, arc by 30% -20px of 15px rotate 390deg cw small, arc to 25% 20px of 10px 5px cw small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 20 % 20px , arc to 0 % - 30px of 25px 35px , arc by 30 % - 20px of 15px rotate 390deg , arc to 25 % 20px of 10px 5px ) " but got "shape ( from 15 % 15px , arc to 5 % - 25px of 20px 30px , arc by 25 % - 15px of 20px rotate 270deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5px -5%, hline to 10px, vline by 10rem, hline by 8.25px, close, vline by 3pt)] to [shape(from -5px 5px, hline to 20px, vline by 10%, hline by 1em, close, vline by 6pt)] at (-0.3) should be [shape(from 8px calc(-6.5% - 1.5px), hline to 7px, vline by calc(-3% + 208px), hline by 5.92px, close, vline by 2.8px)] assert_equals: expected "shape ( from 8px calc ( - 6.5 % - 1.5px ) , hline to 7px , vline by calc ( - 3 % + 208px ) , hline by 5.92px , close , vline by 2.8px ) " but got "shape ( from - 5px 5px , hline to 20px , vline by 10 % , hline by 16px , close , vline by 8px ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5px -5%, hline to 10px, vline by 10rem, hline by 8.25px, close, vline by 3pt)] to [shape(from -5px 5px, hline to 20px, vline by 10%, hline by 1em, close, vline by 6pt)] at (0) should be [shape(from 5px -5%, hline to 10px, vline by calc(0% + 160px), hline by 8.25px, close, vline by 4px)] @@ -533,100 +521,88 @@ [FAIL] Web Animations: property <clip-path> from [path("M 5 5 s 0 80 10 10 t 30 20")] to [shape(from 15px 15px, smooth by 20px 0px with 10px 60px, smooth by 20px 30px)] at (1.5) should be [shape(from 20px 20px, smooth by 25px -5px with 15px 50px, smooth by 15px 35px)] assert_true: 'to' value should be supported expected true got false [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (-0.3) should be [shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 6.5 % - 4.5px ) 2px , arc to calc ( 19.5 % - 1.5px ) - 12px of 7px 17px , arc by calc ( 19.5 % - 7.5px ) - 2px of 33px rotate - 42deg , arc to calc ( 32.5 % - 7.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.3) should be [shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 3.5 % + 4.5px ) 8px , arc to calc ( 10.5 % + 1.5px ) - 18px of 13px 23px , arc by calc ( 10.5 % + 7.5px ) - 8px of 27px rotate 102deg , arc to calc ( 17.5 % + 7.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.5) should be [shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 2.5 % + 7.5px ) 10px , arc to calc ( 7.5 % + 2.5px ) - 20px of 15px 25px , arc by calc ( 7.5 % + 12.5px ) - 10px of 25px rotate 150deg , arc to calc ( 12.5 % + 12.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1) should be [shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 0 % + 15px ) 15px , arc to calc ( 0 % + 5px ) - 25px of 20px 30px , arc by calc ( 0 % + 25px ) - 15px of 20px rotate 270deg , arc to calc ( 0 % + 25px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1.5) should be [shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( - 2.5 % + 22.5px ) 20px , arc to calc ( - 7.5 % + 7.5px ) - 30px of 25px 35px , arc by calc ( - 7.5 % + 37.5px ) - 20px of 15px rotate 390deg , arc to calc ( - 12.5 % + 37.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (-0.3) should be [shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 6.5 % - 4.5px ) 2px , arc to calc ( 19.5 % - 1.5px ) - 12px of 7px 17px , arc by calc ( 19.5 % - 7.5px ) - 2px of 33px rotate - 42deg , arc to calc ( 32.5 % - 7.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.3) should be [shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 3.5 % + 4.5px ) 8px , arc to calc ( 10.5 % + 1.5px ) - 18px of 13px 23px , arc by calc ( 10.5 % + 7.5px ) - 8px of 27px rotate 102deg , arc to calc ( 17.5 % + 7.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.5) should be [shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 2.5 % + 7.5px ) 10px , arc to calc ( 7.5 % + 2.5px ) - 20px of 15px 25px , arc by calc ( 7.5 % + 12.5px ) - 10px of 25px rotate 150deg , arc to calc ( 12.5 % + 12.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1) should be [shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 0 % + 15px ) 15px , arc to calc ( 0 % + 5px ) - 25px of 20px 30px , arc by calc ( 0 % + 25px ) - 15px of 20px rotate 270deg , arc to calc ( 0 % + 25px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1.5) should be [shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( - 2.5 % + 22.5px ) 20px , arc to calc ( - 7.5 % + 7.5px ) - 30px of 25px 35px , arc by calc ( - 7.5 % + 37.5px ) - 20px of 15px rotate 390deg , arc to calc ( - 12.5 % + 37.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (-0.3) should be [shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false -[FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 6.5 % - 4.5px ) 2px , arc to calc ( 19.5 % - 1.5px ) - 12px of 7px 17px , arc by calc ( 19.5 % - 7.5px ) - 2px of 33px rotate - 42deg , arc to calc ( 32.5 % - 7.5px ) 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.3) should be [shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 3.5 % + 4.5px ) 8px , arc to calc ( 10.5 % + 1.5px ) - 18px of 13px 23px , arc by calc ( 10.5 % + 7.5px ) - 8px of 27px rotate 102deg , arc to calc ( 17.5 % + 7.5px ) 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.5) should be [shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 2.5 % + 7.5px ) 10px , arc to calc ( 7.5 % + 2.5px ) - 20px of 15px 25px , arc by calc ( 7.5 % + 12.5px ) - 10px of 25px rotate 150deg , arc to calc ( 12.5 % + 12.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1) should be [shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 0 % + 15px ) 15px , arc to calc ( 0 % + 5px ) - 25px of 20px 30px , arc by calc ( 0 % + 25px ) - 15px of 20px rotate 270deg , arc to calc ( 0 % + 25px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1.5) should be [shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( - 2.5 % + 22.5px ) 20px , arc to calc ( - 7.5 % + 7.5px ) - 30px of 25px 35px , arc by calc ( - 7.5 % + 37.5px ) - 20px of 15px rotate 390deg , arc to calc ( - 12.5 % + 37.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (-0.3) should be [shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false -[FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0) should be [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 6.5 % - 4.5px ) 2px , arc to calc ( 19.5 % - 1.5px ) - 12px of 7px 17px , arc by calc ( 19.5 % - 7.5px ) - 2px of 33px rotate - 42deg , arc to calc ( 32.5 % - 7.5px ) 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.3) should be [shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 3.5 % + 4.5px ) 8px , arc to calc ( 10.5 % + 1.5px ) - 18px of 13px 23px , arc by calc ( 10.5 % + 7.5px ) - 8px of 27px rotate 102deg , arc to calc ( 17.5 % + 7.5px ) 20px of 10px 5px ) " but got "shape ( from 5 % 5px , arc to 15 % - 15px of 10px 20px , arc by 15 % - 5px of 30px rotate 30deg , arc to 25 % 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (0.5) should be [shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 2.5 % + 7.5px ) 10px , arc to calc ( 7.5 % + 2.5px ) - 20px of 15px 25px , arc by calc ( 7.5 % + 12.5px ) - 10px of 25px rotate 150deg , arc to calc ( 12.5 % + 12.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1) should be [shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( 0 % + 15px ) 15px , arc to calc ( 0 % + 5px ) - 25px of 20px 30px , arc by calc ( 0 % + 25px ) - 15px of 20px rotate 270deg , arc to calc ( 0 % + 25px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] Web Animations: property <clip-path> from [shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)] to [path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")] at (1.5) should be [shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)] - assert_true: 'from' value should be supported expected true got false + assert_equals: expected "shape ( from calc ( - 2.5 % + 22.5px ) 20px , arc to calc ( - 7.5 % + 7.5px ) - 30px of 25px 35px , arc by calc ( - 7.5 % + 37.5px ) - 20px of 15px rotate 390deg , arc to calc ( - 12.5 % + 37.5px ) 20px of 10px 5px ) " but got "path ( \\" M 15 15 A 20 30 0 0 0 5 - 25 A 20 20 270 0 1 30 - 40 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Transitions: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px ccw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 2px 2px , arc to 18px - 12px of 7px 17px , arc by 12px - 2px of 33px rotate - 42deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0) should be [shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 5px 5px , arc to 15px - 15px of 10px 20px , arc by 15px - 5px of 30px rotate 30deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8px 8px, arc to 12px -18px of 13px 23px ccw small, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px cw small )] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 8px 8px , arc to 12px - 18px of 13px 23px , arc by 18px - 8px of 27px rotate 102deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10px 10px, arc to 10px -20px of 15px 25px ccw small, arc by 20px -10px of 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false -[FAIL] CSS Transitions: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1) should be [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px rotate 270deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 10px 10px , arc to 10px - 20px of 15px 25px , arc by 20px - 10px of 25px rotate 150deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20px 20px, arc to 0px -30px of 25px 35px ccw small, arc by 30px -20px of 15px rotate 390deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 20px 20px , arc to 0px - 30px of 25px 35px , arc by 30px - 20px of 15px rotate 390deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px ccw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 2px 2px , arc to 18px - 12px of 7px 17px , arc by 12px - 2px of 33px rotate - 42deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0) should be [shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 5px 5px , arc to 15px - 15px of 10px 20px , arc by 15px - 5px of 30px rotate 30deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8px 8px, arc to 12px -18px of 13px 23px ccw small, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px cw small )] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 8px 8px , arc to 12px - 18px of 13px 23px , arc by 18px - 8px of 27px rotate 102deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10px 10px, arc to 10px -20px of 15px 25px ccw small, arc by 20px -10px of 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false -[FAIL] CSS Transitions with transition: all: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1) should be [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px rotate 270deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 10px 10px , arc to 10px - 20px of 15px 25px , arc by 20px - 10px of 25px rotate 150deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Transitions with transition: all: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20px 20px, arc to 0px -30px of 25px 35px ccw small, arc by 30px -20px of 15px rotate 390deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 20px 20px , arc to 0px - 30px of 25px 35px , arc by 30px - 20px of 15px rotate 390deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px ccw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 2px 2px , arc to 18px - 12px of 7px 17px , arc by 12px - 2px of 33px rotate - 42deg , arc to 25px 20px of 10px 5px ) " but got "path ( \\" M 5 5 A 10 20 0 0 0 15 - 15 A 30 30 30 1 1 30 - 20 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0) should be [shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 5px 5px , arc to 15px - 15px of 10px 20px , arc by 15px - 5px of 30px rotate 30deg , arc to 25px 20px of 10px 5px ) " but got "path ( \\" M 5 5 A 10 20 0 0 0 15 - 15 A 30 30 30 1 1 30 - 20 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8px 8px, arc to 12px -18px of 13px 23px ccw small, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px cw small )] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 8px 8px , arc to 12px - 18px of 13px 23px , arc by 18px - 8px of 27px rotate 102deg , arc to 25px 20px of 10px 5px ) " but got "path ( \\" M 5 5 A 10 20 0 0 0 15 - 15 A 30 30 30 1 1 30 - 20 A 10 5 0 0 0 25 20 \\" ) " [FAIL] CSS Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10px 10px, arc to 10px -20px of 15px 25px ccw small, arc by 20px -10px of 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false -[FAIL] CSS Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1) should be [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px rotate 270deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 10px 10px , arc to 10px - 20px of 15px 25px , arc by 20px - 10px of 25px rotate 150deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] CSS Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20px 20px, arc to 0px -30px of 25px 35px ccw small, arc by 30px -20px of 15px rotate 390deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 20px 20px , arc to 0px - 30px of 25px 35px , arc by 30px - 20px of 15px rotate 390deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (-0.3) should be [shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px ccw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 2px 2px , arc to 18px - 12px of 7px 17px , arc by 12px - 2px of 33px rotate - 42deg , arc to 25px 20px of 10px 5px ) " but got "path ( \\" M 5 5 A 10 20 0 0 0 15 - 15 A 30 30 30 1 1 30 - 20 A 10 5 0 0 0 25 20 \\" ) " [FAIL] Web Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0) should be [shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 5px 5px , arc to 15px - 15px of 10px 20px , arc by 15px - 5px of 30px rotate 30deg , arc to 25px 20px of 10px 5px ) " but got "path ( \\" M 5 5 A 10 20 0 0 0 15 - 15 A 30 30 30 1 1 30 - 20 A 10 5 0 0 0 25 20 \\" ) " [FAIL] Web Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.3) should be [shape(from 8px 8px, arc to 12px -18px of 13px 23px ccw small, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px cw small )] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 8px 8px , arc to 12px - 18px of 13px 23px , arc by 18px - 8px of 27px rotate 102deg , arc to 25px 20px of 10px 5px ) " but got "path ( \\" M 5 5 A 10 20 0 0 0 15 - 15 A 30 30 30 1 1 30 - 20 A 10 5 0 0 0 25 20 \\" ) " [FAIL] Web Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (0.5) should be [shape(from 10px 10px, arc to 10px -20px of 15px 25px ccw small, arc by 20px -10px of 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false -[FAIL] Web Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1) should be [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px rotate 270deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 10px 10px , arc to 10px - 20px of 15px 25px , arc by 20px - 10px of 25px rotate 150deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " [FAIL] Web Animations: property <clip-path> from [path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")] to [shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)] at (1.5) should be [shape(from 20px 20px, arc to 0px -30px of 25px 35px ccw small, arc by 30px -20px of 15px rotate 390deg cw small, arc to 25px 20px of 10px 5px cw small)] - assert_true: 'to' value should be supported expected true got false + assert_equals: expected "shape ( from 20px 20px , arc to 0px - 30px of 25px 35px , arc by 30px - 20px of 15px rotate 390deg , arc to 25px 20px of 10px 5px ) " but got "shape ( from 15px 15px , arc to 5px - 25px of 20px 30px , arc by 25px - 15px of 20px rotate 270deg , arc to 25px 20px of 10px 5px ) " Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-shape-parsing-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-shape-parsing-expected.txt index e643ce1..8b42929 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-shape-parsing-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/parsing/clip-path-shape-parsing-expected.txt
@@ -9,11 +9,7 @@ assert_not_equals: property should be set got disallowed value "" [FAIL] e.style['clip-path'] = "shape(from 10px 10px, smooth to 50px 1pt)" should set the property value assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)" should set the property value - assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 10px 10px, arc to 50px 1pt of 10px 10px small rotate 0deg)" should set the property value - assert_not_equals: property should be set got disallowed value "" [FAIL] e.style['clip-path'] = "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)" but got "shape(from 10% 1rem, arc to 50px 1pt of 20% rotate 25deg)" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-nesting/cssom-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-nesting/cssom-expected.txt index 0a8c92e4..83dc6c5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-nesting/cssom-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-nesting/cssom-expected.txt
@@ -4,3 +4,4 @@ [FAIL] Manipulation of nested declarations through CSSOM assert_equals: expected "3" but got "1" Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-computed.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-computed.tentative-expected.txt index 23a2863f..f6c6513 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-computed.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-computed.tentative-expected.txt
@@ -15,35 +15,23 @@ assert_true: 'shape(from 20px 40px, smooth by 20px 20px)' is a supported value for clip-path. expected true got false [FAIL] Property clip-path value 'shape(from 20px 40px, smooth by 20px 20px with 12px 32px)' assert_true: 'shape(from 20px 40px, smooth by 20px 20px with 12px 32px)' is a supported value for clip-path. expected true got false -[FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10%)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10%)' is a supported value for clip-path. expected true got false -[FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 0)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 0)' is a supported value for clip-path. expected true got false -[FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 0)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 0)' is a supported value for clip-path. expected true got false -[FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% rotate 0deg)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% rotate 0deg)' is a supported value for clip-path. expected true got false -[FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20%)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20%)' is a supported value for clip-path. expected true got false [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% large)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% large)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% large)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of -10% -20% large)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of -10% -20% large)' is a supported value for clip-path. expected true got false -[FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% rotate 1deg)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% rotate 1deg)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of -10% -20% large)" but got "shape(from 20px 40px, arc by 20px 20px of -10% -20%)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 12deg)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 12deg)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 12deg)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 3.14159265rad)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 3.14159265rad)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 180deg)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 180deg)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% large rotate 12deg)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% large rotate 12deg)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% large rotate 12deg)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw large)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% cw large)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw large)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% large cw)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% large cw)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw large)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] Property clip-path value 'shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg large)' - assert_true: 'shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg large)' is a supported value for clip-path. expected true got false + assert_equals: expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% large rotate 12deg)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg)" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-valid.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-valid.tentative-expected.txt index e69832d3..a4c2157 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-valid.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-shapes/shape-functions/shape-function-valid.tentative-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 41 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 34 FAIL, 0 TIMEOUT, 0 NOTRUN. [FAIL] e.style['clip-path'] = "shape(from 20px 40px, move to 20px 30px, hline to x-start, hline to y-start)" should set the property value assert_not_equals: property should be set got disallowed value "" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, move to 20px 30px, vline to y-start, vline to y-end)" should set the property value @@ -50,37 +50,23 @@ assert_not_equals: property should be set got disallowed value "" [FAIL] e.style['clip-path'] = "shape(from center, smooth by 20px 20px with 12px 32px from origin)" should set the property value assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc to top right of 10%)" should set the property value - assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10%)" should set the property value - assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 0)" should set the property value - assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 0)" should set the property value - assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20% 20pt of 10% rotate 0deg)" should set the property value - assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" should set the property value - assert_not_equals: property should be set got disallowed value "" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20% large)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% large)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of -10% -20% large)" should set the property value - assert_not_equals: property should be set got disallowed value "" -[FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% rotate 1deg)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of -10% -20% large)" but got "shape(from 20px 40px, arc by 20px 20px of -10% -20%)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 12deg)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw rotate 12deg)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10px 20px cw rotate 0.52rad)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10px 20px cw rotate 0.52rad)" but got "shape(from 20px 40px, arc by 20px 20px of 10px 20px rotate 0.52rad)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20% large rotate 12deg)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% large rotate 12deg)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw large)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw large)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20% large cw)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% cw large)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20%)" [FAIL] e.style['clip-path'] = "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg large)" should set the property value - assert_not_equals: property should be set got disallowed value "" + assert_equals: serialization should be canonical expected "shape(from 20px 40px, arc by 20px 20px of 10% 20% large rotate 12deg)" but got "shape(from 20px 40px, arc by 20px 20px of 10% 20% rotate 12deg)" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/navigation/pageswap-in-hidden-doc-should-skip-transition.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/navigation/pageswap-in-hidden-doc-should-skip-transition.html index d8a903a..aceced0d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/navigation/pageswap-in-hidden-doc-should-skip-transition.html +++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/navigation/pageswap-in-hidden-doc-should-skip-transition.html
@@ -6,42 +6,17 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script> - const params = new URLSearchParams(location.search); - // The page the popup navigates to. - const is_new_page = params.has('new'); - // The initial page in the popup. - const is_popup_page = params.has('popup'); - // The test page itself. - const is_test_page = !is_popup_page && !is_new_page; - - if (is_test_page) { - const expectedUrl = location.href + "?new"; - const expectedEvents = ["pageswap", expectedUrl, "push", "from", "pagehide"]; - - promise_test(async t => { - let popup; - onload = async () => { - window.events = []; - popup = window.open('?popup'); - t.add_cleanup(() => popup.close()); - }; - - const result = await new Promise(resolve => { - window.popup_done = resolve; - }); - assert_equals(result, null); - }, "Outbound cross-document view transition is not allowed when document is hidden"); - } else if (is_popup_page) { - onload = async () => { - await test_driver.minimize_window(); - assert_equals(document.visibilityState, "hidden"); - assert_equals(document.hidden, true); - - location.href = location.href.split('?')[0] + '?new'; + promise_test(async t => { + let popup; + onload = () => { + popup = window.open("resources/navigate-after-hide.html"); + t.add_cleanup(() => popup.close()); }; - onpageswap = (e) => { - window.opener.popup_done(e.viewTransition); - }; - } + const result = await new Promise((resolve, reject) => { + window.popup_done = resolve; + window.popup_error = reject; + }); + assert_equals(result, null); + }, "Outbound cross-document view transition is not allowed when document is hidden"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/navigation/resources/navigate-after-hide.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/navigation/resources/navigate-after-hide.html new file mode 100644 index 0000000..0b6a3d66 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/navigation/resources/navigate-after-hide.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script> + onload = async () => { + test_driver.set_test_context(window.opener); + await test_driver.minimize_window(); + if (document.visibilityState !== "hidden" || !document.hidden) { + window.opener.popup_error("popup isn't hidden"); + } else { + location.href = location.href + "?new"; + } + }; + + onpageswap = (e) => { + window.opener.popup_done(e.viewTransition); + }; +</script>
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/css/css-inline/text-box-trim/text-box-on-non-root-inline-box-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/css/css-inline/text-box-trim/text-box-on-non-root-inline-box-expected.txt index 4c1d9d7..90b0705 100644 --- a/third_party/blink/web_tests/platform/linux/external/wpt/css/css-inline/text-box-trim/text-box-on-non-root-inline-box-expected.txt +++ b/third_party/blink/web_tests/platform/linux/external/wpt/css/css-inline/text-box-trim/text-box-on-non-root-inline-box-expected.txt
@@ -6,3 +6,4 @@ [FAIL] .aqua 4 assert_equals: \n<div class="aqua" data-expected-height="18">\n <span style="font-size: 18px; text-box: ex alphabetic;">ApÉx</span>\n</div>\nheight expected 18 but got 21 Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt index a32cbf5..5d93ee0c 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt
@@ -160,6 +160,7 @@ direction display dominantBaseline +dynamicRangeLimit emptyCells fallback fieldSizing
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/css-property-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/css-property-listing-expected.txt index dbb17b2..23a66ba8 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/css-property-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/css-property-listing-expected.txt
@@ -165,6 +165,7 @@ direction display dominant-baseline + dynamic-range-limit empty-cells field-sizing fill
diff --git a/third_party/blink/web_tests/wpt_internal/css/css-ui/webkit-user-modify-shadow-dom-003.html b/third_party/blink/web_tests/wpt_internal/css/css-ui/webkit-user-modify-shadow-dom-003.html new file mode 100644 index 0000000..f4dcdb6 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/css/css-ui/webkit-user-modify-shadow-dom-003.html
@@ -0,0 +1,28 @@ +<!DOCTYPE HTML> +<title>-webkit-user-modify shadow reset and MatchedPropertiesCache</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + +span { -webkit-user-modify: read-only; } + +</style> +<div id="host" contenteditable> + <template shadowrootmode="open"> + <slot></slot> + </template> + <span id="s1"></span> + <span id="s2"></span> +</div> +<script> + + test(() => { + let s1 = document.getElementById("s1"); + let s2 = document.getElementById("s2"); + assert_equals(getComputedStyle(s1).webkitUserModify, "read-only", + "first element style inheritance overridden by declaration"); + assert_equals(getComputedStyle(s2).webkitUserModify, "read-only", + "second element style inheritance overridden by declaration"); + }, "-webkit-user-modify style is reset at shadow boundary and shared style is correctly overridden"); + +</script>
diff --git a/third_party/chromite b/third_party/chromite index a9fdaf0..bfc50e6 160000 --- a/third_party/chromite +++ b/third_party/chromite
@@ -1 +1 @@ -Subproject commit a9fdaf06401860211c818d7000208547d9de4b1b +Subproject commit bfc50e6c9b571af42db951af20e9d9d983a94ecc
diff --git a/third_party/crossbench b/third_party/crossbench index 0d3512c..19819d8 160000 --- a/third_party/crossbench +++ b/third_party/crossbench
@@ -1 +1 @@ -Subproject commit 0d3512c78fe49298db80e80cf0d1d608ae13dd15 +Subproject commit 19819d8c80ab6eefff2a3cf1d5b732b4be454856
diff --git a/third_party/dawn b/third_party/dawn index 46d1e23..041b072 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit 46d1e23d9ee5fdf648359b7b3e3f9caa5eafac68 +Subproject commit 041b072241d75850d18f441b53bacf2d317e9818
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index 40f57f8..1ea7815 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit 40f57f86c54cd8b5c06878c0a7301bce9d4b0dbf +Subproject commit 1ea78154d90c2b0a33fd7a72fc97beccc6d1c40d
diff --git a/third_party/fuzztest/src b/third_party/fuzztest/src index c99c121..87fffb7 160000 --- a/third_party/fuzztest/src +++ b/third_party/fuzztest/src
@@ -1 +1 @@ -Subproject commit c99c121225fcc175bdc084d83c30f3c806b75afd +Subproject commit 87fffb7eaf974e55ec736f0100dcd9bdf3f91469
diff --git a/third_party/libc++/src b/third_party/libc++/src index 74dd760..2e25154 160000 --- a/third_party/libc++/src +++ b/third_party/libc++/src
@@ -1 +1 @@ -Subproject commit 74dd760826063f15ce4d373b31bc34d1c65e41c2 +Subproject commit 2e25154d49c29fa9aa42c30ad4a027bd30123434
diff --git a/third_party/perfetto b/third_party/perfetto index c6ea87b5..0b3d3cc 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit c6ea87b5b19e6b2798f290b000bb3609c9018c81 +Subproject commit 0b3d3cc75b911d55cb138252231d2c929e312dba
diff --git a/third_party/webrtc b/third_party/webrtc index d8135eb..83861d5 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit d8135eb75b7ed9544c6b41732c8fd5640514d565 +Subproject commit 83861d5649c83d1df82fafa622f469ac272f21aa
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index 2ef05e88..154c0fed3 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -844,9 +844,6 @@ "META": {"sizes": {"includes": [30],}}, "includes": [6380], }, - "chromeos/resources/chromeos_resources.grd": { - "includes": [6400], - }, "<(SHARED_INTERMEDIATE_DIR)/ash/webui/eche_app_ui/ash_eche_app_resources.grd": { "META": {"sizes": {"includes": [50],}}, "includes": [6420],
diff --git a/tools/gritsettings/startup_resources_win.txt b/tools/gritsettings/startup_resources_win.txt index 05151d7..02ac07d 100644 --- a/tools/gritsettings/startup_resources_win.txt +++ b/tools/gritsettings/startup_resources_win.txt
@@ -75,7 +75,6 @@ IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK 175 IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUFFIX 176 IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUGGESTION_CONTENTS 177 -IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT 178 IDS_ACC_OMNIBOX_PEDAL_MANAGE_SECURITY_SETTINGS 179 IDS_ACC_OMNIBOX_PEDAL_MANAGE_SECURITY_SETTINGS_SUFFIX 180 IDS_OMNIBOX_PEDAL_MANAGE_SECURITY_SETTINGS_SUGGESTION_CONTENTS 181
diff --git a/tools/metrics/histograms/metadata/gpu/enums.xml b/tools/metrics/histograms/metadata/gpu/enums.xml index e53236d4..45aa7a0 100644 --- a/tools/metrics/histograms/metadata/gpu/enums.xml +++ b/tools/metrics/histograms/metadata/gpu/enums.xml
@@ -1365,6 +1365,50 @@ <int value="18" label="WrappedGraphiteTextureBacking"/> </enum> +<enum name="SharedImageFormatUMA"> + <summary> + Corresponds to SharedImageFormat used when creating a SharedImage. + </summary> + <int value="0" label="RGBA_8888"/> + <int value="1" label="RGBA_4444"/> + <int value="2" label="BGRA_8888"/> + <int value="3" label="ALPHA_8"/> + <int value="4" label="LUMINANCE_8"/> + <int value="5" label="RGB_565"/> + <int value="6" label="BGR_565"/> + <int value="7" label="ETC1"/> + <int value="8" label="R_8"/> + <int value="9" label="RG_88"/> + <int value="10" label="LUMINANCE_F16"/> + <int value="11" label="RGBA_F16"/> + <int value="12" label="R_16"/> + <int value="13" label="RG_1616"/> + <int value="14" label="RGBX_8888"/> + <int value="15" label="BGRX_8888"/> + <int value="16" label="RGBA_1010102"/> + <int value="17" label="BGRA_1010102"/> + <int value="18" label="R_F16"/> + <int value="19" label="YV12"/> + <int value="20" label="NV12"/> + <int value="21" label="NV12A"/> + <int value="22" label="P010"/> + <int value="23" label="NV16"/> + <int value="24" label="NV24"/> + <int value="25" label="P210"/> + <int value="26" label="P410"/> + <int value="27" label="I420"/> + <int value="28" label="I420A"/> + <int value="29" label="I422"/> + <int value="30" label="I444"/> + <int value="31" label="YUV420P10"/> + <int value="32" label="YUV422P10"/> + <int value="33" label="YUV444P10"/> + <int value="34" label="YUV420P16"/> + <int value="35" label="YUV422P16"/> + <int value="36" label="YUV444P16"/> + <int value="37" label="Other"/> +</enum> + <enum name="SkiaBackendType"> <summary> What Skia backend is being used for GPU acceleration in Chrome.
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml index 160f8ea..d06ccaa 100644 --- a/tools/metrics/histograms/metadata/gpu/histograms.xml +++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -1429,6 +1429,16 @@ </summary> </histogram> +<histogram name="GPU.SharedImage.SharedImageFormat" enum="SharedImageFormatUMA" + expires_after="2026-02-01"> + <owner>hitawala@chromium.org</owner> + <owner>chrome-gpu-metric-alerts@chromium.org</owner> + <summary> + Records the SharedImageFormat type for a SharedImageBacking that's + initialized/registered. + </summary> +</histogram> + <histogram name="GPU.SkiaBackendType" enum="SkiaBackendType" expires_after="2025-06-08"> <owner>kylechar@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/navigation/enums.xml b/tools/metrics/histograms/metadata/navigation/enums.xml index 6ef84e6..5239d5bd 100644 --- a/tools/metrics/histograms/metadata/navigation/enums.xml +++ b/tools/metrics/histograms/metadata/navigation/enums.xml
@@ -453,6 +453,7 @@ <int value="16" label="Browser not embedding a valid LocalSurfaceID"/> <int value="17" label="Not capture non primary main frames"/> <int value="18" label="Captured Empty Bitmap From Embedder"/> + <int value="19" label="Forward transition animation not supported"/> </enum> <!-- LINT.ThenChange(//content/browser/renderer_host/navigation_transitions/navigation_transition_data.h:CacheHitOrMissReason)-->
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index f8afcbfa..4ec311f 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -487,6 +487,29 @@ </histogram> <histogram + name="PageLoad.Clients.Ads.AdPaintTiming.NavigationToFirstContentfulPaint3.Incognito" + units="ms" expires_after="2025-06-21"> + <owner>kjarosz@google.com</owner> + <owner>polonium@google.com</owner> + <summary> + Records the time from frame navigation start to FirstContentfulPaint of each + ad frame that receives a FirstContentfulPaint. The time could be quite + large, as some ads don't paint until they're scrolled into view. But the + metric is still useful in aggregate. + + Recorded for all ad frames with non-zero bytes or cpu usage that receive a + FirstContentfulPaint. Recorded when the ad frame or page is destroyed. + + This metric is a version of + PageLoad.Clients.Ads.AdPaintTiming.NavigationToFirstContentfulPaint3, that + is recorded only in incognito mode. + + This histogram is of special interest to polonium@google.com. Do not modify + it without talking to them first. + </summary> +</histogram> + +<histogram name="PageLoad.Clients.Ads.AdPaintTiming.TopFrameNavigationToFirstAdFirstContentfulPaint" units="ms" expires_after="2025-06-22"> <owner>jkarlin@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml index 1e26984..abd0426 100644 --- a/tools/metrics/histograms/metadata/signin/histograms.xml +++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -1007,6 +1007,8 @@ version of the dialog that is shown when {Variant}. </summary> <token key="Variant"> + <variant name="NoUnsynced" + summary="the user has valid credentials and no unsynced data"/> <variant name="SupervisedProfile" summary="the user is supervised"/> <variant name="Unsynced" summary="the user has valid credentials and unsynced data"/>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index e3c0b567..0f8a811 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@ "full_remote_path": "perfetto-luci-artifacts/v49.0/linux-arm64/trace_processor_shell" }, "win": { - "hash": "be278d644c8dc049d2c540e3a550d55e5152e702", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/e324242074e2e64a65e90a2933afd3ca4413554f/trace_processor_shell.exe" + "hash": "871809546a1fa0a0a74080b53bda9be32a50161d", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/0b3d3cc75b911d55cb138252231d2c929e312dba/trace_processor_shell.exe" }, "linux_arm": { "hash": "a15d8362d80cfd7cd8d785cf6afc22586de688cd", @@ -22,7 +22,7 @@ }, "linux": { "hash": "dcc509ec51017ea9e1cf5f40916cb520ddc70611", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/c6ea87b5b19e6b2798f290b000bb3609c9018c81/trace_processor_shell" + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/0b3d3cc75b911d55cb138252231d2c929e312dba/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb index f53fce3..fce7d3b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -195,7 +195,7 @@ <translation id="2500392669976258912">גוג'ראטית פונטית</translation> <translation id="2515586267016047495">Alt</translation> <translation id="2517472476991765520">סריקה</translation> -<translation id="252641322760726369">כדי לגשת במהירות לקבצים שבמדף, יש ללחוץ לחיצה ארוכה על קובץ, להקיש על <ph name="ICON" /> ולבחור באפשרות '<ph name="PIN_COMMAND" />'.</translation> +<translation id="252641322760726369">כדי לגשת במהירות לקבצים שבמדף, יש ללחוץ לחיצה ארוכה על קובץ, ללחוץ על <ph name="ICON" /> ולבחור באפשרות '<ph name="PIN_COMMAND" />'.</translation> <translation id="2534460670861217804">שרת proxy של Secure HTTP</translation> <translation id="2541377937973966830">התכנים בתיקייה הזו הם לקריאה בלבד. לא ניתן לבצע פעולות מסוימות.</translation> <translation id="2542049655219295786">טבלה של Google</translation>
diff --git a/ui/strings/translations/auto_image_annotation_strings_iw.xtb b/ui/strings/translations/auto_image_annotation_strings_iw.xtb index 9c05d9f..1e9e43b 100644 --- a/ui/strings/translations/auto_image_annotation_strings_iw.xtb +++ b/ui/strings/translations/auto_image_annotation_strings_iw.xtb
@@ -44,7 +44,7 @@ <translation id="4908855810237020461">סמל השעון, יכול לסמן זמן</translation> <translation id="5121688653159243920">סמל של רשימה עם תבליטים</translation> <translation id="5214400792580101697">סמל עצור</translation> -<translation id="5316551112821993767">לתמונה הזו לא נוספה תווית. כדי לקבל תיאורי תמונות, מקישים הקשה כפולה על לחצן האפשרויות הנוספות בחלק העליון של הדפדפן.</translation> +<translation id="5316551112821993767">לתמונה הזו לא נוספה תווית. כדי לקבל תיאורי תמונות, לוחצים לחיצה כפולה על כפתור האפשרויות הנוספות בחלק העליון של הדפדפן.</translation> <translation id="5586467629893654334">סמל של ירח, יכול לסמן את שעות הלילה או שינה</translation> <translation id="5599474660109692598">סמל של בועה מסרט מצויר, יכול לסמן צ'אט</translation> <translation id="5617165654945759937">סמל של עפרון, יכול לסמן עריכה</translation>
diff --git a/ui/strings/translations/ui_strings_iw.xtb b/ui/strings/translations/ui_strings_iw.xtb index 0e5a130..ac3d607b 100644 --- a/ui/strings/translations/ui_strings_iw.xtb +++ b/ui/strings/translations/ui_strings_iw.xtb
@@ -45,7 +45,7 @@ <translation id="2192232475740621500">שימוש בדחיסות נמוכה</translation> <translation id="2267918077332197517">חסימת כל ההודעות מהאתר הזה</translation> <translation id="2283117145434822734">F6</translation> -<translation id="2289052229480071835">יש להקיש על יעדי המגע במסך.</translation> +<translation id="2289052229480071835">יש ללחוץ על יעדי המגע במסך.</translation> <translation id="2295140143284145483">סקר</translation> <translation id="2297836609126180313"><ph name="QUANTITY" />TB/s</translation> <translation id="2353636109065292463">בדיקת חיבור האינטרנט</translation> @@ -117,7 +117,7 @@ <translation id="4895877746940133817"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /></translation> <translation id="4968171027979920686">{SECONDS,plural, =1{שנייה אחת}one{# שניות}two{# שניות}other{# שניות}}</translation> <translation id="4971687151119236543">טראק קודם במדיה</translation> -<translation id="5046499563572181734">יש להקיש כאן</translation> +<translation id="5046499563572181734">יש ללחוץ כאן</translation> <translation id="5076340679995252485">&הדבקה</translation> <translation id="520299402983819650"><ph name="QUANTITY" />PB</translation> <translation id="5278860589123563674">השליחה נכשלה</translation>
diff --git a/v8 b/v8 index 60e67b9..fc91f65 160000 --- a/v8 +++ b/v8
@@ -1 +1 @@ -Subproject commit 60e67b93909a1c858305b27111d9988f94fff0f8 +Subproject commit fc91f65bbd2f5dfa85e65a007ec01a71a10a45b4