diff --git a/DEPS b/DEPS index 82e36c3..98b1b9a 100644 --- a/DEPS +++ b/DEPS
@@ -306,11 +306,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'fe04635b125f29a98ac8a15decef3f6bf3eb9aa3', + 'skia_revision': '053490edfa703f3433d97a299ee80f2acc93de71', # 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': 'a7b74e0cfb1b4f57a04daafddc4b99ee65ac6925', + 'v8_revision': 'ba99d7f61f605e0c4c5131f01ff9d4fc36ab269b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. @@ -397,7 +397,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '86df0dbc1c17c368aea743d13c2633506c299fe8', + 'devtools_frontend_revision': '9ff9129a7e64c56dee0114654b6cd307a058ee49', # 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. @@ -1199,7 +1199,7 @@ Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'a7ff080ac0f4814640a0921bc9e0a1da4c419a0e', + 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '1295415c45c6fde572367bf071da3e01f543d209', 'condition': 'checkout_src_internal', }, @@ -1664,7 +1664,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '3e779d277b408b64778b247b824c5790072e428f', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'ff3b6318208109a97dc91f5f653edfca466d3cca', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1698,7 +1698,7 @@ }, 'src/third_party/re2/src': - Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + '7e0c1a9e2417e70e5f0efc323267ac71d1fa0685', + Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + '71857b0112ab6d9e1478f0212951c38c4a0ee1c8', 'src/third_party/r8': { 'packages': [ @@ -1849,7 +1849,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '7a6ef7301b5d84f751b483f9d5466b3696749c26', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '601ac2eea89a496ff32923aab0666376464eba8b', + Var('webrtc_git') + '/src.git' + '@' + '5fe4953d2bf1129285ada4c3f785071f01e0b5bb', # 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. @@ -3970,7 +3970,7 @@ 'src/components/resources/default_300_percent/google_chrome': { 'url': Var('chrome_git') + '/chrome/components/default_300_percent/google_chrome.git' + '@' + - '05693a3b542bca5bf9af6fe7057c07e52f68a477', + '964bb8e23a52f9ba63a53274ac6758e06ce7c7a3', 'condition': 'checkout_src_internal', }, @@ -4006,7 +4006,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - '53bb5db494be728395d42498edc5e395652b20f9', + 'd7b6b146f40ad1cfadbe95a3bf24e7efe3d9565e', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index fbeac1ff..c52d98d 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -1190,6 +1190,15 @@ [_THIRD_PARTY_EXCEPT_BLINK], # Don't warn in third_party folders. ), BanRule( + r'/\bstd::bit_cast\b', + ( + 'std::bit_cast is banned; use base::bit_cast instead for values and ' + 'standard C++ casting when pointers are involved.', + ), + True, + [_THIRD_PARTY_EXCEPT_BLINK], # Don't warn in third_party folders. + ), + BanRule( r'/\bstd::(c8rtomb|mbrtoc8)\b', ( 'std::c8rtomb() and std::mbrtoc8() are banned.',
diff --git a/android_webview/browser/aw_permission_manager.cc b/android_webview/browser/aw_permission_manager.cc index 8a1d2c9..b317281 100644 --- a/android_webview/browser/aw_permission_manager.cc +++ b/android_webview/browser/aw_permission_manager.cc
@@ -344,6 +344,7 @@ case PermissionType::LOCAL_FONTS: case PermissionType::DISPLAY_CAPTURE: case PermissionType::CAPTURED_SURFACE_CONTROL: + case PermissionType::SMART_CARD: NOTIMPLEMENTED() << "RequestPermissions is not implemented for " << static_cast<int>(permissions[i]); pending_request_raw->SetPermissionStatus(permissions[i], @@ -591,6 +592,7 @@ case PermissionType::LOCAL_FONTS: case PermissionType::DISPLAY_CAPTURE: case PermissionType::CAPTURED_SURFACE_CONTROL: + case PermissionType::SMART_CARD: NOTIMPLEMENTED() << "CancelPermission not implemented for " << static_cast<int>(permission); break;
diff --git a/ash/app_list/views/app_list_toast_view.cc b/ash/app_list/views/app_list_toast_view.cc index aa0289d..1631461 100644 --- a/ash/app_list/views/app_list_toast_view.cc +++ b/ash/app_list/views/app_list_toast_view.cc
@@ -66,8 +66,8 @@ cc::PaintFlags flags; flags.setStyle(cc::PaintFlags::kFill_Style); - flags.setColor(AshColorProvider::Get()->GetControlsLayerColor( - AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive)); + flags.setColor( + GetColorProvider()->GetColor(cros_tokens::kCrosSysSystemOnBase)); canvas->DrawRoundRect(GetContentsBounds(), kIconCornerRadius, flags); SkPath mask; mask.addRoundRect(gfx::RectToSkRect(GetContentsBounds()), kIconCornerRadius,
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 7b4185cf..fbb2f894 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -1318,7 +1318,7 @@ // Enables the ability to record the screen into an animated GIF image from the // native screen capture tool. -BASE_FEATURE(kGifRecording, "GifRecording", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kGifRecording, "GifRecording", base::FEATURE_ENABLED_BY_DEFAULT); // Enables a Files banner about Google One offer. BASE_FEATURE(kGoogleOneOfferFilesBanner,
diff --git a/ash/login/ui/login_auth_factors_view.cc b/ash/login/ui/login_auth_factors_view.cc index 9917ab5..e002cf1 100644 --- a/ash/login/ui/login_auth_factors_view.cc +++ b/ash/login/ui/login_auth_factors_view.cc
@@ -11,7 +11,7 @@ #include "ash/login/ui/lock_screen.h" #include "ash/resources/vector_icons/vector_icons.h" #include "ash/strings/grit/ash_strings.h" -#include "ash/style/ash_color_provider.h" +#include "ash/style/ash_color_id.h" #include "ash/style/dark_light_mode_controller_impl.h" #include "base/functional/callback.h" #include "base/logging.h" @@ -248,11 +248,6 @@ arrow_nudge_animation_ = arrow_icon_container_->AddChildView(std::make_unique<AuthIconView>()); - arrow_nudge_animation_->SetCircleImage( - kArrowButtonSizeDp / 2, - AshColorProvider::Get()->GetControlsLayerColor( - AshColorProvider::ControlsLayerType::kHairlineBorderColor)); - arrow_nudge_animation_->set_on_tap_or_click_callback(base::BindRepeating( &LoginAuthFactorsView::RelayArrowButtonPressed, base::Unretained(this))); @@ -517,6 +512,10 @@ for (const auto& factor : auth_factors_) { factor->OnThemeChanged(); } + + arrow_nudge_animation_->SetCircleImage( + kArrowButtonSizeDp / 2, + GetColorProvider()->GetColor(kColorAshHairlineBorderColor)); } void LoginAuthFactorsView::FireAlert() {
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sw.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sw.xtb index a77be20..ff91eb5 100644 --- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sw.xtb +++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sw.xtb
@@ -200,7 +200,7 @@ <translation id="8644639153978066712">Onyesha faili zilizofichwa katika programu ya Faili</translation> <translation id="8717459106217102612">Chagua neno au herufi ya awali</translation> <translation id="8727232706774971183">Angalia arifa zako</translation> -<translation id="8855548128280178372"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="SEARCH" /><ph name="SEPARATOR2" /> vitufe vya nambari moja hadi nane</translation> +<translation id="8855548128280178372"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="SEARCH" /><ph name="SEPARATOR2" /> vitufe vya namba moja hadi nane</translation> <translation id="8881584919399569791">Sogeza dirisha linalotumika kwenye kiolesura cha kushoto</translation> <translation id="88986195241502842">Ukurasa mmoja chini</translation> <translation id="8924883688469390268">Nenda kwenye mtumiaji wa awali</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index cd6c66d..d0751990 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">የስልክ ሃብን ለመጠቀም ብሉቱዝ በስልክዎ ላይ እንደነቃ ያረጋግጡ</translation> <translation id="5578188167649348993">ማህደረ ትውስታ</translation> <translation id="5580000943347215299">ቤተ-መጽሐፍት</translation> +<translation id="5587506661873751671">በማውረድ ላይ <ph name="DOWNLOAD_PERCENT" />%</translation> <translation id="558849140439112033">ለመቅረጽ አካባቢ ለመምረጥ ይጎትቱ</translation> <translation id="5590609058453685222">ድምጸ-ከል ማስታወቂያ በርቷል። ድምፀ-ከል ሆነው ሳለ ካወሩ ማሳወቂያ ይደርስዎታል።</translation> <translation id="5596627076506792578">ተጨማሪ አማራጮች</translation> @@ -1797,6 +1798,7 @@ <translation id="830868413617744215">ቅድመ-ይሁንታ</translation> <translation id="8314772463905284467">Caps Lock በርቷል</translation> <translation id="8315514906653279104">በማብራት ላይ...</translation> +<translation id="8331351032546853669">ማውረድ በመጠባበቅ ላይ</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> መስኮት ተመርጧል</translation> <translation id="8349826889576450703">ማስጀመሪያ</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 4378196..e4551a6 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">Βεβαιωθείτε ότι το Bluetooth είναι ενεργοποιημένο στο τηλέφωνό σας για να χρησιμοποιήσετε το Phone Hub.</translation> <translation id="5578188167649348993">μνήμη</translation> <translation id="5580000943347215299">Βιβλιοθήκη</translation> +<translation id="5587506661873751671">Λήψη <ph name="DOWNLOAD_PERCENT" />%</translation> <translation id="558849140439112033">Σύρετε, για να επιλέξετε μια περιοχή για λήψη</translation> <translation id="5590609058453685222">Η υπενθύμιση σίγασης είναι ενεργή. Θα ειδοποιηθείτε εάν μιλήσετε ενώ είστε σε σίγαση.</translation> <translation id="5596627076506792578">Περισσότερες επιλογές</translation> @@ -1796,6 +1797,7 @@ <translation id="830868413617744215">Beta</translation> <translation id="8314772463905284467">Το Caps Lock είναι ενεργοποιημένο</translation> <translation id="8315514906653279104">Ενεργοποίηση…</translation> +<translation id="8331351032546853669">Λήψη σε εκκρεμότητα</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">Επιλέχτηκε το παράθυρο <ph name="WINDOW_TITLE" />.</translation> <translation id="8349826889576450703">εφαρμογή εκκίνησης</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index e2fc159a..2f1805b6 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -1138,6 +1138,7 @@ <translation id="5577281275355252094">Phone Hubi kasutamiseks veenduge, et Bluetooth oleks teie telefonis lubatud</translation> <translation id="5578188167649348993">mälumaht</translation> <translation id="5580000943347215299">Kogu</translation> +<translation id="5587506661873751671">Allalaadimine: <ph name="DOWNLOAD_PERCENT" />%</translation> <translation id="558849140439112033">Lohistage jäädvustatava piirkonna valimiseks</translation> <translation id="5590609058453685222">Vaigistamise märguanne on sisse lülitatud. Teid teavitatakse, kui räägite vaigistatuna.</translation> <translation id="5596627076506792578">Rohkem valikuid</translation> @@ -1797,6 +1798,7 @@ <translation id="830868413617744215">Beeta</translation> <translation id="8314772463905284467">Suurtähelukk on sisse lülitatud</translation> <translation id="8315514906653279104">Sisselülitamine …</translation> +<translation id="8331351032546853669">Allalaadimine on ootel</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">Valitud on aken <ph name="WINDOW_TITLE" /></translation> <translation id="8349826889576450703">käivitaja</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb index a551081..74a07da 100644 --- a/ash/strings/ash_strings_km.xtb +++ b/ash/strings/ash_strings_km.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">ពិនិត្យមើលថាបានបើកប៊្លូធូសនៅលើទូរសព្ទរបស់អ្នក ដើម្បីប្រើមណ្ឌលទូរសព្ទ</translation> <translation id="5578188167649348993">អង្គចងចាំ</translation> <translation id="5580000943347215299">បណ្ណាល័យ</translation> +<translation id="5587506661873751671">កំពុងទាញយក <ph name="DOWNLOAD_PERCENT" />%</translation> <translation id="558849140439112033">អូសដើម្បីជ្រើសរើសផ្នែកណាមួយ ដើម្បីថត</translation> <translation id="5590609058453685222">ការរំលឹកប្រាប់ថាបិទសំឡេងត្រូវបានបើក។ អ្នកនឹងទទួលបានការជូនដំណឹង ប្រសិនបើអ្នកនិយាយ នៅពេលបិទសំឡេង។</translation> <translation id="5596627076506792578">ជម្រើសច្រើនទៀត</translation> @@ -1795,6 +1796,7 @@ <translation id="830868413617744215">បែតា</translation> <translation id="8314772463905284467">Caps Lock ត្រូវបានបើក</translation> <translation id="8315514906653279104">កំពុងបើក...</translation> +<translation id="8331351032546853669">កំពុងរង់ចាំទាញយក</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">បានជ្រើសរើសវិនដូ <ph name="WINDOW_TITLE" /></translation> <translation id="8349826889576450703">កម្មវិធីចាប់ផ្ដើម</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb index b7a08e0..45c72324 100644 --- a/ash/strings/ash_strings_my.xtb +++ b/ash/strings/ash_strings_my.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">'ဖုန်းစင်တာ' အသုံးပြုရန် သင့်ဖုန်းတွင် ဘလူးတုသ်ဖွင့်ထား၊ မထား စစ်ဆေးပါ</translation> <translation id="5578188167649348993">မှတ်ဉာဏ်</translation> <translation id="5580000943347215299">ဒစ်ဂျစ်တိုက်</translation> +<translation id="5587506661873751671"><ph name="DOWNLOAD_PERCENT" />% ကို ဒေါင်းလုဒ်လုပ်နေသည်</translation> <translation id="558849140439112033">ရိုက်ယူမည့်နေရာ ရွေးရန် ဖိဆွဲပါ</translation> <translation id="5590609058453685222">အသံပိတ်ထားကြောင်း သတိပေးနှိုးဆော်ချက် ဖွင့်ထားသည်။ အသံပိတ်ထားစဉ် စကားပြောဆိုပါက သင့်ကိုအကြောင်းကြားပါမည်။</translation> <translation id="5596627076506792578">ပိုမို ရွေးချယ်စရာများ</translation> @@ -1796,6 +1797,7 @@ <translation id="830868413617744215">စမ်းသပ်ဆဲ</translation> <translation id="8314772463905284467">‘စာလုံးကြီးလော့ခ်’ ဖွင့်ထားသည်</translation> <translation id="8315514906653279104">ဖွင့်နေသည်...</translation> +<translation id="8331351032546853669">ဒေါင်းလုဒ် ဆိုင်းငံ့ထားသည်</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ဝင်းဒိုးကို ရွေးထားသည်</translation> <translation id="8349826889576450703">Launcher</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index ad2ad1d..1907fe1 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">Sjekk at Bluetooth er påslått på telefonen, for å bruke Telefonstyring</translation> <translation id="5578188167649348993">minne</translation> <translation id="5580000943347215299">Bibliotek</translation> +<translation id="5587506661873751671">Laster ned <ph name="DOWNLOAD_PERCENT" /> %</translation> <translation id="558849140439112033">Dra for å velge området du vil ta bilde av</translation> <translation id="5590609058453685222">Varsel om avslått mikrofon er på. Du blir varslet hvis du snakker mens mikrofonen er avslått.</translation> <translation id="5596627076506792578">Flere alternativer</translation> @@ -1796,6 +1797,7 @@ <translation id="830868413617744215">Beta</translation> <translation id="8314772463905284467">Caps Lock er på</translation> <translation id="8315514906653279104">Slår på …</translation> +<translation id="8331351032546853669">Nedlasting venter</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /><ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">Vinduet <ph name="WINDOW_TITLE" /> er valgt</translation> <translation id="8349826889576450703">appoversikt</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 27aa357..b1de3b6 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">Ak chcete použiť Telefónne centrum, skontrolujte, či je v telefóne zapnuté rozhranie Bluetooth</translation> <translation id="5578188167649348993">pamäť</translation> <translation id="5580000943347215299">Knižnica</translation> +<translation id="5587506661873751671">Sťahuje sa (<ph name="DOWNLOAD_PERCENT" /> %)</translation> <translation id="558849140439112033">Presunutím vyberte oblasť, ktorú chcete nasnímať</translation> <translation id="5590609058453685222">Upozornenia na vypnutý mikrofón je zapnuté. Ak budete hovoriť s vypnutým zvukom, dostanete upozornenie.</translation> <translation id="5596627076506792578">Ďalšie možnosti</translation> @@ -1796,6 +1797,7 @@ <translation id="830868413617744215">Beta</translation> <translation id="8314772463905284467">Kláves Caps Lock je zapnutý</translation> <translation id="8315514906653279104">Zapína sa…</translation> +<translation id="8331351032546853669">Čaká sa na stiahnutie</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">Bolo vybrané okno <ph name="WINDOW_TITLE" /></translation> <translation id="8349826889576450703">spúšťač</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index 13d823f..88e7d16 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -3,7 +3,7 @@ <translationbundle lang="sw"> <translation id="1012876632442809908">Kifaa cha USB-C (mlango wa mbele)</translation> <translation id="1013598600051641573"><ph name="DISPLAY_NAME" /> imebadilika kuwa <ph name="RESOLUTION" /> (Hz <ph name="REFRESH_RATE" />). Bofya 'thibitisha' ili uhifadhi mabadiliko. Mipangilio ya awali itarejeshwa baada ya <ph name="TIMEOUT_SECONDS" />.</translation> -<translation id="1013923882670373915">Kifaa cha Bluetooth cha "<ph name="DEVICE_NAME" />" kinaomba idhini ya kuoanisha. Tafadhali weka nambari hii ya PIN kwenye kifaa hicho: <ph name="PINCODE" /></translation> +<translation id="1013923882670373915">Kifaa cha Bluetooth cha "<ph name="DEVICE_NAME" />" kinaomba idhini ya kuoanisha. Tafadhali weka namba hii ya PIN kwenye kifaa hicho: <ph name="PINCODE" /></translation> <translation id="1014722676793506285">Hatua hii huruhusu <ph name="APP_NAME" />, programu na tovuti zote zilizo na ruhusa ya mahali na ChromeOS kutumia data ya mahali ya Wi-Fi na mitandao ya simu.</translation> <translation id="1017556409696559990">Punguza dirisha la juu kukiwa hakuna historia ya kuvinjari kwenye Chrome</translation> <translation id="1024364763893396229">Hifadhi <ph name="NAME" /> yako</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index 06256f77..755869b8 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">Щоб користуватися функцією "Керування телефоном", переконайтеся, що на пристрої ввімкнено Bluetooth</translation> <translation id="5578188167649348993">пам’ять</translation> <translation id="5580000943347215299">Бібліотека</translation> +<translation id="5587506661873751671">Завантажується (<ph name="DOWNLOAD_PERCENT" />%)</translation> <translation id="558849140439112033">Потягніть, щоб вибрати область, знімок якої потрібно зробити</translation> <translation id="5590609058453685222">Нагадування про вимкнений мікрофон увімкнено. Якщо ви говоритимете в режимі "Без звуку", то отримаєте сповіщення.</translation> <translation id="5596627076506792578">Інші опції</translation> @@ -1796,6 +1797,7 @@ <translation id="830868413617744215">Бета-версія</translation> <translation id="8314772463905284467">Режим Caps Lock увімкнено</translation> <translation id="8315514906653279104">Увімкнення…</translation> +<translation id="8331351032546853669">Очікує на завантаження</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">Вибрано вікно "<ph name="WINDOW_TITLE" />"</translation> <translation id="8349826889576450703">панель запуску</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index a27b40a..b2759ca9 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -1137,6 +1137,7 @@ <translation id="5577281275355252094">Bạn phải bật Bluetooth trên điện thoại thì mới sử dụng được Trung tâm điều khiển điện thoại</translation> <translation id="5578188167649348993">bộ nhớ</translation> <translation id="5580000943347215299">Thư viện</translation> +<translation id="5587506661873751671">Đang tải xuống <ph name="DOWNLOAD_PERCENT" />%</translation> <translation id="558849140439112033">Kéo để chọn một vùng sẽ chụp</translation> <translation id="5590609058453685222">Tính năng Lời nhắc về micrô bị tắt đang bật. Bạn sẽ nhận được thông báo nếu bạn nói trong khi tắt tiếng.</translation> <translation id="5596627076506792578">Tùy chọn khác</translation> @@ -1796,6 +1797,7 @@ <translation id="830868413617744215">Beta</translation> <translation id="8314772463905284467">Đang bật Caps Lock</translation> <translation id="8315514906653279104">Đang bật...</translation> +<translation id="8331351032546853669">Đang chờ tải xuống</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">Đã chọn cửa sổ <ph name="WINDOW_TITLE" /></translation> <translation id="8349826889576450703">trình khởi chạy</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb index 3e6545b8..ddf0162 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">ሙሉ ጥራት</translation> <translation id="4864143361253542638">የተቃኘ የገፅ ዝርዝር</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">የአገናኝ አድራሻን ቅዳ <ph name="URL" /></translation> <translation id="491895758387112773">ባለ-ብዙ ዥረት ቪዲዮ ቀረፃ</translation> <translation id="495170559598752135">እርምጃዎች</translation> <translation id="4984613436295737187">ኳድ ኤችዲ (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">ጽሁፍ ገልብጧል</translation> <translation id="7488619942230388918">የጂአይኤፍ ቪዲዮን ይቅረጹ</translation> <translation id="7557677699350329807">ወደ ቀጣዩ ካሜራ ቀይር</translation> +<translation id="7562584071994185503"><ph name="TEXT" /> ጽሑፍን ቅዳ</translation> <translation id="7607002721634913082">ለአፍታ ቆሟል</translation> <translation id="7608223098072244877">4 በ 4</translation> <translation id="761421184377987513">ወደ ታች-ግራ አቅጣጫ በመንቀሳቀስ ላይ</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">በካሜራ ኤችኤኤል የተመጣጠኑ ክፈፎች</translation> <translation id="8425673304802773841">ወደ ታች አጋድል</translation> <translation id="8428213095426709021">ቅንብሮች</translation> +<translation id="8609951387004618906"><ph name="URL" /> ይክፈቱ</translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">የማይክሮፎን ድምጸ-ከል መቀያየሪያ ድምጸ-ከል በርቷል</translation> <translation id="8730621377337864115">ተከናውኗል</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_be.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_be.xtb index 1126e23..2ca3f2e9 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_be.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_be.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Поўная раздзяляльнасць</translation> <translation id="4864143361253542638">Адсканіраваныя старонкі ў выглядзе спіса</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Скапіраваць адрас спасылкі (<ph name="URL" />)</translation> <translation id="491895758387112773">Відэазапіс некалькіх плыней</translation> <translation id="495170559598752135">Дзеянні</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Тэкст скапіраваны</translation> <translation id="7488619942230388918">Запісаць відэа ў фармаце GIF</translation> <translation id="7557677699350329807">Пераключыцца на наступную камеру</translation> +<translation id="7562584071994185503">Скапіраваць тэкст (<ph name="TEXT" />)</translation> <translation id="7607002721634913082">Прыпынена</translation> <translation id="7608223098072244877">4 на 4</translation> <translation id="761421184377987513">Перамяшчаецца ўлева ўніз</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Маштабаванне кадраў камеры HAL</translation> <translation id="8425673304802773841">Нахіліць уніз</translation> <translation id="8428213095426709021">Налады</translation> +<translation id="8609951387004618906">Адкрыць <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Уключыць або выключыць мікрафон. Мікрафон выключаны</translation> <translation id="8730621377337864115">Гатова</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_hu.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_hu.xtb index 6f4c79b23..ea310bf 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_hu.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_hu.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Teljes felbontás</translation> <translation id="4864143361253542638">Beszkennelt oldalak listája</translation> <translation id="4890010094662541459">3 × 3</translation> +<translation id="4892746741161549733">Link címének másolása (<ph name="URL" />)</translation> <translation id="491895758387112773">Multi-stream videó rögzítése</translation> <translation id="495170559598752135">Műveletek</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Szöveg vágólapra másolva</translation> <translation id="7488619942230388918">GIF-videó rögzítése</translation> <translation id="7557677699350329807">Váltás a következő kamerára</translation> +<translation id="7562584071994185503">Szöveg másolása (<ph name="TEXT" />)</translation> <translation id="7607002721634913082">Szünet</translation> <translation id="7608223098072244877">Négyszer négyes</translation> <translation id="761421184377987513">Mozgatás a bal alsó sarok irányába</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Keretek átméretezése a Kamera HAL által</translation> <translation id="8425673304802773841">Billentés lefelé</translation> <translation id="8428213095426709021">Beállítások</translation> +<translation id="8609951387004618906"><ph name="URL" /> megnyitása</translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Némítsa el a mikrofont. A némítás be van kapcsolva.</translation> <translation id="8730621377337864115">Kész</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_is.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_is.xtb index 068181e..c63d4fa 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_is.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_is.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Full upplausn</translation> <translation id="4864143361253542638">Listi yfir skannaðar síður</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Afrita slóð tengils <ph name="URL" /></translation> <translation id="491895758387112773">Myndupptaka af mörgum straumum í einu</translation> <translation id="495170559598752135">Aðgerðir</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Texti afritaður</translation> <translation id="7488619942230388918">Taka upp GIF-vídeó</translation> <translation id="7557677699350329807">Skipta yfir í næstu myndavél</translation> +<translation id="7562584071994185503">Afrita texta <ph name="TEXT" /></translation> <translation id="7607002721634913082">Hlé</translation> <translation id="7608223098072244877">4 sinnum 4</translation> <translation id="761421184377987513">Færist niður og til vinstri</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Aðlaga ramma frá HAL myndavélar</translation> <translation id="8425673304802773841">Halla niður</translation> <translation id="8428213095426709021">Stillingar</translation> +<translation id="8609951387004618906">Opna <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Kveikja/slökkva á hljóðnema. Kveikt er á þöggun</translation> <translation id="8730621377337864115">Lokið</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb index ba93feb..c7dcada 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">កម្រិតគុណភាពពេញលេញ</translation> <translation id="4864143361253542638">បញ្ជីទំព័រស្កេន</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">ចម្លងអាសយដ្ឋានតំណ <ph name="URL" /></translation> <translation id="491895758387112773">ផ្សាយការថតវីដេអូទៅបណ្ដាញច្រើន</translation> <translation id="495170559598752135">សកម្មភាព</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">បានចម្លងអត្ថបទ</translation> <translation id="7488619942230388918">ថតវីដេអូ GIF</translation> <translation id="7557677699350329807">ប្ដូរទៅកាមេរ៉ាបន្ទាប់</translation> +<translation id="7562584071994185503">ចម្លងអក្សរ <ph name="TEXT" /></translation> <translation id="7607002721634913082">បានផ្អាក</translation> <translation id="7608223098072244877">4 គុណនឹង 4</translation> <translation id="761421184377987513">កំពុងផ្លាស់ទីក្នុងទិសដៅខាងឆ្វេងផ្នែកខាងក្រោម</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">កំណត់មាត្រដ្ឋានស៊ុមដោយ Camera HAL</translation> <translation id="8425673304802773841">ផ្អៀងចុះក្រោម</translation> <translation id="8428213095426709021">ការកំណត់</translation> +<translation id="8609951387004618906">បើក <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">ប៊ូតុងបិទ/បើកសំឡេងមីក្រូហ្វូន។ ការបិទសំឡេងត្រូវបានបើក</translation> <translation id="8730621377337864115">រួចរាល់</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_ms.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_ms.xtb index 8c05046..9c60dee 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_ms.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_ms.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Peleraian penuh</translation> <translation id="4864143361253542638">Senarai halaman yang diimbas</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Salin alamat pautan <ph name="URL" /></translation> <translation id="491895758387112773">Rakaman video berbilang strim</translation> <translation id="495170559598752135">Tindakan</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Teks disalin</translation> <translation id="7488619942230388918">Rakam video GIF</translation> <translation id="7557677699350329807">Beralih kepada kamera seterusnya</translation> +<translation id="7562584071994185503">Salin teks <ph name="TEXT" /></translation> <translation id="7607002721634913082">Dijeda</translation> <translation id="7608223098072244877">4 kali 4</translation> <translation id="761421184377987513">Bergerak ke arah kiri sebelah bawah</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Bingkai skala oleh Camera HAL</translation> <translation id="8425673304802773841">Condongkan ke bawah</translation> <translation id="8428213095426709021">Tetapan</translation> +<translation id="8609951387004618906">Buka <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Togol redam mikrofon. Redam dihidupkan</translation> <translation id="8730621377337864115">Selesai</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_my.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_my.xtb index 245a743e..c0119e1 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_my.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_my.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">ပုံရိပ်ပြတ်သားကိန်း အပြည့်</translation> <translation id="4864143361253542638">စကင်လုပ်ထားသည့် စာမျက်နှာစာရင်း</translation> <translation id="4890010094662541459">၃ x ၃</translation> +<translation id="4892746741161549733"><ph name="URL" /> လင့်ခ်လိပ်စာကို မိတ္တူကူးရန်</translation> <translation id="491895758387112773">ဗီဒီယိုရိုက်ကူးမှုကို စနစ်အမျိုးမျိုးတွင် ထုတ်လွှင့်ခြင်း</translation> <translation id="495170559598752135">လုပ်ဆောင်ချက်များ</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">စာသားကူးယူပြီးပါပြီ</translation> <translation id="7488619942230388918">GIF ဗီဒီယို ရိုက်ကူးရန်</translation> <translation id="7557677699350329807">ကင်မရာနောက်တစ်ခုသို့ ပြောင်းရန်</translation> +<translation id="7562584071994185503"><ph name="TEXT" /> စာသားကို မိတ္တူကူးရန်</translation> <translation id="7607002721634913082">ဆိုင်းငံ့ထား</translation> <translation id="7608223098072244877">အလျား ၄၊ အနံ ၄</translation> <translation id="761421184377987513">ဘယ်ဘက် အောက်ခြေ ဦးတည်ချက်အတိုင်း ရွေ့နေသည်</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Camera HAL ၏ စကေး ဖရိမ်များ</translation> <translation id="8425673304802773841">အောက်သို့ စောင်းရန်</translation> <translation id="8428213095426709021">ဆက်တင်များ</translation> +<translation id="8609951387004618906"><ph name="URL" /> ဖွင့်ရန်</translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">မိုက်ခရိုဖုန်း အသံပိတ် ခလုတ်။ အသံတိတ်ခြင်း ဖွင့်</translation> <translation id="8730621377337864115">ပြီးပါပြီ</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb index 880a372..8463861 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Resolução máxima</translation> <translation id="4864143361253542638">Lista de páginas digitalizadas</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Copiar endereço do link <ph name="URL" /></translation> <translation id="491895758387112773">Fazer multistreaming da gravação de vídeo</translation> <translation id="495170559598752135">Ações</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Texto copiado</translation> <translation id="7488619942230388918">Gravar um GIF</translation> <translation id="7557677699350329807">Mudar para a próxima câmera</translation> +<translation id="7562584071994185503">Copiar texto "<ph name="TEXT" />"</translation> <translation id="7607002721634913082">Pausado</translation> <translation id="7608223098072244877">4 por 4</translation> <translation id="761421184377987513">Movendo para o canto esquerdo de baixo</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Dimensionar frames pela HAL da câmera</translation> <translation id="8425673304802773841">Inclinar para baixo</translation> <translation id="8428213095426709021">Configurações</translation> +<translation id="8609951387004618906">Abrir <ph name="URL" /></translation> <translation id="8629662593426079630">360 p</translation> <translation id="8711011893539266636">Alterne o status do microfone. O microfone está desativado</translation> <translation id="8730621377337864115">Concluído</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb index 0d70e91..389e812 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Resolução total</translation> <translation id="4864143361253542638">Lista de páginas digitalizadas</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Copiar endereço do link <ph name="URL" /></translation> <translation id="491895758387112773">Gravação de vídeo multistream</translation> <translation id="495170559598752135">Ações</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Texto copiado</translation> <translation id="7488619942230388918">Gravar vídeo GIF</translation> <translation id="7557677699350329807">Mudar para a câmara seguinte</translation> +<translation id="7562584071994185503">Copiar texto <ph name="TEXT" /></translation> <translation id="7607002721634913082">Em pausa</translation> <translation id="7608223098072244877">4 por 4</translation> <translation id="761421184377987513">A mover para o canto inferior esquerdo</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Escalar os frames pela HAL da Câmara</translation> <translation id="8425673304802773841">Inclinar para baixo</translation> <translation id="8428213095426709021">Definições</translation> +<translation id="8609951387004618906">Abrir <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Ative/desative o som do microfone. O botão Desativar som está ativado</translation> <translation id="8730621377337864115">Concluído</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_sk.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_sk.xtb index e24cce2..bec9edd 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_sk.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_sk.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Plné rozlíšenie</translation> <translation id="4864143361253542638">Zoznam naskenovaných strán</translation> <translation id="4890010094662541459">3 × 3</translation> +<translation id="4892746741161549733">Kopírovať adresu odkazu <ph name="URL" /></translation> <translation id="491895758387112773">Streamovať záznam videa vo viacerých platformách</translation> <translation id="495170559598752135">Akcie</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Text bol skopírovaný</translation> <translation id="7488619942230388918">Nahrať video typu gif</translation> <translation id="7557677699350329807">Prepnúť na ďalší fotoaparát</translation> +<translation id="7562584071994185503">Kopírovať text <ph name="TEXT" /></translation> <translation id="7607002721634913082">Pozastavené</translation> <translation id="7608223098072244877">4 na 4</translation> <translation id="761421184377987513">Presúvate doľava nadol</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Zmeniť veľkosť snímok podľa vrstvy HAL kamery</translation> <translation id="8425673304802773841">Naklonenie nadol</translation> <translation id="8428213095426709021">Nastavenia</translation> +<translation id="8609951387004618906">Otvoriť <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Prepínač vypnutia zvuku mikrofónu. Zvuk je vypnutý.</translation> <translation id="8730621377337864115">Hotovo</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb index ce6b2def..8417869 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_te.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">పూర్తి రిజల్యూషన్</translation> <translation id="4864143361253542638">స్కాన్ చేసిన పేజీ లిస్ట్</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733"><ph name="URL" /> లింక్ అడ్రస్ను కాపీ చేయండి</translation> <translation id="491895758387112773">మల్టీస్ట్రీమ్ వీడియో రికార్డింగ్</translation> <translation id="495170559598752135">చర్యలు</translation> <translation id="4984613436295737187">క్వాడ్ HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">టెక్స్ట్ కాపీ చేయబడింది</translation> <translation id="7488619942230388918">GIF వీడియోను రికార్డ్ చేయండి</translation> <translation id="7557677699350329807">తర్వాతి కెమెరాకు మార్చు</translation> +<translation id="7562584071994185503"><ph name="TEXT" /> టెక్స్ట్ను కాపీ చేయండి</translation> <translation id="7607002721634913082">పాజ్ చేయబడింది</translation> <translation id="7608223098072244877">4 బై 4</translation> <translation id="761421184377987513">దిగువ-ఎడమ వైపునకు కదులుతోంది</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">కెమెరా HAL ద్వారా ఫ్రేమ్లను స్కేల్ చేయండి</translation> <translation id="8425673304802773841">కిందికి టిల్ట్ చేయి</translation> <translation id="8428213095426709021">సెట్టింగ్లు</translation> +<translation id="8609951387004618906"><ph name="URL" />ను తెరవండి</translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">మైక్రోఫోన్ను మ్యూట్కు టోగుల్ చేయండి. మ్యూట్ ఆన్లో ఉంది</translation> <translation id="8730621377337864115">పూర్తయింది</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb index b1afb5b..d17b8845 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Максимальна роздільна здатність</translation> <translation id="4864143361253542638">Список сканованих сторінок</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Копіювати адресу посилання <ph name="URL" /></translation> <translation id="491895758387112773">Багатопотоковий відеозапис</translation> <translation id="495170559598752135">Дії</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Текст скопійовано</translation> <translation id="7488619942230388918">Записати відео у форматі GIF</translation> <translation id="7557677699350329807">Перемкнутися на наступну камеру</translation> +<translation id="7562584071994185503">Копіювати текст "<ph name="TEXT" />"</translation> <translation id="7607002721634913082">Призупинено</translation> <translation id="7608223098072244877">4 на 4</translation> <translation id="761421184377987513">Переміщення вниз і вліво</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Масштабувати фрейми за допомогою HAL камери</translation> <translation id="8425673304802773841">Нахилити донизу</translation> <translation id="8428213095426709021">Налаштування</translation> +<translation id="8609951387004618906">Відкрити посилання <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Увімкнути або вимкнути мікрофон. Мікрофон вимкнено</translation> <translation id="8730621377337864115">Готово</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_uz.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_uz.xtb index 2898efe..7a59c5fd 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_uz.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_uz.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Asl hajmida</translation> <translation id="4864143361253542638">Skanerlangan sahifalar roʻyxati</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Havola manzilini nusxalash: <ph name="URL" /></translation> <translation id="491895758387112773">Multistrim video yozib olinishi</translation> <translation id="495170559598752135">Harakatlar</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Matn nusxalandi</translation> <translation id="7488619942230388918">GIF video yozib olish</translation> <translation id="7557677699350329807">Keyingi kameraga almashtirish</translation> +<translation id="7562584071994185503">Matnni nusxalash: <ph name="TEXT" /></translation> <translation id="7607002721634913082">Vaqtincha to‘xtatildi</translation> <translation id="7608223098072244877">4 ga 4</translation> <translation id="761421184377987513">Pastga va chapga surish</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">HAL kamerasi yordamida freymlarni masshtablash</translation> <translation id="8425673304802773841">Pastga qiyalang</translation> <translation id="8428213095426709021">Sozlamalar</translation> +<translation id="8609951387004618906">Ochish: <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Mikrofonni ovozsiz qilish. Ovozsiz qilindi</translation> <translation id="8730621377337864115">Tayyor</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_vi.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_vi.xtb index 51ca659..43039bb6 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_vi.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_vi.xtb
@@ -78,6 +78,7 @@ <translation id="4705093842003735294">Độ phân giải đầy đủ</translation> <translation id="4864143361253542638">Danh sách trang đã quét</translation> <translation id="4890010094662541459">3 x 3</translation> +<translation id="4892746741161549733">Sao chép địa chỉ đường liên kết <ph name="URL" /></translation> <translation id="491895758387112773">Quay video phát trực tuyến đa luồng</translation> <translation id="495170559598752135">Tác vụ</translation> <translation id="4984613436295737187">Quad HD (1440p)</translation> @@ -129,6 +130,7 @@ <translation id="7450541714075000668">Đã sao chép văn bản</translation> <translation id="7488619942230388918">Quay video dạng GIF</translation> <translation id="7557677699350329807">Chuyển sang máy ảnh tiếp theo</translation> +<translation id="7562584071994185503">Sao chép văn bản <ph name="TEXT" /></translation> <translation id="7607002721634913082">Đã tạm dừng</translation> <translation id="7608223098072244877">4 x 4</translation> <translation id="761421184377987513">Đang di chuyển theo hướng xuống dưới và sang trái</translation> @@ -150,6 +152,7 @@ <translation id="8346544573713510785">Điều chỉnh tỷ lệ khung hình bằng lớp trừu tượng phần cứng (HAL) cho máy ảnh</translation> <translation id="8425673304802773841">Xoay xuống</translation> <translation id="8428213095426709021">Cài đặt</translation> +<translation id="8609951387004618906">Mở <ph name="URL" /></translation> <translation id="8629662593426079630">360p</translation> <translation id="8711011893539266636">Bật/tắt micrô. Chế độ tắt tiếng đang bật</translation> <translation id="8730621377337864115">Xong</translation>
diff --git a/base/BUILD.gn b/base/BUILD.gn index 8ffc1ad..e54d9ff 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -4376,6 +4376,7 @@ "android/java/src/org/chromium/base/UnownedUserDataKey.java", "android/java/src/org/chromium/base/UserData.java", "android/java/src/org/chromium/base/UserDataHost.java", + "android/java/src/org/chromium/base/ValueChangedCallback.java", "android/java/src/org/chromium/base/WrappedClassLoader.java", "android/java/src/org/chromium/base/compat/ApiHelperForM.java", "android/java/src/org/chromium/base/compat/ApiHelperForN.java", @@ -4780,6 +4781,7 @@ "android/junit/src/org/chromium/base/TraceEventTest.java", "android/junit/src/org/chromium/base/UnownedUserDataHostTest.java", "android/junit/src/org/chromium/base/UnownedUserDataKeyTest.java", + "android/junit/src/org/chromium/base/ValueChangedCallbackTest.java", "android/junit/src/org/chromium/base/jank_tracker/FrameMetricsListenerTest.java", "android/junit/src/org/chromium/base/jank_tracker/FrameMetricsStoreTest.java", "android/junit/src/org/chromium/base/jank_tracker/JankActivityTrackerTest.java",
diff --git a/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn b/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn index f5d28b3..5348ddf 100644 --- a/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn +++ b/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn
@@ -599,6 +599,7 @@ sources = [ "partition_alloc_base/atomic_ref_count.h", "partition_alloc_base/augmentations/compiler_specific.h", + "partition_alloc_base/bit_cast.h", "partition_alloc_base/bits.h", "partition_alloc_base/check.cc", "partition_alloc_base/check.h",
diff --git a/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/bit_cast.h b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/bit_cast.h new file mode 100644 index 0000000..0918a56 --- /dev/null +++ b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/bit_cast.h
@@ -0,0 +1,48 @@ +// Copyright 2016 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_SRC_PARTITION_ALLOC_PARTITION_ALLOC_BASE_BIT_CAST_H_ +#define BASE_ALLOCATOR_PARTITION_ALLOCATOR_SRC_PARTITION_ALLOC_PARTITION_ALLOC_BASE_BIT_CAST_H_ + +#include <type_traits> + +#include "partition_alloc/partition_alloc_base/compiler_specific.h" + +#if !PA_HAS_BUILTIN(__builtin_bit_cast) +#include <string.h> // memcpy +#endif + +namespace partition_alloc::internal::base { + +// This is C++20's std::bit_cast<>(). +// It morally does what `*reinterpret_cast<Dest*>(&source)` does, but the +// cast/deref pair is undefined behavior, while bit_cast<>() isn't. +template <class Dest, class Source> +#if PA_HAS_BUILTIN(__builtin_bit_cast) +constexpr +#else +inline +#endif + Dest + bit_cast(const Source& source) { +#if PA_HAS_BUILTIN(__builtin_bit_cast) + // TODO(thakis): Keep only this codepath once nacl is gone or updated. + return __builtin_bit_cast(Dest, source); +#else + static_assert(sizeof(Dest) == sizeof(Source), + "bit_cast requires source and destination to be the same size"); + static_assert(std::is_trivially_copyable_v<Dest>, + "bit_cast requires the destination type to be copyable"); + static_assert(std::is_trivially_copyable_v<Source>, + "bit_cast requires the source type to be copyable"); + + Dest dest; + memcpy(&dest, &source, sizeof(dest)); + return dest; +#endif +} + +} // namespace partition_alloc::internal::base + +#endif // BASE_ALLOCATOR_PARTITION_ALLOCATOR_SRC_PARTITION_ALLOC_PARTITION_ALLOC_BASE_BIT_CAST_H_
diff --git a/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/time/time_win.cc b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/time/time_win.cc index bdf96f76..0958c37 100644 --- a/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/time/time_win.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/time/time_win.cc
@@ -40,9 +40,9 @@ #include <stdint.h> #include <atomic> -#include <bit> #include "build/build_config.h" +#include "partition_alloc/partition_alloc_base/bit_cast.h" #include "partition_alloc/partition_alloc_base/check.h" #include "partition_alloc/partition_alloc_base/cpu.h" #include "partition_alloc/partition_alloc_base/threading/platform_thread.h" @@ -58,7 +58,7 @@ // Need to bit_cast to fix alignment, then divide by 10 to convert // 100-nanoseconds to microseconds. This only works on little-endian // machines. - return std::bit_cast<int64_t, FILETIME>(ft) / 10; + return bit_cast<int64_t, FILETIME>(ft) / 10; } bool CanConvertToFileTime(int64_t us) { @@ -72,7 +72,7 @@ // Multiply by 10 to convert microseconds to 100-nanoseconds. Bit_cast will // handle alignment problems. This only works on little-endian machines. - return std::bit_cast<FILETIME, int64_t>(us * 10); + return bit_cast<FILETIME, int64_t>(us * 10); } int64_t CurrentWallclockMicroseconds() { @@ -147,7 +147,7 @@ // static Time Time::FromFileTime(FILETIME ft) { - if (std::bit_cast<int64_t, FILETIME>(ft) == 0) { + if (bit_cast<int64_t, FILETIME>(ft) == 0) { return Time(); } if (ft.dwHighDateTime == std::numeric_limits<DWORD>::max() && @@ -159,7 +159,7 @@ FILETIME Time::ToFileTime() const { if (is_null()) { - return std::bit_cast<FILETIME, int64_t>(0); + return bit_cast<FILETIME, int64_t>(0); } if (is_max()) { FILETIME result;
diff --git a/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_cast.h b/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_cast.h index 35324c8..50e5805 100644 --- a/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_cast.h +++ b/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_cast.h
@@ -5,9 +5,18 @@ #ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_SRC_PARTITION_ALLOC_POINTERS_RAW_PTR_CAST_H_ #define BASE_ALLOCATOR_PARTITION_ALLOCATOR_SRC_PARTITION_ALLOC_POINTERS_RAW_PTR_CAST_H_ -#include <bit> #include <memory> + #include <type_traits> +#if defined(__has_builtin) +#define PA_RAWPTR_CAST_USE_BUILTIN_BIT_CAST __has_builtin(__builtin_bit_cast) +#else +#define PA_RAWPTR_CAST_USE_BUILTIN_BIT_CAST 0 +#endif + +#if !PA_RAWPTR_CAST_USE_BUILTIN_BIT_CAST +#include <cstring> +#endif // This header is explicitly allowlisted from a clang plugin rule at // "tools/clang/plugins/FindBadRawPtrPatterns.cpp". You can bypass these checks @@ -28,9 +37,31 @@ } // Wrapper for |std::bit_cast<T>(src)|. +// Though we have similar implementations at |absl::bit_cast| and +// |base::bit_cast|, it is important to perform casting in this file to +// correctly exclude from the check. template <typename Dest, typename Source> -inline constexpr Dest unsafe_raw_ptr_bit_cast(const Source& source) noexcept { - return std::bit_cast<Dest>(source); +#if PA_RAWPTR_CAST_USE_BUILTIN_BIT_CAST +inline constexpr std::enable_if_t<sizeof(Dest) == sizeof(Source) && + std::is_trivially_copyable_v<Dest> && + std::is_trivially_copyable_v<Source>, + Dest> +#else +inline std::enable_if_t<sizeof(Dest) == sizeof(Source) && + std::is_trivially_copyable_v<Dest> && + std::is_trivially_copyable_v<Source> && + std::is_default_constructible_v<Dest>, + Dest> +#endif // PA_RAWPTR_CAST_USE_BUILTIN_BIT_CAST +unsafe_raw_ptr_bit_cast(const Source& source) noexcept { + // TODO(mikt): Replace this with |std::bit_cast<T>| when C++20 arrives. +#if PA_RAWPTR_CAST_USE_BUILTIN_BIT_CAST + return __builtin_bit_cast(Dest, source); +#else + Dest dest; + memcpy(std::addressof(dest), std::addressof(source), sizeof(dest)); + return dest; +#endif // PA_RAWPTR_CAST_USE_BUILTIN_BIT_CAST } } // namespace base
diff --git a/base/allocator/partition_allocator/src/partition_alloc/thread_cache.h b/base/allocator/partition_allocator/src/partition_alloc/thread_cache.h index daecd69..a0aeddf 100644 --- a/base/allocator/partition_allocator/src/partition_alloc/thread_cache.h +++ b/base/allocator/partition_allocator/src/partition_alloc/thread_cache.h
@@ -616,13 +616,10 @@ static const uint32_t poison_16_bytes[4] = {0xbadbad00, 0xbadbad00, 0xbadbad00, 0xbadbad00}; - // Give a hint to the compiler in hope it'll vectorize the loop. -#if PA_HAS_BUILTIN(__builtin_assume_aligned) - void* slot_start_tagged = __builtin_assume_aligned( - internal::SlotStartAddr2Ptr(slot_start), internal::kAlignment); -#else - void* slot_start_tagged = internal::SlotStartAddr2Ptr(slot_start); -#endif + + void* slot_start_tagged = std::assume_aligned<internal::kAlignment>( + internal::SlotStartAddr2Ptr(slot_start)); + uint32_t* address_aligned = static_cast<uint32_t*>(slot_start_tagged); for (int i = 0; i < slot_size_remaining_in_16_bytes; i++) { // Clang will expand the memcpy to a 16-byte write (movups on x86).
diff --git a/base/android/java/src/org/chromium/base/ValueChangedCallback.java b/base/android/java/src/org/chromium/base/ValueChangedCallback.java new file mode 100644 index 0000000..4317cf6 --- /dev/null +++ b/base/android/java/src/org/chromium/base/ValueChangedCallback.java
@@ -0,0 +1,60 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.base; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.chromium.base.supplier.ObservableSupplier; + +import java.util.Objects; + +/** + * A callback adapter that caches the last value and supplies both the last and current result to + * the {@link ValueChangedObserver}. + * + * <p>This is useful where cleanup needs to be done using the old value before switching to the new + * value. For example, unregistering observers from the old value and registering them on a new + * value. This is particularly useful {@link ObservableSupplier}. + * + * @param <T> The type to observe. + */ +public class ValueChangedCallback<T> implements Callback<T> { + /** + * Interface for observers that care about monitoring both the old and new values when a + * callback is invoked. + * + * @param <T> The type to observe. + */ + @FunctionalInterface + public interface ValueChangedObserver<T> { + /** + * Called when the {@link Callback} is invoked with both new and old values. + * + * @param newValue The new value. + * @param oldValue The previous value. Depending on what is being observed this might not be + * valid to use anymore. + */ + public void onValueChanged(@Nullable T newValue, @Nullable T oldValue); + } + + private final @NonNull ValueChangedObserver<T> mValueChangedObserver; + private @Nullable T mLastValue; + + /** + * @param onValueChangedObserver The {@link ValueChangedObserver} that receives updates. + */ + public ValueChangedCallback(@NonNull ValueChangedObserver<T> onValueChangedObserver) { + mValueChangedObserver = onValueChangedObserver; + } + + @Override + public void onResult(T newValue) { + if (Objects.equals(newValue, mLastValue)) return; + T oldLastValue = mLastValue; + mLastValue = newValue; + mValueChangedObserver.onValueChanged(newValue, oldLastValue); + } +}
diff --git a/base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java b/base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java index 8b885d46..e191d24 100644 --- a/base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java +++ b/base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java
@@ -8,9 +8,6 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.BuildConfig; - -import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; @@ -72,23 +69,10 @@ @SuppressWarnings("NoAndroidAsyncTaskCheck") private static String getClassName(Runnable runnable) { Class blamedClass = runnable.getClass(); - try { - if (blamedClass == AsyncTask.NamedFutureTask.class) { + if (blamedClass == AsyncTask.NamedFutureTask.class) { blamedClass = ((AsyncTask.NamedFutureTask) runnable).getBlamedClass(); } else if (blamedClass.getEnclosingClass() == android.os.AsyncTask.class) { - // This gets the AsyncTask that produced the runnable. - Field field = blamedClass.getDeclaredField("this$0"); - field.setAccessible(true); - blamedClass = field.get(runnable).getClass(); - } - } catch (NoSuchFieldException e) { - if (BuildConfig.ENABLE_ASSERTS) { - throw new RuntimeException(e); - } - } catch (IllegalAccessException e) { - if (BuildConfig.ENABLE_ASSERTS) { - throw new RuntimeException(e); - } + blamedClass = android.os.AsyncTask.class; } return blamedClass.getName(); }
diff --git a/base/android/javatests/src/org/chromium/base/task/AsyncTaskTest.java b/base/android/javatests/src/org/chromium/base/task/AsyncTaskTest.java index f33c00d..3487f81 100644 --- a/base/android/javatests/src/org/chromium/base/task/AsyncTaskTest.java +++ b/base/android/javatests/src/org/chromium/base/task/AsyncTaskTest.java
@@ -111,7 +111,7 @@ thrown.expectMessage( CoreMatchers.containsString( "org.chromium.base.task.AsyncTaskTest$SpecialChromeAsyncTask")); - thrown.expectMessage(CoreMatchers.not(CoreMatchers.containsString("SpecialOsAsyncTask"))); + thrown.expectMessage(CoreMatchers.not(CoreMatchers.containsString("android.os.AsyncTask"))); new SpecialOsAsyncTask().executeOnExecutor(executor); } @@ -139,9 +139,7 @@ new SpecialOsAsyncTask().executeOnExecutor(executor); } thrown.expect(RejectedExecutionException.class); - thrown.expectMessage( - CoreMatchers.containsString( - "org.chromium.base.task.AsyncTaskTest$SpecialOsAsyncTask")); + thrown.expectMessage(CoreMatchers.containsString("android.os.AsyncTask")); thrown.expectMessage( CoreMatchers.not(CoreMatchers.containsString("SpecialChromeAsyncTask"))); new SpecialChromeAsyncTask().executeOnExecutor(executor);
diff --git a/base/android/junit/src/org/chromium/base/ValueChangedCallbackTest.java b/base/android/junit/src/org/chromium/base/ValueChangedCallbackTest.java new file mode 100644 index 0000000..c4ec6db7 --- /dev/null +++ b/base/android/junit/src/org/chromium/base/ValueChangedCallbackTest.java
@@ -0,0 +1,85 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.base; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.shadows.ShadowLooper; + +import org.chromium.base.supplier.ObservableSupplierImpl; +import org.chromium.base.test.BaseRobolectricTestRunner; + +/** Unit tests for {@link ValueChangedCallback}. */ +@RunWith(BaseRobolectricTestRunner.class) +public class ValueChangedCallbackTest { + private static final String TEST_STRING_1 = "Test"; + private static final String TEST_STRING_2 = "Test2"; + + private int mCallCount; + private String mOldSuppliedString; + private String mNewSuppliedString; + private ObservableSupplierImpl<String> mSupplier = new ObservableSupplierImpl<>(); + + @Test + public void testObserverCaching() { + ValueChangedCallback<String> observer = + new ValueChangedCallback<>( + (String newValue, String oldValue) -> { + mCallCount++; + mNewSuppliedString = newValue; + mOldSuppliedString = oldValue; + }); + mSupplier.addObserver(observer); + ShadowLooper.runUiThreadTasks(); + + checkState(0, null, null, "before setting first string."); + + mSupplier.set(TEST_STRING_1); + checkState(1, TEST_STRING_1, null, "after setting first string."); + + mSupplier.set(TEST_STRING_2); + checkState(2, TEST_STRING_2, TEST_STRING_1, "after setting second string."); + + mSupplier.set(null); + checkState(3, null, TEST_STRING_2, "after setting third string."); + + mSupplier.removeObserver(observer); + } + + @Test + public void testObserverCachingDuplicate() { + ValueChangedCallback<String> observer = + new ValueChangedCallback<>( + (String newValue, String oldValue) -> { + mCallCount++; + mNewSuppliedString = newValue; + mOldSuppliedString = oldValue; + }); + observer.onResult(TEST_STRING_1); + checkState(1, TEST_STRING_1, null, "setting first string."); + + // Duplicates are ignored. + observer.onResult(TEST_STRING_1); + checkState(1, TEST_STRING_1, null, "setting first string duplicate."); + } + + private void checkState( + int expectedCallCount, + String expectedNewSuppliedString, + String expectedOldSuppliedString, + String assertDescription) { + assertEquals("Incorrect call count " + assertDescription, expectedCallCount, mCallCount); + assertEquals( + "Incorrect new supplied string " + assertDescription, + expectedNewSuppliedString, + mNewSuppliedString); + assertEquals( + "Incorrect old supplied string " + assertDescription, + expectedOldSuppliedString, + mOldSuppliedString); + } +}
diff --git a/base/bit_cast.h b/base/bit_cast.h index c0f060e..a3fe209 100644 --- a/base/bit_cast.h +++ b/base/bit_cast.h
@@ -7,40 +7,37 @@ #include <type_traits> -#include "base/compiler_specific.h" - -#if !HAS_BUILTIN(__builtin_bit_cast) -#include <string.h> // memcpy -#endif - namespace base { -// This is C++20's std::bit_cast<>(). It morally does what -// `*reinterpret_cast<Dest*>(&source)` does, but the cast/deref pair is -// undefined behavior, while bit_cast<>() isn't. -template <class Dest, class Source> -#if HAS_BUILTIN(__builtin_bit_cast) -constexpr -#else -inline -#endif - Dest - bit_cast(const Source& source) { -#if HAS_BUILTIN(__builtin_bit_cast) - // TODO(thakis): Keep only this codepath once nacl is gone or updated. - return __builtin_bit_cast(Dest, source); -#else - static_assert(sizeof(Dest) == sizeof(Source), - "bit_cast requires source and destination to be the same size"); - static_assert(std::is_trivially_copyable_v<Dest>, - "bit_cast requires the destination type to be copyable"); - static_assert(std::is_trivially_copyable_v<Source>, - "bit_cast requires the source type to be copyable"); +// This is an equivalent to C++20's std::bit_cast<>(), but with additional +// warnings. It morally does what `*reinterpret_cast<Dest*>(&source)` does, but +// the cast/deref pair is undefined behavior, while bit_cast<>() isn't. +// +// This is not a magic "get out of UB free" card. This must only be used on +// values, not on references or pointers. For pointers, use +// reinterpret_cast<>(), and then look at https://eel.is/c++draft/basic.lval#11 +// as that's probably UB also. - Dest dest; - memcpy(&dest, &source, sizeof(dest)); - return dest; -#endif +template <class Dest, class Source> +constexpr Dest bit_cast(const Source& source) { + static_assert(!std::is_pointer_v<Source>, + "bit_cast must not be used on pointer types"); + static_assert(!std::is_pointer_v<Dest>, + "bit_cast must not be used on pointer types"); + static_assert(!std::is_reference_v<Source>, + "bit_cast must not be used on reference types"); + static_assert(!std::is_reference_v<Dest>, + "bit_cast must not be used on reference types"); + static_assert( + sizeof(Dest) == sizeof(Source), + "bit_cast requires source and destination types to be the same size"); + static_assert(std::is_trivially_copyable_v<Source>, + "bit_cast requires the source type to be trivially copyable"); + static_assert( + std::is_trivially_copyable_v<Dest>, + "bit_cast requires the destination type to be trivially copyable"); + + return __builtin_bit_cast(Dest, source); } } // namespace base
diff --git a/base/debug/asan_service.cc b/base/debug/asan_service.cc index 1ec961a4..8c59e02 100644 --- a/base/debug/asan_service.cc +++ b/base/debug/asan_service.cc
@@ -12,15 +12,25 @@ #include "base/process/process.h" #include "base/process/process_handle.h" #include "base/strings/stringprintf.h" +#include "build/build_config.h" -#if defined(COMPONENT_BUILD) && defined(_WIN32) +#if BUILDFLAG(IS_WIN) +#include "base/files/file.h" +#include "base/files/file_path.h" +#include "base/logging.h" +#endif // BUILDFLAG(IS_WIN) + +#if defined(COMPONENT_BUILD) && BUILDFLAG(IS_WIN) // In component builds on Windows, weak function exported by ASan have the // `__dll` suffix. ASan itself uses the `alternatename` directive to account for // that. #pragma comment(linker, \ "/alternatename:__sanitizer_report_error_summary=" \ "__sanitizer_report_error_summary__dll") -#endif // defined(COMPONENT_BUILD) && defined(_WIN32) +#pragma comment(linker, \ + "/alternatename:__sanitizer_set_report_fd=" \ + "__sanitizer_set_report_fd__dll") +#endif // defined(COMPONENT_BUILD) && BUILDFLAG(IS_WIN) namespace base { namespace debug { @@ -60,6 +70,20 @@ void AsanService::Initialize() { AutoLock lock(lock_); if (!is_initialized_) { +#if BUILDFLAG(IS_WIN) + if (logging::IsLoggingToFileEnabled()) { + // This path is allowed by the sandbox when `--enable-logging + // --log-file={path}` are both specified when launching Chromium. + auto log_file = base::File( + base::FilePath(logging::GetLogFileFullPath()), + base::File::Flags::FLAG_OPEN_ALWAYS | base::File::Flags::FLAG_APPEND); + if (log_file.IsValid()) { + // Sanitizer APIs need a HANDLE cast to void*. + __sanitizer_set_report_fd( + reinterpret_cast<void*>(log_file.TakePlatformFile())); + } + } +#endif // BUILDFLAG(IS_WIN) __asan_set_error_report_callback(ErrorReportCallback); error_callbacks_.push_back(TaskTraceErrorCallback); is_initialized_ = true;
diff --git a/base/not_fatal_until.h b/base/not_fatal_until.h index e2589e2..7616a511 100644 --- a/base/not_fatal_until.h +++ b/base/not_fatal_until.h
@@ -26,6 +26,76 @@ M128 = 128, M129 = 129, M130 = 130, + M131 = 131, + M132 = 132, + M133 = 133, + M134 = 134, + M135 = 135, + M136 = 136, + M137 = 137, + M138 = 138, + M139 = 139, + M140 = 140, + M141 = 141, + M142 = 142, + M143 = 143, + M144 = 144, + M145 = 145, + M146 = 146, + M147 = 147, + M148 = 148, + M149 = 149, + M150 = 150, + M151 = 151, + M152 = 152, + M153 = 153, + M154 = 154, + M155 = 155, + M156 = 156, + M157 = 157, + M158 = 158, + M159 = 159, + M160 = 160, + M161 = 161, + M162 = 162, + M163 = 163, + M164 = 164, + M165 = 165, + M166 = 166, + M167 = 167, + M168 = 168, + M169 = 169, + M170 = 170, + M171 = 171, + M172 = 172, + M173 = 173, + M174 = 174, + M175 = 175, + M176 = 176, + M177 = 177, + M178 = 178, + M179 = 179, + M180 = 180, + M181 = 181, + M182 = 182, + M183 = 183, + M184 = 184, + M185 = 185, + M186 = 186, + M187 = 187, + M188 = 188, + M189 = 189, + M190 = 190, + M191 = 191, + M192 = 192, + M193 = 193, + M194 = 194, + M195 = 195, + M196 = 196, + M197 = 197, + M198 = 198, + M199 = 199, + M200 = 200, }; } // namespace base
diff --git a/base/test/clang_profiling.cc b/base/test/clang_profiling.cc index 3900628..e67572f 100644 --- a/base/test/clang_profiling.cc +++ b/base/test/clang_profiling.cc
@@ -23,11 +23,9 @@ base::AutoLock auto_lock(*lock); // Fuchsia's profile runtime does not handle profile dumping. -// Coverage builds use the continuous mode / runtime counter relocation, so -// __llvm_profile_dump() is not needed. -#if !BUILDFLAG(IS_FUCHSIA) && !BUILDFLAG(USE_CLANG_COVERAGE) +#if !BUILDFLAG(IS_FUCHSIA) __llvm_profile_dump(); -#endif // !BUILDFLAG(IS_FUCHSIA) && !BUILDFLAG(USE_CLANG_COVERAGE) +#endif // !BUILDFLAG(IS_FUCHSIA) } } // namespace base
diff --git a/base/tracing/stdlib/chrome/perfetto_sql_files.gni b/base/tracing/stdlib/chrome/perfetto_sql_files.gni index afe718b..9a84d4a 100644 --- a/base/tracing/stdlib/chrome/perfetto_sql_files.gni +++ b/base/tracing/stdlib/chrome/perfetto_sql_files.gni
@@ -12,6 +12,7 @@ "metadata.sql", "page_loads.sql", "speedometer.sql", + "startups.sql", "tasks.sql", "vsync_intervals.sql", "web_content_interactions.sql",
diff --git a/build/config/coverage/BUILD.gn b/build/config/coverage/BUILD.gn index 2939e37f..6c3fca9 100644 --- a/build/config/coverage/BUILD.gn +++ b/build/config/coverage/BUILD.gn
@@ -27,11 +27,8 @@ } cflags = [ - # LINT.IfChange "-fprofile-instr-generate", "-fcoverage-mapping", - "-mllvm", - "-runtime-counter-relocation=true", # Following experimental flags removes unused header functions from the # coverage mapping data embedded in the test binaries, and the reduction @@ -39,11 +36,6 @@ # MacOS. Please refer to crbug.com/796290 for more details. "-mllvm", "-limited-coverage-experimental=true", - - # LINT.ThenChange( - # /build/config/siso/clang_code_coverage_wrapper.star, - # /build/toolchain/clang_code_coverage_wrapper.py, - # ) ] # Rust coverage is gated on using the Chromium-built Rust toolchain as it @@ -51,10 +43,7 @@ # tools that will be used to process the coverage output. This is because # the coverage file format is not stable. if (use_chromium_rust_toolchain) { - rustflags += [ - "-Cinstrument-coverage", - "-Cllvm-args=-runtime-counter-relocation", - ] + rustflags += [ "-Cinstrument-coverage" ] } if (is_linux || is_chromeos) {
diff --git a/build/config/siso/clang_code_coverage_wrapper.star b/build/config/siso/clang_code_coverage_wrapper.star index 70f18d4..be0f5f4 100644 --- a/build/config/siso/clang_code_coverage_wrapper.star +++ b/build/config/siso/clang_code_coverage_wrapper.star
@@ -17,8 +17,6 @@ _COVERAGE_FLAGS = [ "-fprofile-instr-generate", "-fcoverage-mapping", - "-mllvm", - "-runtime-counter-relocation=true", # Following experimental flags remove unused header functions from the # coverage mapping data embedded in the test binaries, and the reduction # of binary size enables building Chrome's large unit test targets on
diff --git a/build/toolchain/clang_code_coverage_wrapper.py b/build/toolchain/clang_code_coverage_wrapper.py index 28b95396..a1cf9000 100755 --- a/build/toolchain/clang_code_coverage_wrapper.py +++ b/build/toolchain/clang_code_coverage_wrapper.py
@@ -63,8 +63,6 @@ _COVERAGE_FLAGS = [ '-fprofile-instr-generate', '-fcoverage-mapping', - '-mllvm', - '-runtime-counter-relocation=true', # Following experimental flags remove unused header functions from the # coverage mapping data embedded in the test binaries, and the reduction # of binary size enables building Chrome's large unit test targets on
diff --git a/chrome/VERSION b/chrome/VERSION index f2e55008..9587d9e 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=122 MINOR=0 -BUILD=6181 +BUILD=6182 PATCH=0
diff --git a/chrome/android/features/keyboard_accessory/internal/BUILD.gn b/chrome/android/features/keyboard_accessory/internal/BUILD.gn index a64e9cd..16b3f842 100644 --- a/chrome/android/features/keyboard_accessory/internal/BUILD.gn +++ b/chrome/android/features/keyboard_accessory/internal/BUILD.gn
@@ -88,7 +88,6 @@ "java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryProperties.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryRecyclerViewMcp.java", - "java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryView.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupCoordinator.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupMediator.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/button_group_component/KeyboardAccessoryButtonGroupProperties.java",
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java index c5a1d48..cc638544 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java
@@ -40,7 +40,7 @@ private final KeyboardAccessoryMediator mMediator; private final KeyboardAccessoryButtonGroupCoordinator mButtonGroup; private final PropertyModel mModel; - private KeyboardAccessoryView mView; + private KeyboardAccessoryModernView mView; /** * The interface to notify consumers about keyboard accessories visibility. E.g: the animation @@ -133,7 +133,7 @@ KeyboardAccessoryButtonGroupCoordinator buttonGroup, BarVisibilityDelegate barVisibilityDelegate, AccessorySheetCoordinator.SheetVisibilityDelegate sheetVisibilityDelegate, - ViewProvider<KeyboardAccessoryView> viewProvider) { + ViewProvider<KeyboardAccessoryModernView> viewProvider) { mButtonGroup = buttonGroup; mModel = KeyboardAccessoryProperties.defaultModelBuilder().build(); mMediator =
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernView.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernView.java index 9667155..6144e6df 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernView.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernView.java
@@ -4,16 +4,25 @@ package org.chromium.chrome.browser.keyboard_accessory.bar_component; +import static org.chromium.ui.base.LocalizationUtils.isLayoutRtl; + import android.animation.ObjectAnimator; import android.content.Context; +import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; +import android.view.accessibility.AccessibilityEvent; +import android.view.animation.AccelerateInterpolator; import android.view.animation.OvershootInterpolator; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Px; +import androidx.annotation.VisibleForTesting; import androidx.core.view.ViewCompat; +import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.chromium.base.Callback; @@ -25,14 +34,31 @@ * The Accessory sitting above the keyboard and below the content area. It is used for autofill * suggestions and manual entry points assisting the user in filling forms. */ -class KeyboardAccessoryModernView extends KeyboardAccessoryView { +class KeyboardAccessoryModernView extends LinearLayout { private static final int ARRIVAL_ANIMATION_DURATION_MS = 300; private static final float ARRIVAL_ANIMATION_BOUNCE_LENGTH_DIP = 200f; private static final float ARRIVAL_ANIMATION_TENSION = 1f; + private static final int FADE_ANIMATION_DURATION_MS = 150; // Total duration of show/hide. + private static final int HIDING_ANIMATION_DELAY_MS = 50; // Shortens animation duration. private Callback<Integer> mObfuscatedLastChildAt; private ObjectAnimator mAnimator; + private AnimationListener mAnimationListener; + private ViewPropertyAnimator mRunningAnimation; private float mLastBarItemsViewPosition; + private boolean mShouldSkipClosingAnimation; + private boolean mDisableAnimations; + + protected RecyclerView mBarItemsView; + + /** Interface that allows to react to animations. */ + interface AnimationListener { + /** + * Called if the accessory bar stopped fading in. The fade-in only happens sometimes, e.g. + * if the bar is already visible or animations are disabled, this signal is not issued. + */ + void onFadeInEnd(); + } // Records the first time a user scrolled to suppress an IPH explaining how scrolling works. private final RecyclerView.OnScrollListener mScrollingIphCallback = @@ -47,28 +73,40 @@ }; /** - * This decoration ensures that the last item is right-aligned. - * To do this, it subtracts the widths, margins and offsets of all items in the recycler view - * from the RecyclerView's total width. If the items fill the whole recycler view, the last item - * uses the same offset as all other items. + * This decoration ensures that the last item is right-aligned. To do this, it subtracts the + * widths, margins and offsets of all items in the recycler view from the RecyclerView's total + * width. If the items fill the whole recycler view, the last item uses the same offset as all + * other items. */ - private class StickyLastItemDecoration extends HorizontalDividerItemDecoration { + private class StickyLastItemDecoration extends RecyclerView.ItemDecoration { + private final int mHorizontalMargin; + StickyLastItemDecoration(@Px int minimalLeadingHorizontalMargin) { - super(minimalLeadingHorizontalMargin); + this.mHorizontalMargin = minimalLeadingHorizontalMargin; } @Override - protected int getItemOffsetInternal( + public void getItemOffsets( + Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + if (isLayoutRtl()) { + outRect.right = getItemOffsetInternal(view, parent, state); + } else { + outRect.left = getItemOffsetInternal(view, parent, state); + } + } + + private int getItemOffsetInternal( final View view, final RecyclerView parent, RecyclerView.State state) { - int minimalOffset = super.getItemOffsetInternal(view, parent, state); - if (!isLastItem(parent, view, parent.getAdapter().getItemCount())) return minimalOffset; + if (!isLastItem(parent, view, parent.getAdapter().getItemCount())) { + return mHorizontalMargin; + } if (view.getWidth() == 0 && state.didStructureChange()) { // When the RecyclerView is first created, its children aren't measured yet and miss // dimensions. Therefore, estimate the offset and recalculate after UI has loaded. view.post(parent::invalidateItemDecorations); return parent.getWidth() - estimateLastElementWidth(view); } - return Math.max(getSpaceLeftInParent(parent), minimalOffset); + return Math.max(getSpaceLeftInParent(parent), mHorizontalMargin); } private int getSpaceLeftInParent(RecyclerView parent) { @@ -106,7 +144,7 @@ } private int getOccupiedSpaceByChildrenOffsets(RecyclerView parent) { - return (parent.getChildCount() - 1) * super.getItemOffsetInternal(null, null, null); + return (parent.getChildCount() - 1) * mHorizontalMargin; } private boolean isLastItem(RecyclerView parent, View view, int itemCount) { @@ -121,7 +159,28 @@ @Override protected void onFinishInflate() { + TraceEvent.begin("KeyboardAccessoryView#onFinishInflate"); super.onFinishInflate(); + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + + mBarItemsView = findViewById(R.id.bar_items_view); + initializeHorizontalRecyclerView(mBarItemsView); + + // Apply RTL layout changes to the view's children: + int layoutDirection = isLayoutRtl() ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR; + findViewById(R.id.accessory_bar_contents).setLayoutDirection(layoutDirection); + mBarItemsView.setLayoutDirection(layoutDirection); + + // Set listener's to touch/click events so they are not propagated to the page below. + setOnTouchListener( + (view, motionEvent) -> { + performClick(); // Setting a touch listener requires this call which is a NoOp. + // Return that the motionEvent was consumed and needs no further handling. + return true; + }); + setOnClickListener(view -> {}); + setClickable(false); // Disables the "Double-tap to activate" Talkback reading. + setSoundEffectsEnabled(false); int pad = getResources().getDimensionPixelSize(R.dimen.keyboard_accessory_bar_item_padding); // Ensure the last element (although scrollable) is always end-aligned. @@ -130,6 +189,7 @@ // Remove any paddings that might be inherited since this messes up the fading edge. ViewCompat.setPaddingRelative(mBarItemsView, 0, 0, 0, 0); + TraceEvent.end("KeyboardAccessoryView#onFinishInflate"); } @Override @@ -139,24 +199,26 @@ mBarItemsView.post(mBarItemsView::invalidateItemDecorations); } - @Override void setVisible(boolean visible) { - TraceEvent.begin("KeyboardAccessoryModernView#setVisible"); - super.setVisible(visible); + TraceEvent.begin("KeyboardAccessoryView#setVisible"); + if (!visible || getVisibility() != VISIBLE) mBarItemsView.scrollToPosition(0); if (visible) { + show(); mBarItemsView.post(mBarItemsView::invalidateItemDecorations); // Animate the suggestions only if the bar wasn't visible already. if (getVisibility() != View.VISIBLE) animateSuggestionArrival(); + } else { + hide(); } - TraceEvent.end("KeyboardAccessoryModernView#setVisible"); + TraceEvent.end("KeyboardAccessoryView#setVisible"); } - @Override - protected void onItemsChanged() { - super.onItemsChanged(); - if (isLastChildObfuscated()) { - mObfuscatedLastChildAt.onResult(mBarItemsView.indexOfChild(getLastChild())); - } + void setSkipClosingAnimation(boolean shouldSkipClosingAnimation) { + mShouldSkipClosingAnimation = shouldSkipClosingAnimation; + } + + void setAnimationListener(AnimationListener animationListener) { + mAnimationListener = animationListener; } ViewRectProvider getSwipingIphRect() { @@ -167,6 +229,101 @@ return provider; } + void setBottomOffset(int bottomOffset) { + MarginLayoutParams params = (MarginLayoutParams) getLayoutParams(); + params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, bottomOffset); + setLayoutParams(params); + } + + void setObfuscatedLastChildAt(Callback<Integer> obfuscatedLastChildAt) { + mObfuscatedLastChildAt = obfuscatedLastChildAt; + } + + void disableAnimationsForTesting() { + mDisableAnimations = true; + } + + boolean areAnimationsDisabled() { + return mDisableAnimations; + } + + void setAccessibilityMessage(boolean hasSuggestions) { + setContentDescription( + getContext() + .getString( + hasSuggestions + ? R.string + .autofill_keyboard_accessory_modern_content_description + : R.string + .autofill_keyboard_accessory_modern_content_fallback_description)); + } + + void setBarItemsAdapter(RecyclerView.Adapter adapter) { + // Make sure the view updates the fallback icon padding whenever new items arrive. + adapter.registerAdapterDataObserver( + new RecyclerView.AdapterDataObserver() { + @Override + public void onItemRangeChanged(int positionStart, int itemCount) { + super.onItemRangeChanged(positionStart, itemCount); + mBarItemsView.scrollToPosition(0); + mBarItemsView.invalidateItemDecorations(); + onItemsChanged(); + } + }); + mBarItemsView.setAdapter(adapter); + } + + private void show() { + TraceEvent.begin("KeyboardAccessoryView#show"); + bringToFront(); // Needs to overlay every component and the bottom sheet - like a keyboard. + if (mRunningAnimation != null) { + mRunningAnimation.cancel(); + mRunningAnimation = null; + } + if (areAnimationsDisabled()) { + mRunningAnimation = null; + setVisibility(View.VISIBLE); + return; + } + if (getVisibility() != View.VISIBLE) setAlpha(0f); + mRunningAnimation = + animate() + .alpha(1f) + .setDuration(FADE_ANIMATION_DURATION_MS) + .setInterpolator(new AccelerateInterpolator()) + .withStartAction(() -> setVisibility(View.VISIBLE)) + .withEndAction( + () -> { + mAnimationListener.onFadeInEnd(); + mRunningAnimation = null; + }); + announceForAccessibility(getContentDescription()); + TraceEvent.end("KeyboardAccessoryView#show"); + } + + private void hide() { + if (mRunningAnimation != null) { + mRunningAnimation.cancel(); + mRunningAnimation = null; + } + if (mShouldSkipClosingAnimation || areAnimationsDisabled()) { + mRunningAnimation = null; + setVisibility(View.GONE); + return; + } + mRunningAnimation = + animate() + .alpha(0.0f) + .setInterpolator(new AccelerateInterpolator()) + .setStartDelay(HIDING_ANIMATION_DELAY_MS) + .setDuration(FADE_ANIMATION_DURATION_MS - HIDING_ANIMATION_DELAY_MS) + .withEndAction( + () -> { + setVisibility(View.GONE); + mRunningAnimation = null; + }); + } + private boolean isLastChildObfuscated() { View lastChild = getLastChild(); RecyclerView.Adapter adapter = mBarItemsView.getAdapter(); @@ -180,6 +337,12 @@ : lastChild.getX() + lastChild.getWidth() > mBarItemsView.getWidth(); } + private void onItemsChanged() { + if (isLastChildObfuscated()) { + mObfuscatedLastChildAt.onResult(mBarItemsView.indexOfChild(getLastChild())); + } + } + private View getLastChild() { for (int i = mBarItemsView.getChildCount() - 1; i >= 0; --i) { View lastChild = mBarItemsView.getChildAt(i); @@ -189,21 +352,6 @@ return null; } - void setObfuscatedLastChildAt(Callback<Integer> obfuscatedLastChildAt) { - mObfuscatedLastChildAt = obfuscatedLastChildAt; - } - - void setAccessibilityMessage(boolean hasSuggestions) { - setContentDescription( - getContext() - .getString( - hasSuggestions - ? R.string - .autofill_keyboard_accessory_modern_content_description - : R.string - .autofill_keyboard_accessory_modern_content_fallback_description)); - } - private void animateSuggestionArrival() { if (areAnimationsDisabled()) return; int bounceDirection = getLayoutDirection() == LAYOUT_DIRECTION_RTL ? 1 : -1; @@ -226,4 +374,23 @@ mAnimator.setInterpolator(new OvershootInterpolator(ARRIVAL_ANIMATION_TENSION)); mAnimator.start(); } + + private void initializeHorizontalRecyclerView(RecyclerView recyclerView) { + // Set horizontal layout. + recyclerView.setLayoutManager( + new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)); + + int pad = + getResources().getDimensionPixelSize(R.dimen.keyboard_accessory_horizontal_padding); + + // Remove all animations - the accessory shouldn't be visibly built anyway. + recyclerView.setItemAnimator(null); + + ViewCompat.setPaddingRelative(recyclerView, pad, 0, 0, 0); + } + + @VisibleForTesting + boolean hasRunningAnimation() { + return mRunningAnimation != null; + } }
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java index 7e0ca01..14a8421eb 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java
@@ -241,12 +241,11 @@ * Tries to bind the given property to the given view by using the value in the given model. * * @param model A {@link PropertyModel}. - * @param view A {@link KeyboardAccessoryView}. + * @param view A {@link KeyboardAccessoryModernView}. * @param propertyKey A {@link PropertyKey}. */ - static void bind(PropertyModel model, KeyboardAccessoryView view, PropertyKey propertyKey) { - assert view instanceof KeyboardAccessoryModernView; - KeyboardAccessoryModernView modernView = (KeyboardAccessoryModernView) view; + static void bind( + PropertyModel model, KeyboardAccessoryModernView view, PropertyKey propertyKey) { if (propertyKey == BAR_ITEMS) { view.setBarItemsAdapter( KeyboardAccessoryCoordinator.createBarItemsAdapter(model.get(BAR_ITEMS))); @@ -256,26 +255,28 @@ view.setVisible(model.get(VISIBLE)); } else if (propertyKey == SKIP_CLOSING_ANIMATION) { view.setSkipClosingAnimation(model.get(SKIP_CLOSING_ANIMATION)); - if (!model.get(VISIBLE)) view.setVisible(false); // Update to cancel any animation. + if (!model.get(VISIBLE)) { + view.setVisible(false); // Update to cancel any animation. + } } else if (propertyKey == BOTTOM_OFFSET_PX) { view.setBottomOffset(model.get(BOTTOM_OFFSET_PX)); } else if (propertyKey == ANIMATION_LISTENER) { view.setAnimationListener(model.get(ANIMATION_LISTENER)); } else if (propertyKey == OBFUSCATED_CHILD_AT_CALLBACK) { - modernView.setObfuscatedLastChildAt(model.get(OBFUSCATED_CHILD_AT_CALLBACK)); + view.setObfuscatedLastChildAt(model.get(OBFUSCATED_CHILD_AT_CALLBACK)); } else if (propertyKey == SHOW_SWIPING_IPH) { - RectProvider swipingIphRectProvider = modernView.getSwipingIphRect(); + RectProvider swipingIphRectProvider = view.getSwipingIphRect(); if (model.get(SHOW_SWIPING_IPH) && swipingIphRectProvider != null && hasShownAnyAutofillIphBefore()) { showHelpBubble( FeatureConstants.KEYBOARD_ACCESSORY_BAR_SWIPING_FEATURE, swipingIphRectProvider, - modernView.getContext(), - modernView.mBarItemsView); + view.getContext(), + view.mBarItemsView); } } else if (propertyKey == HAS_SUGGESTIONS) { - modernView.setAccessibilityMessage(model.get(HAS_SUGGESTIONS)); + view.setAccessibilityMessage(model.get(HAS_SUGGESTIONS)); } else if (propertyKey == SHEET_OPENER_ITEM) { // No binding required. } else {
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryProperties.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryProperties.java index 04e21332..c43129a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryProperties.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryProperties.java
@@ -51,7 +51,7 @@ static final WritableBooleanPropertyKey HAS_SUGGESTIONS = new WritableBooleanPropertyKey("has_suggestions"); - static final WritableObjectPropertyKey<KeyboardAccessoryView.AnimationListener> + static final WritableObjectPropertyKey<KeyboardAccessoryModernView.AnimationListener> ANIMATION_LISTENER = new WritableObjectPropertyKey<>("animation_listener"); static PropertyModel.Builder defaultModelBuilder() {
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryView.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryView.java deleted file mode 100644 index b501248..0000000 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryView.java +++ /dev/null
@@ -1,227 +0,0 @@ -// Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.keyboard_accessory.bar_component; - -import static org.chromium.ui.base.LocalizationUtils.isLayoutRtl; - -import android.content.Context; -import android.graphics.Rect; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewPropertyAnimator; -import android.view.accessibility.AccessibilityEvent; -import android.view.animation.AccelerateInterpolator; -import android.widget.LinearLayout; - -import androidx.annotation.CallSuper; -import androidx.annotation.VisibleForTesting; -import androidx.core.view.ViewCompat; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import org.chromium.base.TraceEvent; -import org.chromium.chrome.browser.keyboard_accessory.R; - -/** - * The Accessory sitting above the keyboard and below the content area. It is used for autofill - * suggestions and manual entry points assisting the user in filling forms. - */ -class KeyboardAccessoryView extends LinearLayout { - protected static final int FADE_ANIMATION_DURATION_MS = 150; // Total duration of show/hide. - protected static final int HIDING_ANIMATION_DELAY_MS = 50; // Shortens animation duration. - - protected RecyclerView mBarItemsView; - private ViewPropertyAnimator mRunningAnimation; - private boolean mShouldSkipClosingAnimation; - private boolean mDisableAnimations; - - /** Interface that allows to react to animations. */ - interface AnimationListener { - /** - * Called if the accessory bar stopped fading in. The fade-in only happens sometimes, e.g. - * if the bar is already visible or animations are disabled, this signal is not issued. - */ - void onFadeInEnd(); - } - - private AnimationListener mAnimationListener; - - protected static class HorizontalDividerItemDecoration extends RecyclerView.ItemDecoration { - private final int mHorizontalMargin; - - HorizontalDividerItemDecoration(int horizontalMargin) { - this.mHorizontalMargin = horizontalMargin; - } - - @Override - public void getItemOffsets( - Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { - if (isLayoutRtl()) { - outRect.right = getItemOffsetInternal(view, parent, state); - } else { - outRect.left = getItemOffsetInternal(view, parent, state); - } - } - - protected int getItemOffsetInternal( - final View view, final RecyclerView parent, RecyclerView.State state) { - return mHorizontalMargin; - } - } - - /** Constructor for inflating from XML. */ - public KeyboardAccessoryView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected void onFinishInflate() { - TraceEvent.begin("KeyboardAccessoryView#onFinishInflate"); - super.onFinishInflate(); - sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); - - mBarItemsView = findViewById(R.id.bar_items_view); - initializeHorizontalRecyclerView(mBarItemsView); - - // Apply RTL layout changes to the view's children: - int layoutDirection = isLayoutRtl() ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR; - findViewById(R.id.accessory_bar_contents).setLayoutDirection(layoutDirection); - mBarItemsView.setLayoutDirection(layoutDirection); - - // Set listener's to touch/click events so they are not propagated to the page below. - setOnTouchListener( - (view, motionEvent) -> { - performClick(); // Setting a touch listener requires this call which is a NoOp. - // Return that the motionEvent was consumed and needs no further handling. - return true; - }); - setOnClickListener(view -> {}); - setClickable(false); // Disables the "Double-tap to activate" Talkback reading. - setSoundEffectsEnabled(false); - TraceEvent.end("KeyboardAccessoryView#onFinishInflate"); - } - - void setVisible(boolean visible) { - TraceEvent.begin("KeyboardAccessoryView#setVisible"); - if (!visible || getVisibility() != VISIBLE) mBarItemsView.scrollToPosition(0); - if (visible) { - show(); - } else { - hide(); - } - TraceEvent.end("KeyboardAccessoryView#setVisible"); - } - - void setBottomOffset(int bottomOffset) { - MarginLayoutParams params = (MarginLayoutParams) getLayoutParams(); - params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, bottomOffset); - setLayoutParams(params); - } - - void setBarItemsAdapter(RecyclerView.Adapter adapter) { - // Make sure the view updates the fallback icon padding whenever new items arrive. - adapter.registerAdapterDataObserver( - new RecyclerView.AdapterDataObserver() { - @Override - public void onItemRangeChanged(int positionStart, int itemCount) { - super.onItemRangeChanged(positionStart, itemCount); - mBarItemsView.scrollToPosition(0); - mBarItemsView.invalidateItemDecorations(); - onItemsChanged(); - } - }); - mBarItemsView.setAdapter(adapter); - } - - void setAnimationListener(AnimationListener animationListener) { - mAnimationListener = animationListener; - } - - /** Template method. Override to be notified if the bar items change. */ - @CallSuper - protected void onItemsChanged() {} - - private void show() { - TraceEvent.begin("KeyboardAccessoryView#show"); - bringToFront(); // Needs to overlay every component and the bottom sheet - like a keyboard. - if (mRunningAnimation != null) { - mRunningAnimation.cancel(); - mRunningAnimation = null; - } - if (areAnimationsDisabled()) { - mRunningAnimation = null; - setVisibility(View.VISIBLE); - return; - } - if (getVisibility() != View.VISIBLE) setAlpha(0f); - mRunningAnimation = - animate() - .alpha(1f) - .setDuration(FADE_ANIMATION_DURATION_MS) - .setInterpolator(new AccelerateInterpolator()) - .withStartAction(() -> setVisibility(View.VISIBLE)) - .withEndAction( - () -> { - mAnimationListener.onFadeInEnd(); - mRunningAnimation = null; - }); - announceForAccessibility(getContentDescription()); - TraceEvent.end("KeyboardAccessoryView#show"); - } - - private void hide() { - if (mRunningAnimation != null) { - mRunningAnimation.cancel(); - mRunningAnimation = null; - } - if (mShouldSkipClosingAnimation || areAnimationsDisabled()) { - mRunningAnimation = null; - setVisibility(View.GONE); - return; - } - mRunningAnimation = - animate() - .alpha(0.0f) - .setInterpolator(new AccelerateInterpolator()) - .setStartDelay(HIDING_ANIMATION_DELAY_MS) - .setDuration(FADE_ANIMATION_DURATION_MS - HIDING_ANIMATION_DELAY_MS) - .withEndAction( - () -> { - setVisibility(View.GONE); - mRunningAnimation = null; - }); - } - - void setSkipClosingAnimation(boolean shouldSkipClosingAnimation) { - mShouldSkipClosingAnimation = shouldSkipClosingAnimation; - } - - void disableAnimationsForTesting() { - mDisableAnimations = true; - } - - boolean areAnimationsDisabled() { - return mDisableAnimations; - } - - private void initializeHorizontalRecyclerView(RecyclerView recyclerView) { - // Set horizontal layout. - recyclerView.setLayoutManager( - new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)); - - int pad = - getResources().getDimensionPixelSize(R.dimen.keyboard_accessory_horizontal_padding); - - // Remove all animations - the accessory shouldn't be visibly built anyway. - recyclerView.setItemAnimator(null); - - ViewCompat.setPaddingRelative(recyclerView, pad, 0, 0, 0); - } - - @VisibleForTesting - boolean hasRunningAnimation() { - return mRunningAnimation != null; - } -}
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_af.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_af.xtb index e1e6fee..61668d7 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_af.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_af.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Swiep om nog voorstelle te sien</translation> <translation id="7873973044507799456">Wys gestoorde adresse</translation> <translation id="7992095260806105436">Gebruik Chrome-outovulvoorstel</translation> -<translation id="8507520749471379845">Wagwoorde beskikbaar</translation> <translation id="8705308553596171387">Geen wagwoord nie</translation> <translation id="879180780857354295">Alternatiewe invulopsies is bo die sleutelbord beskikbaar</translation> <translation id="8849262850971482943">Gebruik jou virtuele kaart vir bykomende sekuriteit</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_am.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_am.xtb index d0151b13..df0c787 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_am.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_am.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">ተጨማሪ አስተያየቶችን ለማየት ያንሸራትቱ</translation> <translation id="7873973044507799456">የተቀመጡ አድራሻዎችን አሳይ</translation> <translation id="7992095260806105436">የChrome የራስ-ሙላ አስተያየት ጥቆማን ይጠቀሙ</translation> -<translation id="8507520749471379845">የይለፍ ቃላት ይገኛሉ</translation> <translation id="8705308553596171387">የይለፍ ቃል የለም</translation> <translation id="879180780857354295">አማራጭ መሙያ አማራጮች ከቁልፍ ሰሌዳው በላይ በኩል ይገኛል</translation> <translation id="8849262850971482943">ለተጨማሪ ደህንነት የእርስዎን ምናባዊ ካርድ ይጠቀሙ</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb index d7db52a..612495c 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ar.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">مرِّر سريعًا للاطّلاع على مزيد من الاقتراحات.</translation> <translation id="7873973044507799456">عرض العناوين المحفوظة</translation> <translation id="7992095260806105436">استخدام اقتراح الملء التلقائي في Chrome</translation> -<translation id="8507520749471379845">كلمات المرور متاحة</translation> <translation id="8705308553596171387">بلا كلمة مرور</translation> <translation id="879180780857354295">تتوفر خيارات ملء بديلة أعلى لوحة المفاتيح.</translation> <translation id="8849262850971482943">يمكنك استخدام بطاقتك الافتراضية للحصول على مستوى أعلى من الأمان.</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_as.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_as.xtb index 4d4f6a61..7352fe7d 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_as.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_as.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">অধিক পৰামৰ্শ চাবলৈ ছোৱাইপ কৰক</translation> <translation id="7873973044507799456">ছেভ কৰি থোৱা ঠিকনাসমূহ দেখুৱাওক</translation> <translation id="7992095260806105436">Chrome স্বয়ংক্ৰিয়ভাৱে পূৰ হোৱা পৰামৰ্শৰ সুবিধাটো ব্যৱহাৰ কৰক</translation> -<translation id="8507520749471379845">পাছৱৰ্ড উপলব্ধ</translation> <translation id="8705308553596171387">কোনো পাছৱৰ্ড নাই</translation> <translation id="879180780857354295">পূৰ্ণ কৰাৰ বিকল্পসমূহ কীব’ৰ্ডখনৰ ওপৰত আছে</translation> <translation id="8849262850971482943">অতিৰিক্ত সুৰক্ষাৰ বাবে আপোনাৰ ভাৰ্চুৱেল কাৰ্ডখন ব্যৱহাৰ কৰক</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_az.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_az.xtb index bec1644..79e658f7b 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_az.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_az.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Daha çox təklif görmək üçün sürüşdürün</translation> <translation id="7873973044507799456">Saxlanmış ünvanları göstərin</translation> <translation id="7992095260806105436">Chrome'un avto doldurma təklifindən istifadə edin</translation> -<translation id="8507520749471379845">Parollar əlçatandır</translation> <translation id="8705308553596171387">Parol yoxdur</translation> <translation id="879180780857354295">Alternativ doldurma seçimləri klaviaturanın yuxarısında əlçatandır</translation> <translation id="8849262850971482943">Əlavə təhlükəsizlik üçün virtual kartınızdan istifadə edin</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_be.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_be.xtb index 3d54522..d6c7673 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_be.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_be.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Каб пабачыць больш прапаноў, правядзіце пальцам</translation> <translation id="7873973044507799456">Паказаць захаваныя адрасы</translation> <translation id="7992095260806105436">Выкарыстайце прапанову аўтазапаўнення Chrome</translation> -<translation id="8507520749471379845">Даступныя паролі</translation> <translation id="8705308553596171387">Без пароля</translation> <translation id="879180780857354295">Над клавіятурай паказваюцца альтэрнатыўныя варыянты запаўнення</translation> <translation id="8849262850971482943">Для большай бяспекі выкарыстоўвайце віртуальную картку</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb index 87e5178..33cae32 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bg.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Прекарайте пръст, за да видите още предложения</translation> <translation id="7873973044507799456">Показване на запазените адреси</translation> <translation id="7992095260806105436">Използване на предложението от функцията за автоматично попълване в Chrome</translation> -<translation id="8507520749471379845">Има налични пароли</translation> <translation id="8705308553596171387">Няма парола</translation> <translation id="879180780857354295">Над клавиатурата има алтернативни опции за попълване</translation> <translation id="8849262850971482943">За по-голяма сигурност използвайте виртуалната си карта</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bn.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bn.xtb index 65ac018..dde58a4b 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bn.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bn.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">আরও সাজেশন দেখতে সোয়াইপ করুন</translation> <translation id="7873973044507799456">সেভ করে রাখা ঠিকানা দেখুন</translation> <translation id="7992095260806105436">Chrome-এর 'অটোফিল সাজেশন' ফিচার ব্যবহার করুন</translation> -<translation id="8507520749471379845">পাসওয়ার্ড উপলভ্য</translation> <translation id="8705308553596171387">পাসওয়ার্ড নেই</translation> <translation id="879180780857354295">কীবোর্ডের ঠিক উপরে অটোমেটিক পূরণ হয়ে যাওয়ার বিকল্প উপলভ্য</translation> <translation id="8849262850971482943">অতিরিক্ত সুরক্ষার জন্য আপনার ভার্চুয়াল কার্ড ব্যবহার করুন</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb index 068368c..131b24a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Prevucite da vidite više prijedloga</translation> <translation id="7873973044507799456">Prikaz sačuvanih adresa</translation> <translation id="7992095260806105436">Koristite prijedlog Chromea za automatsko popunjavanje</translation> -<translation id="8507520749471379845">Dostupne su lozinke</translation> <translation id="8705308553596171387">Nema lozinke</translation> <translation id="879180780857354295">Alternativne opcije popunjavanja su dostupne iznad tastature</translation> <translation id="8849262850971482943">Koristite virtuelnu karticu radi dodatne sigurnosti</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb index 4945f32..27764c1 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Llisca per veure més suggeriments</translation> <translation id="7873973044507799456">Mostra les adreces desades</translation> <translation id="7992095260806105436">Utilitza el suggeriment d'Emplenament automàtic de Chrome</translation> -<translation id="8507520749471379845">Contrasenyes disponibles</translation> <translation id="8705308553596171387">Sense contrasenya</translation> <translation id="879180780857354295">Opcions alternatives d'emplenament disponibles a sobre del teclat</translation> <translation id="8849262850971482943">Utilitza la teva targeta virtual per millorar la seguretat</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb index 7c30410a..f088b90 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cs.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Přejetím prstem zobrazíte další návrhy</translation> <translation id="7873973044507799456">Zobrazit uložené adresy</translation> <translation id="7992095260806105436">Používat návrhy automatického vyplňování Chromu</translation> -<translation id="8507520749471379845">Jsou k dispozici hesla</translation> <translation id="8705308553596171387">Žádné heslo</translation> <translation id="879180780857354295">Alternativní možnosti vyplnění jsou k dispozici nad klávesnicí</translation> <translation id="8849262850971482943">Pro větší bezpečnost používejte virtuální kartu</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cy.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cy.xtb index b65febe..25905d4f 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cy.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_cy.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Sweipiwch i weld rhagor o awgrymiadau</translation> <translation id="7873973044507799456">Dangos cyfeiriadau sydd wedi'u cadw</translation> <translation id="7992095260806105436">Defnyddio awgrym awtolenwi Chrome</translation> -<translation id="8507520749471379845">Mae cyfrineiriau ar gael</translation> <translation id="8705308553596171387">Dim cyfrinair</translation> <translation id="879180780857354295">Mae dewisiadau llenwi amgen ar gael uwchben y bysellfwrdd</translation> <translation id="8849262850971482943">Defnyddiwch eich cerdyn rhithwir am ddiogelwch ychwanegol</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb index 91574b6..483dc51f 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_da.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Stryg for at se flere forslag</translation> <translation id="7873973044507799456">Vis gemte adresser</translation> <translation id="7992095260806105436">Brug forslag fra Autofyld i Chrome</translation> -<translation id="8507520749471379845">Tilgængelige adgangskoder</translation> <translation id="8705308553596171387">Ingen adgangskode</translation> <translation id="879180780857354295">Alternative udfyldningsmuligheder er tilgængelige over tastaturet</translation> <translation id="8849262850971482943">Brug dit virtuelle kort som ekstra beskyttelse</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb index 7966c17..f3405d3ba3 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_de.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Wischen, um weitere Vorschläge zu sehen</translation> <translation id="7873973044507799456">Gespeicherte Adressen anzeigen</translation> <translation id="7992095260806105436">Chrome-Autofill-Vorschlag verwenden</translation> -<translation id="8507520749471379845">Passwörter verfügbar</translation> <translation id="8705308553596171387">Kein Passwort</translation> <translation id="879180780857354295">Über der Tastatur werden alternative Ausfüll-Optionen angezeigt</translation> <translation id="8849262850971482943">Verwende für zusätzliche Sicherheit deine virtuelle Karte</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb index 8632bee..1f72e24 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_el.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Σύρετε για να δείτε περισσότερες προτάσεις</translation> <translation id="7873973044507799456">Εμφάνιση αποθηκευμένων διευθύνσεων</translation> <translation id="7992095260806105436">Χρησιμοποιήστε την πρόταση αυτόματης συμπλήρωσης του Chrome.</translation> -<translation id="8507520749471379845">Υπάρχουν διαθέσιμοι κωδικοί πρόσβασης</translation> <translation id="8705308553596171387">Κανένας κωδικός πρόσβασης</translation> <translation id="879180780857354295">Διατίθενται εναλλακτικές επιλογές συμπλήρωσης πάνω από το πληκτρολόγιο</translation> <translation id="8849262850971482943">Χρησιμοποιήστε την εικονική σας κάρτα για πρόσθετη ασφάλεια</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb index cf214ea..b81a851 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Swipe to see more suggestions</translation> <translation id="7873973044507799456">Show saved addresses</translation> <translation id="7992095260806105436">Use Chrome autofill suggestion</translation> -<translation id="8507520749471379845">Passwords available</translation> <translation id="8705308553596171387">No password</translation> <translation id="879180780857354295">Alternative filling options available above the keyboard</translation> <translation id="8849262850971482943">Use your virtual card for added security</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb index 2dc82e6..dcc6d47 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Desliza el dedo para ver más sugerencias</translation> <translation id="7873973044507799456">Mostrar direcciones guardadas</translation> <translation id="7992095260806105436">Usa la sugerencia de Autocompletar de Chrome.</translation> -<translation id="8507520749471379845">Contraseñas disponibles</translation> <translation id="8705308553596171387">Sin contraseña</translation> <translation id="879180780857354295">Las opciones alternativas de relleno están disponibles arriba del teclado</translation> <translation id="8849262850971482943">Usa tu tarjeta virtual para mejorar la seguridad</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb index 2055ca3..470638c0 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Desliza el dedo para ver más sugerencias</translation> <translation id="7873973044507799456">Mostrar direcciones guardadas</translation> <translation id="7992095260806105436">Utilizar sugerencia de Autocompletar de Chrome</translation> -<translation id="8507520749471379845">Contraseñas disponibles</translation> <translation id="8705308553596171387">Sin contraseña</translation> <translation id="879180780857354295">Opciones alternativas para rellenar disponibles sobre el teclado</translation> <translation id="8849262850971482943">Usa tu tarjeta virtual para aumentar la seguridad</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb index 46b6f8e9..1f174d1 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_et.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Pühkige, et näha rohkem soovitusi</translation> <translation id="7873973044507799456">Kuva salvestatud aadressid</translation> <translation id="7992095260806105436">Kasuta Chrome'i automaattäite soovitust</translation> -<translation id="8507520749471379845">Paroolid on saadaval</translation> <translation id="8705308553596171387">Parooli pole</translation> <translation id="879180780857354295">Klaviatuuri kohal on saadaval alternatiivsed täitevõimalused</translation> <translation id="8849262850971482943">Suurendage virtuaalse kaardi abil turvalisust</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_eu.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_eu.xtb index 1382e01c..51d210c9 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_eu.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_eu.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Pasatu hatza iradokizun gehiago ikusteko</translation> <translation id="7873973044507799456">Erakutsi gordetako helbideak</translation> <translation id="7992095260806105436">Erabili Chrome-ren automatikoki betetzeko iradokizuna</translation> -<translation id="8507520749471379845">Pasahitzak daude erabilgarri</translation> <translation id="8705308553596171387">Ez da ezarri pasahitzik</translation> <translation id="879180780857354295">Eremuak betetzeko beste aukera batzuk erabilgarri daude teklatuaren gainean</translation> <translation id="8849262850971482943">Segurtasun handiagoa izateko, erabili txartel birtuala</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb index 61e6682..8991203a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fa.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">برای دیدن پیشنهادهای بیشتر، تند بکشید</translation> <translation id="7873973044507799456">نمایش نشانیهای ذخیرهشده</translation> <translation id="7992095260806105436">از پیشنهاد تکمیل خودکار Chrome استفاده کنید</translation> -<translation id="8507520749471379845">گذرواژهها دردسترس است</translation> <translation id="8705308553596171387">گذرواژه لازم نیست</translation> <translation id="879180780857354295">گزینههای تکمیل جایگزین در بالای صفحهکلید دردسترس است</translation> <translation id="8849262850971482943">برای افزایش امنیت، از کارت مجازی استفاده کنید</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb index 5eb61d7d..7b393a2d 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fi.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Pyyhkäise nähdäksesi lisää ehdotuksia</translation> <translation id="7873973044507799456">Näytä tallennetut osoitteet</translation> <translation id="7992095260806105436">Käytä Chromen automaattisen täytön ehdotusta</translation> -<translation id="8507520749471379845">Käytettävissä ovat salasanat</translation> <translation id="8705308553596171387">Ei salasanaa</translation> <translation id="879180780857354295">Vaihtoehtoiset täyttövalinnat saatavilla näppäimistön yläpuolella</translation> <translation id="8849262850971482943">Paranna suojausta virtuaalikortilla</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fil.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fil.xtb index 3914b551..ec1cb6dd 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fil.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fil.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Mag-swipe para makita ang higit pang suhestyon</translation> <translation id="7873973044507799456">Ipakita ang mga naka-save na address</translation> <translation id="7992095260806105436">Gamitin ang suhestyon sa autofill ng Chrome</translation> -<translation id="8507520749471379845">May mga password</translation> <translation id="8705308553596171387">Walang password</translation> <translation id="879180780857354295">Available sa itaas ng keyboard ang mga alternatibong opsyon sa pagpunan</translation> <translation id="8849262850971482943">Gamitin ang iyong virtual card para sa karagdagang seguridad</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr-CA.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr-CA.xtb index 43677e0..06daf00e 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr-CA.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr-CA.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Balayez l'écran pour afficher plus de suggestions</translation> <translation id="7873973044507799456">Afficher les adresses enregistrées</translation> <translation id="7992095260806105436">Utiliser la suggestion de remplissage automatique de Chrome</translation> -<translation id="8507520749471379845">Mots de passe disponibles</translation> <translation id="8705308553596171387">Aucun mot de passe</translation> <translation id="879180780857354295">Les autres options de remplissage automatique sont affichées au-dessus du clavier</translation> <translation id="8849262850971482943">Utilisez votre carte virtuelle pour renforcer la sécurité</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb index 66fc42c..62b94bc2b 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_fr.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Balayez l'écran pour voir plus de suggestions</translation> <translation id="7873973044507799456">Afficher les adresses enregistrées</translation> <translation id="7992095260806105436">Utiliser la suggestion de la saisie automatique de Chrome</translation> -<translation id="8507520749471379845">Mots de passe disponibles</translation> <translation id="8705308553596171387">Aucun mot de passe</translation> <translation id="879180780857354295">Autres options de remplissage disponibles au-dessus du clavier</translation> <translation id="8849262850971482943">Pour plus de sécurité, utilisez votre carte virtuelle</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gl.xtb index 110871b2..18c8017 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gl.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gl.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Pasa o dedo para ver máis suxestións</translation> <translation id="7873973044507799456">Mostrar enderezos gardados</translation> <translation id="7992095260806105436">Usar a suxestión da función de autocompletar de Chrome</translation> -<translation id="8507520749471379845">Contrasinais dispoñibles</translation> <translation id="8705308553596171387">Sen contrasinal</translation> <translation id="879180780857354295">Sobre o teclado hai opcións alternativas para completar</translation> <translation id="8849262850971482943">Para operar con máis seguranza, utiliza a tarxeta virtual</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gu.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gu.xtb index f0fe8b8..89acb94 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gu.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_gu.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">વધુ સૂચનો જોવા માટે સ્વાઇપ કરો</translation> <translation id="7873973044507799456">સાચવેલા સરનામા બતાવો</translation> <translation id="7992095260806105436">Chromeમાં ઑટોમૅટિક રીતે ભરવાની સુવિધાના સૂચનનો ઉપયોગ કરો</translation> -<translation id="8507520749471379845">પાસવર્ડ ઉપલબ્ધ છે</translation> <translation id="8705308553596171387">કોઈ પાસવર્ડ જરૂરી નથી</translation> <translation id="879180780857354295">ભરણ માટેના વૈકલ્પિક વિકલ્પો કીબોર્ડની ઉપર ઉપલબ્ધ છે</translation> <translation id="8849262850971482943">વધારાની સુરક્ષા માટે, તમારા વર્ચ્યુઅલ કાર્ડનો ઉપયોગ કરો</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb index 333641eb..f1053b3 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">ज़्यादा सुझाव देखने के लिए स्वाइप करें</translation> <translation id="7873973044507799456">सेव किए गए पते दिखाएं</translation> <translation id="7992095260806105436">ऑटोमैटिक जानकारी भरने के Chrome के सुझाव का इस्तेमाल करें</translation> -<translation id="8507520749471379845">पासवर्ड उपलब्ध हैं</translation> <translation id="8705308553596171387">पासवर्ड नहीं है</translation> <translation id="879180780857354295">अपने-आप भरने के विकल्प कीबोर्ड के ऊपर उपलब्ध हैं</translation> <translation id="8849262850971482943">अतिरिक्त सुरक्षा के लिए अपना वर्चुअल कार्ड इस्तेमाल करें</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb index 0b074d5..026090e6 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hr.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Prijeđite prstom da biste vidjeli više prijedloga</translation> <translation id="7873973044507799456">Prikaži spremljene adrese</translation> <translation id="7992095260806105436">Upotrijebite Chromeov prijedlog za automatsko popunjavanje</translation> -<translation id="8507520749471379845">Dostupne zaporke</translation> <translation id="8705308553596171387">Nema zaporke</translation> <translation id="879180780857354295">Alternativne opcije popunjavanja dostupne iznad tipkovnice</translation> <translation id="8849262850971482943">Koristite virtualnu karticu radi dodatne sigurnosti</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb index f1b9316..43d95914 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">További javaslatok megtekintéséhez csúsztasson</translation> <translation id="7873973044507799456">Mentett címek megjelenítése</translation> <translation id="7992095260806105436">A Chrome automatikus kitöltési javaslatának használata</translation> -<translation id="8507520749471379845">Mentett jelszavak használhatók</translation> <translation id="8705308553596171387">Nincs jelszó</translation> <translation id="879180780857354295">A billentyűzet fölött alternatív kitöltési lehetőségek találhatók</translation> <translation id="8849262850971482943">Használja virtuális kártyáját a plusz biztonság érdekében</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hy.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hy.xtb index fd22ff3..afa408a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hy.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hy.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Սահեցրեք մատը՝ այլ առաջարկներ տեսնելու համար</translation> <translation id="7873973044507799456">Ցույց տալ պահված հասցեները</translation> <translation id="7992095260806105436">Օգտագործել Chrome-ի ինքնալրացման առաջարկը</translation> -<translation id="8507520749471379845">Հասանելի գաղտնաբառեր</translation> <translation id="8705308553596171387">Գաղտնաբառ չի պահանջվում</translation> <translation id="879180780857354295">Ստեղնաշարի վերևում հասանելի են լրացման այլ տարբերակներ</translation> <translation id="8849262850971482943">Ավելացված անվտանգության կարգավորման համար օգտագործեք ձեր վիրտուալ քարտը</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_id.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_id.xtb index 318ee7b6..0ac0171a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_id.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_id.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Geser untuk melihat saran lainnya</translation> <translation id="7873973044507799456">Tampilkan alamat tersimpan</translation> <translation id="7992095260806105436">Gunakan saran isi otomatis Chrome</translation> -<translation id="8507520749471379845">Sandi tersedia</translation> <translation id="8705308553596171387">Tidak ada sandi</translation> <translation id="879180780857354295">Opsi pengisian alternatif tersedia di atas keyboard</translation> <translation id="8849262850971482943">Gunakan kartu virtual Anda untuk keamanan tambahan</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_is.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_is.xtb index 0103350a..e9cef2d 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_is.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_is.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Strjúktu til að sjá fleiri tillögur</translation> <translation id="7873973044507799456">Sýna vistuð heimilisföng</translation> <translation id="7992095260806105436">Nota tillögu fyrir sjálfvirka útfyllingu í Chrome</translation> -<translation id="8507520749471379845">Tiltæk aðgangsorð</translation> <translation id="8705308553596171387">Ekkert aðgangsorð</translation> <translation id="879180780857354295">Aðrir útfyllingarkostir í boði fyrir ofan lyklaborðið</translation> <translation id="8849262850971482943">Notaðu sýndarkortið þitt til að auka öryggi</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb index 508a275..f9f03e3 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Scorri per vedere altri suggerimenti</translation> <translation id="7873973044507799456">Mostra indirizzi salvati</translation> <translation id="7992095260806105436">Utilizza suggerimento della compilazione automatica di Chrome</translation> -<translation id="8507520749471379845">Password disponibili</translation> <translation id="8705308553596171387">Nessuna password</translation> <translation id="879180780857354295">Opzioni di inserimento alternative disponibili sopra la tastiera</translation> <translation id="8849262850971482943">Usa la carta virtuale per una maggiore sicurezza</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb index 72920df..f9abf79 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_iw.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">יש להחליק כדי לראות עוד הצעות</translation> <translation id="7873973044507799456">הצגת הכתובות שנשמרו</translation> <translation id="7992095260806105436">ניתן להשתמש בהצעות המילוי האוטומטי של Chrome</translation> -<translation id="8507520749471379845">סיסמאות זמינות</translation> <translation id="8705308553596171387">ללא סיסמה</translation> <translation id="879180780857354295">אפשרויות מילוי חלופיות מוצגות מעל למקלדת</translation> <translation id="8849262850971482943">כדי להגביר את רמת האבטחה, יש להשתמש בכרטיס וירטואלי</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb index 386ff0d..4dd4d6dd 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ja.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">スワイプして他の候補を表示</translation> <translation id="7873973044507799456">保存した住所を表示します</translation> <translation id="7992095260806105436">Chrome の自動入力候補を使用する</translation> -<translation id="8507520749471379845">使用可能なパスワード</translation> <translation id="8705308553596171387">パスワードなし</translation> <translation id="879180780857354295">キーボード上部で別の入力候補を選択できます</translation> <translation id="8849262850971482943">セキュリティを強化するには仮想カードを使用してください</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ka.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ka.xtb index c4aeeb5..0d93ff79 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ka.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ka.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">გადაფურცლეთ სხვა შემოთავაზებების სანახავად</translation> <translation id="7873973044507799456">შენახული მისამართების ჩვენება</translation> <translation id="7992095260806105436">Chrome-ის ავტომატური შევსების შემოთავაზების გამოყენება</translation> -<translation id="8507520749471379845">პაროლები ხელმისაწვდომია</translation> <translation id="8705308553596171387">პაროლის გარეშე</translation> <translation id="879180780857354295">კლავიატურის ზემოთ ხელმისაწვდომია შევსების ალტერნატიული ვარიანტები</translation> <translation id="8849262850971482943">დამატებითი უსაფრთხოებისთვის გამოიყენეთ თქვენი ვირტუალური ბარათი</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kk.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kk.xtb index e665888..3acee13 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kk.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kk.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Басқа ұсыныстарды көру үшін сырғытыңыз.</translation> <translation id="7873973044507799456">Сақталған мекенжайларды көрсету</translation> <translation id="7992095260806105436">Ұсыныстарды автоматты түрде толтыру үшін Chrome-ды пайдаланыңыз.</translation> -<translation id="8507520749471379845">Қолжетімді құпия сөздер</translation> <translation id="8705308553596171387">Құпия сөз жоқ</translation> <translation id="879180780857354295">Пернетақтаның жоғарғы жағында балама толтыру опциялары бар.</translation> <translation id="8849262850971482943">Қауіпсіздікті арттыру үшін виртуалдық картаны пайдаланыңыз.</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_km.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_km.xtb index dedcc8b..af62d8f 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_km.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_km.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">អូសដើម្បីមើលការណែនាំច្រើនទៀត</translation> <translation id="7873973044507799456">បង្ហាញអាសយដ្ឋានដែលបានរក្សាទុក</translation> <translation id="7992095260806105436">ប្រើការណែនាំអំពីការបំពេញស្វ័យប្រវត្តិរបស់ Chrome</translation> -<translation id="8507520749471379845">ពាក្យសម្ងាត់ដែលអាចប្រើបាន</translation> <translation id="8705308553596171387">គ្មានពាក្យសម្ងាត់ទេ</translation> <translation id="879180780857354295">មានជម្រើសបំពេញជំនួសនៅខាងលើក្ដារចុច</translation> <translation id="8849262850971482943">ប្រើកាតនិម្មិតរបស់អ្នក ដើម្បីទទួលបានសុវត្ថិភាពបន្ថែម</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb index fccb1dc..027b365 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_kn.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">ಇನ್ನಷ್ಟು ಸಲಹೆಗಳನ್ನು ನೋಡಲು ಸ್ವೈಪ್ ಮಾಡಿ</translation> <translation id="7873973044507799456">ಉಳಿಸಲಾದ ವಿಳಾಸಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="7992095260806105436">Chrome ಸ್ವಯಂ ಭರ್ತಿ ಸಲಹೆಗಳನ್ನು ಬಳಸಿ</translation> -<translation id="8507520749471379845">ಪಾಸ್ವರ್ಡ್ಗಳು ಲಭ್ಯವಿವೆ</translation> <translation id="8705308553596171387">ಯಾವುದೇ ಪಾಸ್ವರ್ಡ್ ಇಲ್ಲ</translation> <translation id="879180780857354295">ಭರ್ತಿ ಮಾಡುವ ಕುರಿತ ಪರ್ಯಾಯ ಆಯ್ಕೆಗಳು ಕೀಬೋರ್ಡ್ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಲಭ್ಯವಿವೆ</translation> <translation id="8849262850971482943">ಹೆಚ್ಚಿನ ಸುರಕ್ಷತೆಗಾಗಿ ನಿಮ್ಮ ವರ್ಚುವಲ್ ಕಾರ್ಡ್ ಅನ್ನು ಬಳಸಿ</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ko.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ko.xtb index eab3f312..1c6ecdd 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ko.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ko.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">스와이프하여 추천 더보기</translation> <translation id="7873973044507799456">저장된 주소 표시</translation> <translation id="7992095260806105436">Chrome 자동 완성 추천 사용</translation> -<translation id="8507520749471379845">사용할 수 있는 비밀번호</translation> <translation id="8705308553596171387">비밀번호 없음</translation> <translation id="879180780857354295">키보드 위에서 사용할 수 있는 대체 채우기 옵션</translation> <translation id="8849262850971482943">보안 강화를 위해 가상 카드 사용하기</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ky.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ky.xtb index a8c9e2a7..c2a2dbdb 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ky.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ky.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Дагы сунуштарды көрүү үчүн экранды сүрүп коюңуз</translation> <translation id="7873973044507799456">Сакталган даректерди көрсөтүү</translation> <translation id="7992095260806105436">Chrome'дун автотолтуруу сунушун колдонуңуз</translation> -<translation id="8507520749471379845">Сырсөздөр жеткиликтүү</translation> <translation id="8705308553596171387">Сырсөз талап кылынбайт</translation> <translation id="879180780857354295">Кошумча толтуруу параметрлери баскычтоптун жогору жагында жеткиликтүү</translation> <translation id="8849262850971482943">Кошумча коопсуздук үчүн виртуалдык картаңызды колдонуңуз</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lo.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lo.xtb index f1f6d812..87970f0 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lo.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lo.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">ປັດເພື່ອເບິ່ງການແນະນຳເພີ່ມເຕີມ</translation> <translation id="7873973044507799456">ສະແດງທີ່ຢູ່ທີ່ບັນທຶກໄວ້</translation> <translation id="7992095260806105436">ໃຊ້ການແນະນຳການຕື່ມຂໍ້ມູນອັດຕະໂນມັດຂອງ Chrome</translation> -<translation id="8507520749471379845">ມີລະຫັດຜ່ານ</translation> <translation id="8705308553596171387">ບໍ່ມີລະຫັດຜ່ານ</translation> <translation id="879180780857354295">ມີຕົວເລືອກການຕື່ມຂໍ້ມູນສຳຮອງຢູ່ທາງເທິງຂອງແປ້ນພິມ</translation> <translation id="8849262850971482943">ໃຊ້ບັດສະເໝືອນຂອງທ່ານເພື່ອເພີ່ມຄວາມປອດໄພ</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lt.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lt.xtb index 883def7..f21c5c1 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lt.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lt.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Perbraukite, kad peržiūrėtumėte daugiau pasiūlymų</translation> <translation id="7873973044507799456">Rodyti išsaugotus adresus</translation> <translation id="7992095260806105436">Naudoti „Chrome“ automatinio pildymo pasiūlymą</translation> -<translation id="8507520749471379845">Pasiekiami slaptažodžiai</translation> <translation id="8705308553596171387">Nepateiktas slaptažodis</translation> <translation id="879180780857354295">Alternatyvios užpildymo parinktys pateikiamos virš klaviatūros</translation> <translation id="8849262850971482943">Naudokite virtualią kortelę didesnei saugai užtikrinti</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb index 5d7415b4..7a14aa5 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_lv.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Velciet, lai skatītu citus ieteikumus</translation> <translation id="7873973044507799456">Rādīt saglabātās adreses</translation> <translation id="7992095260806105436">Izmantojiet Chrome automātiskās aizpildes ieteikumu</translation> -<translation id="8507520749471379845">Ir pieejamas paroles</translation> <translation id="8705308553596171387">Nav paroles</translation> <translation id="879180780857354295">Virs tastatūras ir pieejami alternatīvi aizpildījuma ieteikumi</translation> <translation id="8849262850971482943">Papildu drošībai izmantojiet virtuālo karti</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mk.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mk.xtb index 7a3cd52d3..ed15a32 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mk.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mk.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Повлечете за да видите повеќе предлози</translation> <translation id="7873973044507799456">Прикажи ги зачуваните адреси</translation> <translation id="7992095260806105436">Користете го предлогот за автоматско пополнување на Chrome</translation> -<translation id="8507520749471379845">Достапни лозинки</translation> <translation id="8705308553596171387">Нема лозинка</translation> <translation id="879180780857354295">Алтернативни опции за пополнување се достапни над тастатурата</translation> <translation id="8849262850971482943">Користете ја виртуелната картичка за дополнителна безбедност</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb index 8037917..4aca1e6 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">കൂടുതൽ നിർദ്ദേശങ്ങൾ കാണാൻ സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="7873973044507799456">സംരക്ഷിച്ച വിലാസങ്ങൾ കാണിക്കുക</translation> <translation id="7992095260806105436">Chrome ഓട്ടോഫിൽ നിർദ്ദേശം ഉപയോഗിക്കുക</translation> -<translation id="8507520749471379845">പാസ്വേഡുകള് ലഭ്യമാണ്</translation> <translation id="8705308553596171387">പാസ്വേഡ് ഇല്ല</translation> <translation id="879180780857354295">കീബോർഡിന് മുകളിൽ ഇതര പൂരിപ്പിക്കൽ ഓപ്ഷനുകൾ ലഭ്യമാണ്</translation> <translation id="8849262850971482943">അധിക സുരക്ഷയ്ക്ക് നിങ്ങളുടെ വെർച്വൽ കാർഡ് ഉപയോഗിക്കുക</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mn.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mn.xtb index 6382909b..c58b824 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mn.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mn.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Илүү олон зөвлөмж харахын тулд шударна уу</translation> <translation id="7873973044507799456">Хадгалсан хаягуудыг харуулах</translation> <translation id="7992095260806105436">Chrome-н автоматаар бөглөх хэсгийн зөвлөмжийг ашиглана уу</translation> -<translation id="8507520749471379845">Боломжтой нууц үг</translation> <translation id="8705308553596171387">Нууц үг алга</translation> <translation id="879180780857354295">Бөглөх өөр сонголт гарын дээр боломжтой байна</translation> <translation id="8849262850971482943">Нэмэлт аюулгүй байдлын үүднээс виртуал картаа ашиглана уу</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mr.xtb index d197791..b89038d 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mr.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_mr.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">आणखी सूचना पाहण्यासाठी स्वाइप करा</translation> <translation id="7873973044507799456">सेव्ह केलेले पत्ते दाखवा</translation> <translation id="7992095260806105436">Chrome ऑटोफिल सूचना वापरा</translation> -<translation id="8507520749471379845">पासवर्ड उपलब्ध आहे</translation> <translation id="8705308553596171387">पासवर्ड नाही</translation> <translation id="879180780857354295">कीबोर्डच्या वरती पर्यायी भरण्याचे पर्याय उपलब्ध आहेत</translation> <translation id="8849262850971482943">अतिरिक्त सुरक्षेसाठी तुमचे व्हर्च्युअल कार्ड वापरा</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb index e1af396..edd37d4 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ms.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Leret untuk melihat pelbagai lagi cadangan</translation> <translation id="7873973044507799456">Tunjukkan alamat yang telah disimpan</translation> <translation id="7992095260806105436">Gunakan cadangan autolengkap Chrome</translation> -<translation id="8507520749471379845">Kata laluan tersedia</translation> <translation id="8705308553596171387">Tiada kata laluan</translation> <translation id="879180780857354295">Pilihan pengisian alternatif tersedia di atas papan kekunci</translation> <translation id="8849262850971482943">Gunakan kad maya anda untuk mendapatkan keselamatan tambahan</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_my.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_my.xtb index 814863c..0942699 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_my.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_my.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">နောက်ထပ်အကြံပြုချက်များ ကြည့်ရန် ပွတ်ဆွဲပါ</translation> <translation id="7873973044507799456">သိမ်းထားသော လိပ်စာများ ပြပေးသည်</translation> <translation id="7992095260806105436">Chrome အော်တိုဖြည့် အကြံပြုချက် အသုံးပြုပါ</translation> -<translation id="8507520749471379845">စကားဝှက်များ ရနိုင်သည်</translation> <translation id="8705308553596171387">စကားဝှက် မရှိပါ</translation> <translation id="879180780857354295">လက်ကွက်အပေါ်တွင် အခြားဖြည့်စွက်ရွေးစရာများ ရနိုင်သည်</translation> <translation id="8849262850971482943">ထပ်ဆောင်းလုံခြုံရေးအတွက် သင်၏ပကတိအသွင်ကတ် သုံးပါ</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ne.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ne.xtb index dc7606c..e633c88 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ne.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ne.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">थप सुझावहरू हेर्न स्वाइप गर्नुहोस्</translation> <translation id="7873973044507799456">सेभ गरिएका ठेगानाहरू देखाउनुहोस्</translation> <translation id="7992095260806105436">Chrome को अटोफिलसम्बन्धी सुझाव प्रयोग गर्नुहोस्</translation> -<translation id="8507520749471379845">पासवर्डहरू उपलब्ध छन्</translation> <translation id="8705308553596171387">कुनै पासवर्ड छैन</translation> <translation id="879180780857354295">जानकारी भर्ने वैकल्पिक विकल्पहरू किबोर्डमाथि उपलब्ध छन्</translation> <translation id="8849262850971482943">थप सुरक्षाका निम्ति भर्चुअल कार्ड प्रयोग गर्नुहोस्</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb index b99baee..1da6806 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_nl.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Swipe om meer suggesties te zien</translation> <translation id="7873973044507799456">Opgeslagen adressen tonen</translation> <translation id="7992095260806105436">Suggesties voor automatisch invullen van Chrome gebruiken</translation> -<translation id="8507520749471379845">Wachtwoorden beschikbaar</translation> <translation id="8705308553596171387">Geen wachtwoord</translation> <translation id="879180780857354295">Alternatieve invulopties beschikbaar boven het toetsenbord</translation> <translation id="8849262850971482943">Gebruik je virtuele kaart voor extra beveiliging</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb index ec260d07..f628131c 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Sveip for å se flere forslag</translation> <translation id="7873973044507799456">Vis lagrede adresser</translation> <translation id="7992095260806105436">Bruk autofyllforslag fra Chrome</translation> -<translation id="8507520749471379845">Passord er tilgjengelige</translation> <translation id="8705308553596171387">Ingen passord</translation> <translation id="879180780857354295">Du finner andre utfyllingsalternativer over tastaturet</translation> <translation id="8849262850971482943">Bruk det virtuelle kortet ditt for ekstra sikkerhet</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_or.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_or.xtb index 340407a7..5ae14344 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_or.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_or.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">ଅଧିକ ପରାମର୍ଶ ଦେଖିବାକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ</translation> <translation id="7873973044507799456">ସେଭ କରାଯାଇଥିବା ଠିକଣାଗୁଡ଼ିକ ଦେଖାନ୍ତୁ</translation> <translation id="7992095260806105436">Chromeର ସ୍ୱତଃପୂରଣ ପରାମର୍ଶ ବ୍ୟବହାର କରନ୍ତୁ</translation> -<translation id="8507520749471379845">ପାସ୍ୱାର୍ଡ ଉପଲବ୍ଧ ଅଛି</translation> <translation id="8705308553596171387">କୌଣସି ପାସୱାର୍ଡ ନାହିଁ</translation> <translation id="879180780857354295">କୀବୋର୍ଡ ଉପରେ ବୈକଳ୍ପିକ ଭାବେ ପୂରଣ କରିବାର ବିକଳ୍ପ ଉପଲବ୍ଧ</translation> <translation id="8849262850971482943">ଅଧିକ ସୁରକ୍ଷା ପାଇଁ ଆପଣଙ୍କ ଭର୍ଚୁଆଲ୍ କାର୍ଡ ବ୍ୟବହାର କରନ୍ତୁ</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pa.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pa.xtb index 6896a19..8d86547 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pa.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pa.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">ਹੋਰ ਸੁਝਾਅ ਦੇਖਣ ਲਈ ਸਵਾਈਪ ਕਰੋ</translation> <translation id="7873973044507799456">ਰੱਖਿਅਤ ਕੀਤੇ ਪਤੇ ਦਿਖਾਓ</translation> <translation id="7992095260806105436">Chrome ਆਟੋਫਿਲ ਸੁਝਾਅ ਵਰਤੋ</translation> -<translation id="8507520749471379845">ਪਾਸਵਰਡ ਉਪਲਬਧ ਹਨ</translation> <translation id="8705308553596171387">ਕੋਈ ਪਾਸਵਰਡ ਨਹੀਂ</translation> <translation id="879180780857354295">ਜਾਣਕਾਰੀ ਭਰਨ ਵਾਲੇ ਵਿਕਲਪਿਕ ਵਿਕਲਪ ਕੀ-ਬੋਰਡ ਦੇ ਉੱਪਰ ਉਪਲਬਧ ਹਨ</translation> <translation id="8849262850971482943">ਵਾਧੂ ਸੁਰੱਖਿਆ ਲਈ ਆਪਣੇ ਆਭਾਸੀ ਕਾਰਡ ਦੀ ਵਰਤੋਂ ਕਰੋ</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb index 5074ce8..1404ae8 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Przesuń palcem, by zobaczyć więcej sugestii</translation> <translation id="7873973044507799456">Pokaż zapisane adresy</translation> <translation id="7992095260806105436">Użyj sugestii autouzupełniania Chrome</translation> -<translation id="8507520749471379845">Dostępne są hasła</translation> <translation id="8705308553596171387">Brak hasła</translation> <translation id="879180780857354295">Nad klawiaturą dostępne są alternatywne opcje wypełnienia</translation> <translation id="8849262850971482943">Aby zwiększyć bezpieczeństwo, użyj karty wirtualnej</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb index 49c870d..a82c7709 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Deslize para ver mais sugestões</translation> <translation id="7873973044507799456">Mostrar endereços salvos</translation> <translation id="7992095260806105436">Usar a sugestão de preenchimento automático do Chrome</translation> -<translation id="8507520749471379845">Senhas disponíveis</translation> <translation id="8705308553596171387">Nenhuma senha</translation> <translation id="879180780857354295">Opções alternativas de preenchimento disponíveis acima do teclado</translation> <translation id="8849262850971482943">Use seu cartão virtual para aumentar a segurança</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb index 3ac5a22..1eb2666a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Deslize rapidamente para ver mais sugestões</translation> <translation id="7873973044507799456">Mostrar moradas guardadas</translation> <translation id="7992095260806105436">Utilize as sugestões de preenchimento automático do Chrome.</translation> -<translation id="8507520749471379845">Palavras-passe disponíveis</translation> <translation id="8705308553596171387">Sem palavra-passe</translation> <translation id="879180780857354295">Opções de preenchimento alternativas disponíveis acima do teclado</translation> <translation id="8849262850971482943">Utilize o seu cartão virtual para maior segurança</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb index 48284be..17d9250 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ro.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Glisează pentru a vedea mai multe sugestii</translation> <translation id="7873973044507799456">Afișează adresele salvate</translation> <translation id="7992095260806105436">Folosește sugestia de completare automată din Chrome</translation> -<translation id="8507520749471379845">Parole disponibile</translation> <translation id="8705308553596171387">Nicio parolă</translation> <translation id="879180780857354295">Opțiuni de completare alternative disponibile deasupra tastaturii</translation> <translation id="8849262850971482943">Folosește cardul virtual pentru mai multă securitate</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb index 306addac..33e2af9 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ru.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Проведите по экрану, чтобы увидеть другие подсказки</translation> <translation id="7873973044507799456">Показать сохраненные адреса</translation> <translation id="7992095260806105436">Использовать вариант автозаполнения, предложенный Chrome</translation> -<translation id="8507520749471379845">Доступные варианты паролей</translation> <translation id="8705308553596171387">Без пароля</translation> <translation id="879180780857354295">Над клавиатурой доступны другие варианты заполнения</translation> <translation id="8849262850971482943">Для дополнительной защиты используйте виртуальную карту.</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_si.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_si.xtb index 621da61..9343b03f 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_si.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_si.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">තව යෝජනා බැලීමට ස්වයිප් කරන්න</translation> <translation id="7873973044507799456">සුරකින ලද ලිපින පෙන්වන්න</translation> <translation id="7992095260806105436">Chrome ස්වයං පිරවුම් යෝජනාව භාවිත කරන්න</translation> -<translation id="8507520749471379845">මුරපද තිබේ</translation> <translation id="8705308553596171387">මුරපදයක් නැත</translation> <translation id="879180780857354295">යතුරු පුවරුවට ඉහළින් විකල්ප පිරවුම් විකල්ප තිබේ</translation> <translation id="8849262850971482943">අමතර ආරක්ෂාව සඳහා ඔබගේ අතථ්ය කාඩ්පත භාවිත කරන්න</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb index 568c128..bbad4874 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sk.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Potiahnutím zobrazíte ďalšie návrhy</translation> <translation id="7873973044507799456">Zobraziť uložené adresy</translation> <translation id="7992095260806105436">Použite návrh automtického dopĺňania v Chrome</translation> -<translation id="8507520749471379845">K dispozícii sú heslá</translation> <translation id="8705308553596171387">Žiadne heslo</translation> <translation id="879180780857354295">Alternatívne možnosti dopĺňania nad klávesnicou</translation> <translation id="8849262850971482943">V záujme vyššej bezpečnosti použite virtuálnu kartu</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb index 751d9033..e044799 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb
@@ -21,7 +21,6 @@ <translation id="7594473730623999723">Povlecite, če si želite ogledati več predlogov.</translation> <translation id="7873973044507799456">Prikaz shranjenih naslovov</translation> <translation id="7992095260806105436">Uporabite Chromov predlog samodejnega izpolnjevanja</translation> -<translation id="8507520749471379845">Gesla so na voljo</translation> <translation id="8705308553596171387">Brez gesla</translation> <translation id="879180780857354295">Druge možnosti izpolnjevanja so na voljo nad tipkovnico</translation> <translation id="8849262850971482943">Uporabite navidezno kartico za večjo varnost.</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sq.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sq.xtb index fec87aed..b6ac8f31 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sq.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sq.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Rrëshqit shpejt për të parë më shumë sugjerime</translation> <translation id="7873973044507799456">Shfaq adresat e ruajtura</translation> <translation id="7992095260806105436">Përdor sugjerimin për plotësimin automatik të Chrome</translation> -<translation id="8507520749471379845">Fjalëkalimet që ofrohen</translation> <translation id="8705308553596171387">Pa fjalëkalim</translation> <translation id="879180780857354295">Opsionet alternative të mbushjes ofrohen mbi tastierë</translation> <translation id="8849262850971482943">Përdor kartën tënde virtuale për më shumë siguri</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb index f658ab6..95a2efae 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Prevucite da biste videli još predloga</translation> <translation id="7873973044507799456">Prikaži sačuvane adrese</translation> <translation id="7992095260806105436">Koristite predlog Chrome automatskog popunjavanja</translation> -<translation id="8507520749471379845">Dostupne su lozinke</translation> <translation id="8705308553596171387">Bez lozinke</translation> <translation id="879180780857354295">Alternativne opcije popunjavanja su dostupne iznad tastature</translation> <translation id="8849262850971482943">Koristite virtuelnu karticu radi dodatne bezbednosti</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb index 96be4521..c3229df 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Превуците да бисте видели још предлога</translation> <translation id="7873973044507799456">Прикажи сачуване адресе</translation> <translation id="7992095260806105436">Користите предлог Chrome аутоматског попуњавања</translation> -<translation id="8507520749471379845">Доступне су лозинке</translation> <translation id="8705308553596171387">Без лозинке</translation> <translation id="879180780857354295">Алтернативне опције попуњавања су доступне изнад тастатуре</translation> <translation id="8849262850971482943">Користите виртуелну картицу ради додатне безбедности</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb index 6139ce5..2646c4c 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Svep om du vill se fler förslag</translation> <translation id="7873973044507799456">Visa sparade adresser</translation> <translation id="7992095260806105436">Använd förslag från Autofyll i Chrome</translation> -<translation id="8507520749471379845">Lösenord finns tillgängliga</translation> <translation id="8705308553596171387">Inget lösenord</translation> <translation id="879180780857354295">Alternativa fyllnadsalternativ är tillgängliga ovanför tangentbordet</translation> <translation id="8849262850971482943">Använd det virtuella kreditkortet för ökad säkerhet</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sw.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sw.xtb index 17a3a0f..76d157c 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sw.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sw.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Telezesha kidole ili uone mapendekezo zaidi</translation> <translation id="7873973044507799456">Onyesha anwani zilizohifadhiwa</translation> <translation id="7992095260806105436">Tumia pendekezo la kujaza kiotomatiki la Chrome</translation> -<translation id="8507520749471379845">Manenosiri yanapatikana</translation> <translation id="8705308553596171387">Hakuna nenosiri</translation> <translation id="879180780857354295">Chaguo mbadala za kujaza zinapatikana juu ya kibodi</translation> <translation id="8849262850971482943">Tumia kadi yako pepe kwa usalama wa ziada</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb index 7be54671..0f768d79 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ta.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">மேலும் பரிந்துரைகளைப் பார்க்க ஸ்வைப் செய்யவும்</translation> <translation id="7873973044507799456">சேமிக்கப்பட்ட முகவரிகளைக் காட்டும்</translation> <translation id="7992095260806105436">Chromeமின் தன்னிரப்பிப் பரிந்துரையைப் பயன்படுத்துங்கள்</translation> -<translation id="8507520749471379845">கடவுச்சொற்கள் உள்ளன</translation> <translation id="8705308553596171387">கடவுச்சொல் இல்லை</translation> <translation id="879180780857354295">மாற்று நிரப்புதல் விருப்பங்கள் கீபோர்டுக்கு மேலே உள்ளன</translation> <translation id="8849262850971482943">கூடுதல் பாதுகாப்பிற்கு விர்ச்சுவல் கார்டைப் பயன்படுத்தவும்</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb index cf746a0..9484c8d 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">మరిన్ని సూచనలను చూడటం కోసం స్వైప్ చేయండి</translation> <translation id="7873973044507799456">సేవ్ చేసిన అడ్రస్లను చూడండి</translation> <translation id="7992095260806105436">Chrome ఆటోఫిల్ సూచనను ఉపయోగించండి</translation> -<translation id="8507520749471379845">అందుబాటులో ఉన్న పాస్వర్డ్లు</translation> <translation id="8705308553596171387">పాస్వర్డ్ ఏదీ లేదు</translation> <translation id="879180780857354295">ప్రత్యామ్నాయంగా పూరించే ఆప్షన్లు కీబోర్డ్ పైన అందుబాటులో ఉన్నాయి</translation> <translation id="8849262850971482943">అదనపు భద్రత కోసం మీ వర్చువల్ కార్డ్ను ఉపయోగించండి</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb index b87b3c31..90c731c 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">เลื่อนเพื่อดูคำแนะนำเพิ่มเติม</translation> <translation id="7873973044507799456">แสดงที่อยู่ที่บันทึกไว้</translation> <translation id="7992095260806105436">ใช้คำแนะนำการป้อนข้อความอัตโนมัติใน Chrome</translation> -<translation id="8507520749471379845">รหัสผ่านที่มีอยู่</translation> <translation id="8705308553596171387">ไม่มีรหัสผ่าน</translation> <translation id="879180780857354295">ตัวเลือกการกรอกอื่นๆ แสดงอยู่เหนือแป้นพิมพ์</translation> <translation id="8849262850971482943">ใช้บัตรเสมือนเพื่อเพิ่มความปลอดภัย</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_tr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_tr.xtb index 0222876b..01a07e1 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_tr.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_tr.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Diğer önerileri görmek için kaydırın</translation> <translation id="7873973044507799456">Kayıtlı adresleri göster</translation> <translation id="7992095260806105436">Chrome otomatik doldurma önerisini kullan</translation> -<translation id="8507520749471379845">Kullanılabilir şifreler</translation> <translation id="8705308553596171387">Şifre yok</translation> <translation id="879180780857354295">Klavyenin üzerinde alternatif doldurma seçenekleri mevcut</translation> <translation id="8849262850971482943">Güvenliği artırmak için sanal kartınızı kullanın</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb index 9830cd8a..aa6456d 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uk.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Гортайте, щоб переглянути інші пропозиції</translation> <translation id="7873973044507799456">Показати збережені адреси</translation> <translation id="7992095260806105436">Використати пропозицію автозаповнення Chrome</translation> -<translation id="8507520749471379845">Доступні паролі</translation> <translation id="8705308553596171387">Немає пароля</translation> <translation id="879180780857354295">Над клавіатурою показано альтернативні варіанти заповнення</translation> <translation id="8849262850971482943">Скористайтеся віртуальною карткою для додаткової безпеки</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ur.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ur.xtb index b7b8121..cfd8cff 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ur.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ur.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">مزید تجاویز دیکھنے کے لئے سوائپ کریں</translation> <translation id="7873973044507799456">محفوظ کردہ پتے دکھائیں</translation> <translation id="7992095260806105436">Chrome آٹو فل تجویز استعمال کریں</translation> -<translation id="8507520749471379845">پاس ورڈز دستیاب ہیں</translation> <translation id="8705308553596171387">کوئی پاس ورڈ نہیں</translation> <translation id="879180780857354295">کی بورڈ کے اوپر پُر کرنے کے متبادل اختیارات دستیاب ہیں</translation> <translation id="8849262850971482943">اضافی سیکیورٹی کے لیے اپنا ورچوئل کارڈ استعمال کریں</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uz.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uz.xtb index f298822..d6f9063f 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uz.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_uz.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Yana takliflar olish uchun suring</translation> <translation id="7873973044507799456">Saqlangan manzillar</translation> <translation id="7992095260806105436">Chrome avtomatik kiritish taklifidan foydalanish</translation> -<translation id="8507520749471379845">Saqlangan parollar</translation> <translation id="8705308553596171387">Parolsiz</translation> <translation id="879180780857354295">Muqobil kiritish sozlamalari klaviatura tepasida chiqadi</translation> <translation id="8849262850971482943">Xavfsizlikni oshirish uchun virtual kartadan foydalaning</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_vi.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_vi.xtb index cc3857c7..510033f 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_vi.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_vi.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Vuốt để xem thêm mục đề xuất</translation> <translation id="7873973044507799456">Hiện các địa chỉ đã lưu</translation> <translation id="7992095260806105436">Sử dụng nội dung tự động điền do Chrome đề xuất</translation> -<translation id="8507520749471379845">Mật khẩu sẵn có</translation> <translation id="8705308553596171387">Không có mật khẩu</translation> <translation id="879180780857354295">Các tuỳ chọn điền thay thế hiển thị phía trên bàn phím</translation> <translation id="8849262850971482943">Sử dụng thẻ ảo để tăng thêm tính bảo mật</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-CN.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-CN.xtb index 0acebeb..b02be57 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-CN.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-CN.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">滑动可查看更多建议</translation> <translation id="7873973044507799456">显示已保存的地址</translation> <translation id="7992095260806105436">使用 Chrome 自动填充建议</translation> -<translation id="8507520749471379845">有可用密码</translation> <translation id="8705308553596171387">无密码</translation> <translation id="879180780857354295">键盘上方显示了备用的填充选项</translation> <translation id="8849262850971482943">使用您的虚拟卡提升安全性</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-HK.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-HK.xtb index 706b6f1..1bee854 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-HK.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-HK.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">滑動即可查看更多建議</translation> <translation id="7873973044507799456">顯示已儲存的地址</translation> <translation id="7992095260806105436">使用 Chrome 自動填入建議</translation> -<translation id="8507520749471379845">有可用嘅密碼</translation> <translation id="8705308553596171387">無需密碼</translation> <translation id="879180780857354295">顯示喺鍵盤上面嘅其他填入選項</translation> <translation id="8849262850971482943">使用虛擬卡以提升安全性</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-TW.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-TW.xtb index e1ba2f6..96eff75 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-TW.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zh-TW.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">滑動即可查看更多建議項目</translation> <translation id="7873973044507799456">顯示已儲存的地址</translation> <translation id="7992095260806105436">使用 Chrome 自動填入建議項目</translation> -<translation id="8507520749471379845">有可用的密碼</translation> <translation id="8705308553596171387">沒有密碼</translation> <translation id="879180780857354295">鍵盤上方是系統提供的其他填入選項</translation> <translation id="8849262850971482943">使用虛擬卡片讓安全更有保障</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zu.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zu.xtb index 04329704..331a382 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zu.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_zu.xtb
@@ -22,7 +22,6 @@ <translation id="7594473730623999723">Swayipha ukuze ubone iziphakamiso eziningi</translation> <translation id="7873973044507799456">Bonisa amakheli alondoloziwe</translation> <translation id="7992095260806105436">Sebenzisa isiphakamiso sokugcwalisa ngokuzenzakalela se-Chrome</translation> -<translation id="8507520749471379845">Amaphasiwedi atholakalayo</translation> <translation id="8705308553596171387">Ayikho iphasiwedi</translation> <translation id="879180780857354295">Okunye okukhethwa kukho okutholakala ngenhla kwekhibhodi</translation> <translation id="8849262850971482943">Sebenzisa ikhadi lakho elibonakalayo mayelana nokuphepha okungeziwe</translation>
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryTestHelper.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryTestHelper.java index 2a70bfd..3141e9e 100644 --- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryTestHelper.java +++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryTestHelper.java
@@ -43,7 +43,7 @@ * @return True iff the bar view is visible and animations have ended. */ public static boolean accessoryViewFullyShown(Activity activity) { - KeyboardAccessoryView accessory = activity.findViewById(R.id.keyboard_accessory); + KeyboardAccessoryModernView accessory = activity.findViewById(R.id.keyboard_accessory); return accessory != null && accessory.isShown() && !accessory.hasRunningAnimation() @@ -73,7 +73,7 @@ * @return True iff the bar view is hidden and animations have ended. */ public static boolean accessoryViewFullyHidden(Activity activity) { - KeyboardAccessoryView accessory = activity.findViewById(R.id.keyboard_accessory); + KeyboardAccessoryModernView accessory = activity.findViewById(R.id.keyboard_accessory); return accessory == null || (!accessory.isShown() && !accessory.hasRunningAnimation()); } }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupTitleEditor.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupTitleEditor.java index cc35580..9565f31 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupTitleEditor.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupTitleEditor.java
@@ -6,7 +6,7 @@ import android.content.Context; -import org.chromium.base.Callback; +import org.chromium.base.ValueChangedCallback; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModelFilter; @@ -23,19 +23,16 @@ */ public abstract class TabGroupTitleEditor { private final Context mContext; - private final ObservableSupplier<TabModelFilter> mTabModelFilterSupplier; + private final ObservableSupplier<TabModelFilter> mCurrentTabModelFilterSupplier; private final TabModelObserver mTabModelObserver; private final TabGroupModelFilter.Observer mFilterObserver; - private final Callback<TabModelFilter> mOnTabModelFilterChanged = this::onTabModelFilterChanged; - - // Holds the currently observed TabGroupModelFilter so that observers can be removed when the - // value changes. - private TabGroupModelFilter mCurrentTabModelFilter; + private final ValueChangedCallback<TabModelFilter> mCurrentTabModelFilterObserver = + new ValueChangedCallback<>(this::onTabModelFilterChanged); public TabGroupTitleEditor( Context context, ObservableSupplier<TabModelFilter> tabModelFilterSupplier) { mContext = context; - mTabModelFilterSupplier = tabModelFilterSupplier; + mCurrentTabModelFilterSupplier = tabModelFilterSupplier; mTabModelObserver = new TabModelObserver() { @@ -44,7 +41,9 @@ int tabRootId = tab.getRootId(); // If the group becomes a single tab after closing or we are closing a // group, delete the stored title. - if (mCurrentTabModelFilter.getRelatedTabListForRootId(tabRootId).size() + if (((TabGroupModelFilter) mCurrentTabModelFilterSupplier.get()) + .getRelatedTabListForRootId(tabRootId) + .size() == 1) { deleteTabGroupTitle(tabRootId); } @@ -71,7 +70,10 @@ if (title == null) return; // If the group size is 2, i.e. the group becomes a single tab after // ungroup, delete the stored title. - if (mCurrentTabModelFilter.getRelatedTabList(movedTab.getId()).size() + if (mCurrentTabModelFilterSupplier + .get() + .getRelatedTabList(movedTab.getId()) + .size() == 2) { deleteTabGroupTitle(getRootId(movedTab)); return; @@ -89,7 +91,8 @@ } }; - onTabModelFilterChanged(mTabModelFilterSupplier.addObserver(mOnTabModelFilterChanged)); + mCurrentTabModelFilterObserver.onResult( + mCurrentTabModelFilterSupplier.addObserver(mCurrentTabModelFilterObserver)); } /** @@ -149,27 +152,25 @@ /** Destroy any members that needs clean up. */ public void destroy() { - removeCurrentTabModelFilterObservers(); - mTabModelFilterSupplier.removeObserver(mOnTabModelFilterChanged); + removeTabModelFilterObservers(mCurrentTabModelFilterSupplier.get()); + mCurrentTabModelFilterSupplier.removeObserver(mCurrentTabModelFilterObserver); } - private void onTabModelFilterChanged(TabModelFilter filter) { - if (mCurrentTabModelFilter == filter) return; + private void onTabModelFilterChanged(TabModelFilter newFilter, TabModelFilter oldFilter) { + removeTabModelFilterObservers(oldFilter); - assert filter instanceof TabGroupModelFilter; - TabGroupModelFilter groupFilter = (TabGroupModelFilter) filter; - - removeCurrentTabModelFilterObservers(); - - groupFilter.addObserver(mTabModelObserver); - groupFilter.addTabGroupObserver(mFilterObserver); - mCurrentTabModelFilter = groupFilter; + if (newFilter != null) { + TabGroupModelFilter newGroupFilter = (TabGroupModelFilter) newFilter; + newGroupFilter.addObserver(mTabModelObserver); + newGroupFilter.addTabGroupObserver(mFilterObserver); + } } - private void removeCurrentTabModelFilterObservers() { - if (mCurrentTabModelFilter != null) { - mCurrentTabModelFilter.removeObserver(mTabModelObserver); - mCurrentTabModelFilter.removeTabGroupObserver(mFilterObserver); + private void removeTabModelFilterObservers(TabModelFilter filter) { + if (filter != null) { + TabGroupModelFilter groupFilter = (TabGroupModelFilter) filter; + groupFilter.removeObserver(mTabModelObserver); + groupFilter.removeTabGroupObserver(mFilterObserver); } } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java index 34774b5..37928c4 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java
@@ -618,7 +618,7 @@ // If the ContentSettingsType.NUM_TYPES value changes *and* a new value has been exposed on // Android, then please update this code block to include a test for your new type. // Otherwise, just update count in the assert. - assertEquals(96, ContentSettingsType.NUM_TYPES); + assertEquals(98, ContentSettingsType.NUM_TYPES); websitePreferenceBridge.addContentSettingException( new ContentSettingException( ContentSettingsType.COOKIES,
diff --git a/chrome/app/password_manager_ui_strings.grdp b/chrome/app/password_manager_ui_strings.grdp index bbaafce..b4950c74 100644 --- a/chrome/app/password_manager_ui_strings.grdp +++ b/chrome/app/password_manager_ui_strings.grdp
@@ -696,24 +696,57 @@ other {{COUNT} passwords are saved only to this device}} </message> <if expr="is_macosx"> - <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_TITLE" desc="Title for the Relaunch Chrome promo card."> - Google Password Manager needs access to MacOS Keychain - </message> - <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_DESCRIPTION" desc="Description for the Relaunch Chrome promo card."> - To use Google Password Manager with macOS Keychain, relaunch Chrome and allow Keychain access. Your tabs will reopen after relaunching. - </message> + <if expr="_google_chrome"> + <then> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_TITLE" desc="Title for the Relaunch Chrome promo card."> + Google Password Manager needs access to MacOS Keychain + </message> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_DESCRIPTION" desc="Description for the Relaunch Chrome promo card."> + To use Google Password Manager with macOS Keychain, relaunch Chrome and allow Keychain access. Your tabs will reopen after relaunching. + </message> + </then> + <else> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_TITLE" desc="Title for not branded Relaunch Chromium promo card."> + Password Manager needs access to MacOS Keychain + </message> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_DESCRIPTION" desc="Description for not branded Relaunch ChrChromiumome promo card."> + To use Password Manager with macOS Keychain, relaunch Chromium and allow Keychain access. Your tabs will reopen after relaunching. + </message> + </else> + </if> </if> <if expr="is_linux"> - <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_TITLE_LINUX" desc="Title for the Relaunch Chrome promo card."> - Google Password Manager needs more access - </message> - <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_DESCRIPTION_LINUX" desc="Description for the Relaunch Chrome promo card."> - To use Google Password Manager with your operating system, relaunch Chrome and allow access to your computer's password manager. Your tabs will reopen after relaunching. - </message> + <if expr="_google_chrome"> + <then> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_TITLE_LINUX" desc="Title for the Relaunch Chrome promo card."> + Google Password Manager needs more access + </message> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_DESCRIPTION_LINUX" desc="Description for the Relaunch Chrome promo card."> + To use Google Password Manager with your operating system, relaunch Chrome and allow access to your computer's password manager. Your tabs will reopen after relaunching. + </message> + </then> + <else> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_TITLE_LINUX" desc="Title for the Relaunch Chromium promo card."> + Password Manager needs more access + </message> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_DESCRIPTION_LINUX" desc="Description for the Relaunch Chromium promo card."> + To use Password Manager with your operating system, relaunch Chromium and allow access to your computer's password manager. Your tabs will reopen after relaunching. + </message> + </else> + </if> </if> <if expr="is_macosx or is_linux"> - <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_ACTION" desc="Action button for the Relaunch Chrome promo card."> - Relaunch Chrome - </message> + <if expr="_google_chrome"> + <then> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_ACTION" desc="Action button for the Relaunch Chrome promo card."> + Relaunch Chrome + </message> + </then> + <else> + <message name="IDS_PASSWORD_MANAGER_UI_RELAUNCH_CHROME_PROMO_CARD_ACTION" desc="Action button for not branded Relaunch Chrome promo card."> + Relaunch Chromium + </message> + </else> + </if> </if> </grit-part>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb index 4b35125..ed858c1 100644 --- a/chrome/app/resources/chromium_strings_sw.xtb +++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -72,7 +72,7 @@ <translation id="2241627712206172106">Kama unatumia kompyuta pamoja na wengine, marafiki na familia wanaweza kuvinjari tofauti na kusanidi Chromium jinsi wapendavyo.</translation> <translation id="2313870531055795960">Hukagua URL ili kuona iwapo zipo kwenye orodha ya tovuti zisizo salama zilizohifadhiwa katika Chromium. Ikiwa tovuti inajaribu kuiba nenosiri lako au unapopakua faili hatari, Chromium inaweza pia kutuma URL, ikiwa ni pamoja na sehemu za maudhui ya ukurasa, kwa kipengele cha Kuvinjari Salama.</translation> <translation id="2329088755516916767">Chromium ikiwashwa, huwa inapakia mapema kurasa, hali inayofanya shughuli za utafutaji na kuvinjari ziwe za haraka zaidi.</translation> -<translation id="2343156876103232566">Ili uweze kutuma nambari kwa simu yako ya Android kutoka hapa, ingia katika akaunti kwenye Chromium ukitumia vifaa vyote viwili.</translation> +<translation id="2343156876103232566">Ili uweze kutuma namba kwa simu yako ya Android kutoka hapa, ingia katika akaunti kwenye Chromium ukitumia vifaa vyote viwili.</translation> <translation id="2359808026110333948">Endelea</translation> <translation id="2359920621792549529">Ili ufute data ya kuvinjari kwenye kifaa hiki pekee, huku ukiihifadhi katika Akaunti yako ya Google, <ph name="BEGIN_LINK" />ondoka kwenye akaunti ya Chromium<ph name="END_LINK" />.</translation> <translation id="2384373936468275798">Mfumo wa Uendeshaji wa Chromium haukusawazisha data yako kwa sababu maelezo ya kuingia katika akaunti yako yamepitwa na wakati.</translation> @@ -145,13 +145,13 @@ <translation id="363078681319665186">Ili upate masasisho ya Chromium ya hapo baadaye, utahitaji toleo la macOS 10.15 au toleo jipya zaidi. Kompyuta hii inatumia macOS 10.13.</translation> <translation id="3639635944603682591">Data ya kuvinjari ya mtu huyu itafutwa kwenye kifaa hiki. Ili kurejesha data, ingia katika Chromium ukitumia <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Sasisho jipya la Chromium linapatikana na litaanza kutumika pindi utakapofungua tena.}=1{Sasisho jipya la Chromium linapatikana na litaanza kutumika pindi utakapofungua tena. Haitafungua upya dirisha fiche.}other{Sasisho jipya la Chromium linapatikana na litaanza kutumika pindi utakapofungua tena. Haitafungua upya madirisha # fiche.}}</translation> -<translation id="3651803019964686660">Ili uweze kutuma nambari kwa simu yako ya Android kutoka <ph name="ORIGIN" />, ingia katika akaunti kwenye Chromium ukitumia vifaa vyote viwili.</translation> +<translation id="3651803019964686660">Ili uweze kutuma namba kwa simu yako ya Android kutoka <ph name="ORIGIN" />, ingia katika akaunti kwenye Chromium ukitumia vifaa vyote viwili.</translation> <translation id="3667616615096815454">Imeshindwa kusakinisha, seva haitambui programu hii.</translation> <translation id="3685209450716071127">Chromium imeshindwa kukagua manenosiri yako. Jaribu kuangalia muunganisho wako wa Intaneti.</translation> <translation id="3702352323269013324">Pata maelezo zaidi kuhusu kuweka mapendeleo ya matangazo kwenye Chromium</translation> <translation id="370962675267501463">{COUNT,plural, =0{Msimamizi wako anataka ufungue Chromium tena ili utumie sasisho hili}=1{Msimamizi wako anataka ufungue Chromium tena ili utumie sasisho hili. Haitafungua upya dirisha fiche.}other{Msimamizi wako anataka ufungue Chromium tena ili utumie sasisho hili. Haitafungua upya madirisha # fiche.}}</translation> <translation id="3713809861844741608">Fungua kiungo katika kichupo kipya cha Chromium</translation> -<translation id="378917192836375108">Chromium hukuruhusu kubofya nambari ya simu kwenye wavuti na kuipiga kwa Skype.</translation> +<translation id="378917192836375108">Chromium hukuruhusu kubofya namba ya simu kwenye wavuti na kuipiga kwa Skype.</translation> <translation id="3790262771324122253">Fahamu kwa nini Chromium huzuia baadhi ya vipakuliwa</translation> <translation id="379589255253486813">Chromium itakufahamisha ikiwa kuna chochote kinachohitaji ukague</translation> <translation id="3802055581630249637">Chromium hupakia mapema kurasa unazoweza kutembelea, ili zipakiwe kwa haraka zaidi unapozitembelea</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 56d63fd..56ab0c0 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -276,6 +276,7 @@ <translation id="1203559206734265703">የተጠበቁ ታዳሚዎች ስህተትን በማረም ላይ ነቅቷል።</translation> <translation id="120368089816228251">የሙዚቃ ኖታ</translation> <translation id="1203942045716040624">የተጋራ ሰራተኛ፦ <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">አገናኝን ቅድሚያ ይመልከቱ</translation> <translation id="1206832039833782423">የደህንነት ኮድዎ በካርድዎ ጀርባ ላይ ነው</translation> <translation id="1210678701920254279">አታሚዎችን ይመልከቱ ወይም ያክሉ እና ገቢር የህትመት ሥራዎችን ይመልከቱ</translation> <translation id="1211769675100312947">አቋራጮች ተመርጠው የሚሰበሰቡት በእርስዎ ነው</translation> @@ -614,6 +615,7 @@ <translation id="1478340334823509079">ዝርዝሮች፦ <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">መጫን አልነቃም</translation> <translation id="1480663089572535854">ለ«ምረጥ» የተሰጠውን ተልዕኮ ለመቀየር ተመልሰው መሄድ ይችላሉ። በቅንብሮች ውስጥ ሁልጊዜ ራስ-ቃኝን ማጥፋት ይችላሉ።</translation> +<translation id="1481001611315487791">በAI ጭብጦችን ስለመፍጠር የበለጠ ይረዱ።</translation> <translation id="1481537595330271162">የዲስክ መጠንን መቀየር ላይ ስህተት</translation> <translation id="1482626744466814421">ይህን ትር ዕልባት ያድርጉት...</translation> <translation id="1482772681918035149">የይለፍ ቃላትን አርትዕ</translation> @@ -808,6 +810,7 @@ <translation id="1615433306336820465">በእርስዎ የደህንነት ቁልፍ ላይ የተከማቸ የመለያ መግቢያ ውሂብን ያቀናብሩ</translation> <translation id="1616206807336925449">ይህ ቅጥያ ምንም ልዩ ፈቃዶችን አይፈልግም።</translation> <translation id="1616298854599875024">የ«<ph name="IMPORT_NAME" />» ቅጥያ የተጋራ ሞዱል ስላልሆነ እሱን ማስመጣት አልተቻለም</translation> +<translation id="161654560322394775">ምስል <ph name="INDEX" /> የ<ph name="A" />፣ በ<ph name="B" /> ቅጥ፣ ከ<ph name="C" /> ስሜት ጋር።</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{ይህን ውሂብ በድርጅትዎ የደህንነት መመሪያዎች መሠረት በመፈተሽ ላይ...}=1{ይህን ፋይል በድርጅትዎ የደህንነት መመሪያዎች መሠረት በመፈተሽ ላይ...}one{እነዚህን ፋይሎች በድርጅትዎ የደህንነት መመሪያዎች መሠረት በመፈተሽ ላይ...}other{እነዚህን ፋይሎች በድርጅትዎ የደህንነት መመሪያዎች መሠረት በመፈተሽ ላይ...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">የእገዛ ማዕከል</translation> @@ -1513,6 +1516,7 @@ <translation id="2140902257485550046">በዚህ ጣቢያ ላይ ያሉትን ሁሉንም ቅጥያዎች ለማገድ ምረጥ</translation> <translation id="2142328300403846845">አገናኙን ክፈት እንደ</translation> <translation id="2142582065325732898">የቅርብ ጊዜ የChrome ትሮችን ለመመልከት <ph name="LINK1_BEGIN" />የChrome ስምረት<ph name="LINK1_END" />ን ያብሩ። <ph name="LINK2_BEGIN" />የበለጠ ለመረዳት<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">ለአንዳንድ ዕውቂያዎች የሚታይ</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome ዛሬ እንደገና ኩኪዎችን ያግዳል}=1{Chrome ነገ እንደገና ኩኪዎችን ያግዳል}one{ኩኪዎች እንደገና እስከሚታገዱ ድረስ # ቀናት}other{ኩኪዎች እንደገና እስከሚታገዱ ድረስ # ቀናት}}</translation> <translation id="2143765403545170146">በሙሉ ማያ ገፅ ውስጥ ሁልጊዜ የመሣሪያ አሞሌውን አሳይ</translation> <translation id="2143778271340628265">የእራስ ተኪ ውቅር</translation> @@ -1698,6 +1702,7 @@ <translation id="2291452790265535215">የጎን ፓነሉን ለእልባቶች፣ ለጉዞዎች እና ለሌሎችም ለመጠቀም ይሞክሩ</translation> <translation id="229182044471402145">ተዛማጅ ቅርጸ-ቁምፊ አልተገኘም።</translation> <translation id="2292848386125228270"><ph name="PRODUCT_NAME" /> እባክዎ እንደ መደበኛ ተጠቃሚ ያስጀምሩት። እንደ ለግንባታ ስርወ ሆኖ ማሄድ ካስፈለግዎት፣ ከ--no-sandbox ጠቁም ጋር እንደገና ያሂዱት።</translation> +<translation id="2292862094862078674">በይነመረብዎን ይፈትሹ እና እንደገና ይሞክሩ። አሁንም ከዚህ በታች ካሉት ቀደም ሲል ከተፈጠሩ ጭብጦች ውስጥ አንዱን መምረጥ ይችላሉ።</translation> <translation id="2294081976975808113">የማያ ገፅ ግላዊነት</translation> <translation id="2294358108254308676"><ph name="PRODUCT_NAME" />ን መጫን ይፈልጋሉ?</translation> <translation id="229477815107578534">ቅንብሮችዎን ይገምግሙ</translation> @@ -2635,6 +2640,7 @@ <translation id="2990313168615879645">የGoogle መለያን አክል</translation> <translation id="2990375978470734995">ይህ ለውጥ እንዲተገበር የእርስዎን ውጫዊ መለዋወጫዎች እንደገና ያገናኙ።</translation> <translation id="2990583317361835189">ጣቢያዎች የእንቅስቃሴ ዳሳሾችን እንዲጠቀሙ አይፍቀዱ</translation> +<translation id="2991182900092497283">እባክዎ ይህን ውሂብ የሚያወርዱበትን ምክንያት ያስገቡ፦</translation> <translation id="2992931425024192067">ሁሉንም የማሳወቂያ ይዘቶች አሳይ</translation> <translation id="2993517869960930405">የመተግበሪያ መረጃ</translation> <translation id="2996108796702395498">የመሣሪያዎ የመለያ ቁጥር <ph name="SERIAL_NUMBER" /> ነው። ይህ ቁጥር አገልግሎትን ለማግበር እንዲያግዝ ጥቅም ላይ መዋል ይችላል።</translation> @@ -3037,6 +3043,7 @@ <translation id="3325804108816646710">የሚገኙ መገለጫዎችን በመፈለግ ላይ...</translation> <translation id="3325910708063135066">ካሜራ እና ማይክሮፎን በMac System Preferences ውስጥ ጠፍተዋል</translation> <translation id="3325930488268995856">Microsoft OneDrive ተገናኝቷል</translation> +<translation id="3325995804968971809">ቅጥ</translation> <translation id="3327050066667856415">Chromebooks ለደህንነት የተነደፉ ናቸው። የእርስዎ መሣሪያ በራስ-ሰር ከተንኮል-አዘል ዌር የተጠበቀ ነው – ምንም ተጨማሪ ሶፍትዌር ሳያስፈልግ።</translation> <translation id="3328489342742826322">ከምትኬ ወደነበረበት መመለስ ነባር የLinux መተግበሪያዎችን እና በLinux ፋይሎች አቃፊዎ ውስጥ ያለ ውሂብን ይሰርዛል።</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3148,6 +3155,7 @@ <translation id="3432762828853624962">የተጋሩ ሠራተኞች</translation> <translation id="3433507769937235446">ፈቃድ ላይ ቆልፍ</translation> <translation id="3433621910545056227">ውይ! ስርዓቱ የመሣሪያ ጭነት-ሰዓት አይነታዎች ቁልፉን መመስረት አልተሳካለትም።</translation> +<translation id="3434025015623587566">Google የይለፍ ቃል አስተዳዳሪ ተጨማሪ መዳረሻ ያስፈልገዋል</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="3434272557872943250">የተጨማሪ የድር እና መተግበሪያ እንቅስቃሴ ቅንብር ለልጅዎ በርቶ ከሆነ ይህ ውሂብ ወደ የGoogle መለያቸው ሊቀመጥ ይችላል። families.google.com ላይ ስለእነዚህ ቅንብሮች እና እንዴት እነሱን ማስተካከል እንደሚችሉ የበለጠ ይረዱ።</translation> <translation id="3434475275396485144">ይህ ቅንብር የሚቀናበረው በስልክዎ አስተዳዳሪ ነው</translation> @@ -3221,6 +3229,7 @@ <translation id="3481268647794498892"><ph name="ALTERNATIVE_BROWSER_NAME" />ን በ<ph name="COUNTDOWN_SECONDS" /> ሰከንዶች ውስጥ ይከፈታል</translation> <translation id="348268549820508141">ንግግርን ማወቅ</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> የሚከተሉትን ፋይሎች መመልከት ይችላል</translation> +<translation id="3484595034894304035">ልጣፍን፣ ማያ ገጽ ቆጣቢን፣ ጠቆር ያለ ገጽታን እና ሌሎችንም ግላዊ ማድረግ</translation> <translation id="3484869148456018791">አዲስ የእውቅና ማረጋገጫ ያግኙ</translation> <translation id="3486950712960783074">የእርስዎ ጉዞ</translation> <translation id="3487007233252413104">ስም-አልባ ተግባር</translation> @@ -3313,6 +3322,7 @@ <translation id="3561201631376780358">ሁሉንም እልባቶች ለመመልከት ክፍት የጎን ፓነል</translation> <translation id="3562423906127931518">ይህ ሂደት ጥቂት ደቂቃዎችን ሊወስድ ይችላል። የLinux መያዣውን በማዋቀር ላይ።</translation> <translation id="3562655211539199254">ከእርስዎ ስልክ ላይ የቅርብ ጊዜዎቹን የChrome ትሮች ይመልከቱ</translation> +<translation id="3563392617245068355">ስሜት</translation> <translation id="3563432852173030730">የኪዮስክ መተግበሪያ ሊወርድ አልቻለም።</translation> <translation id="3563558822383875692">DLCን በማዋቀር ላይ።</translation> <translation id="3564334271939054422">እየተጠቀሙ ያሉት Wi-Fi (<ph name="NETWORK_ID" />) በመለያ መግቢያ ገጹን እንዲጎበኙ ሊጠይቅዎት ይችላል።</translation> @@ -3360,6 +3370,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{{COUNT} መለያ ተመሳሳይ የይለፍ ቃል ይጠቀማል}one{{COUNT} መለያ ተመሳሳይ የይለፍ ቃል ይጠቀማል}other{{COUNT} መለያዎች ተመሳሳይ የይለፍ ቃል ይጠቀማሉ}}</translation> <translation id="3605780360466892872">የኮሌታ ቁልፍ</translation> <translation id="3607671391978830431">ለልጅ</translation> +<translation id="3608460311600621471">እባክዎ ይህን ውሂብ የሚያወርዱበትን ምክንያት ያስገቡ፦</translation> <translation id="3608730769702025110">እርምጃ 3 ከ4፦ ማንነትን ለይቶ ሊያሳውቅ የሚችል መረጃን ይገምግሙ</translation> <translation id="3609277884604412258">ፈጣን ፍለጋ</translation> <translation id="3610241585790874201">በመሣሪያዎ ላይ ውሂብ ማስቀመጥ አልተፈቀደም</translation> @@ -4194,6 +4205,7 @@ <translation id="4250229828105606438">ቅጽበታዊ ገፅ ዕይታ</translation> <translation id="4250680216510889253">አይ</translation> <translation id="4251377547188244181">የኪዮስክ እና የምልክት ቋንቋ መሣሪያ ምዝገባ</translation> +<translation id="4252141040239557279">ምስል <ph name="INDEX" /> የ<ph name="A" /></translation> <translation id="4252899949534773101">ብሉቱዝ ተሰናክሏል</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - የትር ይዘት ተጋርቷል</translation> <translation id="4253168017788158739">ማስታወሻ</translation> @@ -4572,6 +4584,7 @@ <translation id="4548858987594081919">Google የይለፍ ቃል አስተዳዳሪ የእርስዎን በመለያ መግባት መረጃ ለማስቀመጥ እንዲያግዝ ለዚህ ጣቢያ የተጠቃሚ ስምዎን ያክሉ</translation> <translation id="4549791035683739768">የእርስዎ የደህንነት ቁልፍ ምንም የተቀመጡ የጣት አሻራዎች የሉትም</translation> <translation id="4550926046134589611">አንዳንድ የሚደገፉ አገናኞች አሁንም በ<ph name="APP_NAME" /> ውስጥ ይከፈታሉ።</translation> +<translation id="4551379727767354516">የእርስዎ የቅርብ ጊዜ AI ገጽታዎች</translation> <translation id="4551763574344810652">ለመቀልበስ <ph name="MODIFIER_KEY_DESCRIPTION" />ን ይጫኑ</translation> <translation id="4553526521109675518">የመሣሪያውን ቋንቋ ለመቀየር የእርስዎን Chromebook እንደገና ማስጀመር ይኖርብዎታል። <ph name="BEGIN_LINK_LEARN_MORE" />የበለጠ ለመረዳት<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">ውጫዊ ቅጥያው ከነባሩ ጋር ተመሳሳይ ወይም ያነሰ ስሪት ነው።</translation> @@ -5893,6 +5906,7 @@ <translation id="5620568081365989559">DevTools የ<ph name="FOLDER_PATH" /> ሙሉ መዳረሻን ይጠይቃል። ማንኛውም ሚስጥራዊነት ያለው መረጃ አጋልጠው እንዳልሰጡ ያረጋግጡ።</translation> <translation id="5620612546311710611">የአጠቃቀም ስታትስቲክስ</translation> <translation id="5621272825308610394">ምንም የማሳያ ስም የለም</translation> +<translation id="5621350029086078628">ይህ የሙከራ AI ባህሪ ነው።</translation> <translation id="562250930904332809">&Disable የቀጥታ መግለጫ ጽሁፍ</translation> <translation id="5623282979409330487">ይህ ጥጣቢያ የእንቅስቃሴ ዳሳሾችዎን እየደረሰ ነውው።</translation> <translation id="5623842676595125836">ምዝግብ ማስታወሻ</translation> @@ -6010,6 +6024,7 @@ <translation id="572328651809341494">የቅርብ ጊዜ ትሮች</translation> <translation id="5723508132121499792">ምንም የጀርባ መተግበሪያዎች እያሄዱ አይደሉም</translation> <translation id="5723967018671998714">ማንነት በማያሳውቅ ሁነታ ላይ የሦስተኛ ወገን ኩኪዎች ይታገዳሉ</translation> +<translation id="5725112283692663422">በAI ለገጽታ ፍጠር ግብረ መልስ ይላኩ</translation> <translation id="5727728807527375859">ቅጥያዎች፣ መተግበሪያዎች እና ገፅታዎች ኮምፒውተርዎን ሊጎዱ ይችላሉ። እርግጠኛ ነዎት መቀጠል ይፈልጋሉ?</translation> <translation id="5728290366864286776">ይህ ቅጥያ የጣቢያ መረጃን ሊያነብብ እና ሊለውጥ ወይም በዳራ ውስጥ ሊሄድ ይችላል</translation> <translation id="5728450728039149624">የSmart Lock ማያ ገፅ መቆለፊያ አማራጮች</translation> @@ -6486,6 +6501,7 @@ <translation id="610487644502954950">የጎን ፓነል ተነቅሏል።</translation> <translation id="6104929924898022309">የተግባር ቁልፎች ባህሪን ለመለወጥ የማስጀመሪያ ቁልፍን ይጠቀሙ</translation> <translation id="6106167152849320869">እንዲሁም በቀዳሚው እርምጃ የምርመራ እና የአጠቃቀም ውሂብን ለመላክ ከመረጡ ይህ ውሂብ ለተጫኑ መተግበሪያዎች ይሰበሰባል።</translation> +<translation id="6108952804512516814">በAI ፍጠር</translation> <translation id="6111718295497931251">Google Drive መዳረሻ ይወገድ?</translation> <translation id="6111972606040028426">Google ረዳትን አንቃ</translation> <translation id="6112294629795967147">መጠን ለመቀየር ይንኩ</translation> @@ -6656,6 +6672,7 @@ <translation id="6238982280403036866">ጃቫስክሪፕትን እንዲጠቀም ተፈቅዷል</translation> <translation id="6239558157302047471">&ክፈፍን ዳግም ጫን</translation> <translation id="6240821072888636753">ሁልጊዜ ጠይቅ</translation> +<translation id="6240964651812394252">የGoogle የይለፍ ቃል አስተዳዳሪን ከስርዓተ ክወና ጋር ለመጠቀም Chromeን ዳግም ያስጀምሩ እና የኮምፒውተርዎን የይለፍ ቃል አስተዳዳሪ እንዲገቡ ፍቃድ ይስጡ። ዳግም ከጀመረ በኋላ ትሮችዎ እንደገና ይከፈታሉ።</translation> <translation id="6241530762627360640">ከስርዓትዎ ጋር ስለተጣመሩ የብሉቱዝ መሣሪያዎች ያለ መረጃ ይደርሳልና አቅራቢያ ያሉ የብሉቱዝ መሣሪያዎችን ያገኛል።</translation> <translation id="6241844896329831164">ምንም መዳረሻ አያስፈልግም</translation> <translation id="6242574558232861452">የእርስዎን ድርጅት የደህንነት መመሪያዎች በመፈተሽ ላይ</translation> @@ -7279,6 +7296,7 @@ <translation id="6761623907967804682">የመሣሪያ ላይ የጣቢያ ውሂብ አልተፈቀደም</translation> <translation id="6762833852331690540">አብራ</translation> <translation id="6762861159308991328">አገናኞች የሚከፈቱበትን መንገድ በመተግበሪያ ቅንብሮች ውስጥ መለወጥ ይችላሉ</translation> +<translation id="6764633064754857889">አገናኝን ቅድሚያ ይመልከቱ</translation> <translation id="676560328519657314">የእርስዎ የመክፈያ ዘዴ በGoogle Pay ዉስጥ</translation> <translation id="6766488013065406604">ወደ Google የይለፍ ቃል አስተዳዳሪ ይሂዱ</translation> <translation id="6767566652486411142">ሌላ ቋንቋ ይምረጡ...</translation> @@ -8250,6 +8268,7 @@ <translation id="752098910262610337">አቋራጮችን አሳይ</translation> <translation id="7521430434164837205">የMicrosoft 365 ፋይሎች</translation> <translation id="7522255036471229694">«Ok Google» ይብሉ</translation> +<translation id="7523112275619538890">ፋይሎችን እና ተጨማሪ በአቅራቢያ ካሉ መሣሪያዎች ጋር ያጋሩ</translation> <translation id="7523117833414447032">አቢይ ሆሄያትን ስታነብ</translation> <translation id="7523585675576642403">መገለጫውን እንደገና ይሰይሙ</translation> <translation id="7525067979554623046">ፍጠር</translation> @@ -8418,6 +8437,7 @@ <translation id="7657090467145778067">ትንንሽ ቁጠባዎች</translation> <translation id="7657218410916651670">በመለያ ሲገቡ <ph name="BEGIN_LINK_GOOGLE" />ሌሎች የእንቅስቃሴ ዓይነቶች<ph name="END_LINK_GOOGLE" /> በGoogle መለያዎ ውስጥ ሊቀመጡ ይችላሉ። በማንኛውም ጊዜ ሊሰርዟቸው ይችላሉ።</translation> <translation id="7658239707568436148">ይቅር</translation> +<translation id="7658727964021657194">የቅርብ ጊዜ AI ገጽታ <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">ለማንኛውም ማንነት ከማያሳውቅ ሁነታ ይውጡ?</translation> <translation id="7659336857671800422">የግላዊነት መመሪያውን ውሰድ</translation> <translation id="7659584679870740384">ይህን መሣሪያ ለመጠቀም ስልጣን አልተሰጠዎትም። የመግባት ፍቃድ ለማግኘት አስተዳዳሪውን ያነጋግሩ።</translation> @@ -8439,6 +8459,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{<ph name="DEVICE_TYPE" /> በ{NUM_WEEKS} ሳምንት ውስጥ ይመልሱ}one{<ph name="DEVICE_TYPE" /> በ{NUM_WEEKS} ሳምንቶች ውስጥ ይመልሱ}other{<ph name="DEVICE_TYPE" /> በ{NUM_WEEKS} ሳምንቶች ውስጥ ይመልሱ}}</translation> <translation id="7668423670802040666">በGoogle የይለፍ ቃል አስተዳዳሪ ውስጥ ለ<ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">የተደራሽነት ባህሪያት መሣሪያዎን ለመጠቀም ይበልጥ ያቀልሉታል። ፈጣን ቅንብሮችን ለመድረስ በማያ ገጽዎ ግርጌ ላይ ያለውን ጊዜ ይምረጡ።</translation> +<translation id="7669620291129890197">ለእርስዎ መሣሪያዎች የሚታይ</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{ትክክል ያልሆነ ፒን። አንድ ቀሪ ሙከራ አልዎት።}one{ትክክል ያልሆነ ፒን። # ቀሪ ሙከራዎች አልዎት።}other{ትክክል ያልሆነ ፒን። # ቀሪ ሙከራዎች አልዎት።}}</translation> <translation id="7670434942695515800">ለተሻለ አፈጻጸም ወደ አዲሱ ስሪት ያሻሽሉ። ማሻሻል መጠናቀቅ የማይችል ከሆነ የፋይሎችዎን ምትኬ ማስቀመጥ ይመከራል። አንዴ ማሻሻል ከተጀመረ በኋላ Linux ይዘጋል። ከመቀጠልዎ በፊት ክፍት ፋይሎችን ያስቀምጡ። <ph name="LINK_START" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="7670483791111801022">የግርጌ ጽሑፎች</translation> @@ -8638,6 +8659,7 @@ <translation id="7807711621188256451"><ph name="HOST" /> ሁልጊዜ የእርስዎ ካሜራ መዳረሻ ይፈቀድለት</translation> <translation id="7810202088502699111">በዚህ ገፅ ብቅ-ባዮች ታግደዋል።</translation> <translation id="7810367892333449285">የእርስዎ ግቤት የ<ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ address<ph name="LPA_2" />$<ph name="LPA_3" />optional matching id<ph name="LPA_4" /> ቅርጸት ሊኖረው ይገባል</translation> +<translation id="7811263553491007091">እንደገና ይሞክሩ ወይም ከዚህ በታች ካሉት ቀደም ሲል ከተፈጠሩ ገጽታዎች ውስጥ አንዱን ይምረጡ።</translation> <translation id="7814458197256864873">&ቅዳ</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">ለ<ph name="EXTENSION_NAME" /> <ph name="SHORTCUT" /> አቋራጭን አርትዕ</translation> @@ -8742,6 +8764,7 @@ <translation id="789722939441020330">ጣቢያዎች ብዙ ፋይሎችን በራስ-ሰር እንዲያወርዱ አይፍቀዱ</translation> <translation id="7897900149154324287">ለወደፊቱ የሚነቀል መሳሪያዎን ከመንቀልዎ በፊት በፋይሎች መተግበሪያው ውስጥ ማላቀቅዎን እርግጠኛ ይኑ። ያለበለዚያ የተወሰነ ውሂብ ሊጠፋብዎ ይችላል።</translation> <translation id="7898725031477653577">ሁል ጊዜ ተርጉም</translation> +<translation id="7899324822972399722">ምስል <ph name="INDEX" /> የ<ph name="A" />፣ በ<ph name="B" /> ቅጥ</translation> <translation id="7901405293566323524">የስልክ መገናኛ</translation> <translation id="7903290522161827520">የአሳሽ ክፍሎችን እየፈለጉ ነው? ይጎብኙ</translation> <translation id="7903429136755645827">የእርስዎ የጨዋታ መቆጣጠሪያዎችን ለማበጀት ጠቅ ያድርጉ</translation> @@ -9008,6 +9031,7 @@ <translation id="8089547136368562137">በGoogle ምርጦች ጥበቃ ይደረግለታል</translation> <translation id="8090234456044969073">የእርስዎ በጣም በተደጋጋሚነት የተጎበኙ ድር ጣቢያዎች ዝርዝር ያነብባል</translation> <translation id="8090513782447872344">እንደገና ለማየት በማንኛውም ጊዜ ተመልሰው መምጣት ይችላሉ</translation> +<translation id="8090686009202681725">በAI ገጽታ ይፍጠሩ</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> ምላሽ እየሰጠ አይደለም</translation> <translation id="8094536695728193970">ወደ ቢጫ የሚሄድ ብርቱካናማ</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />ምትኬ በGoogle Drive ላይ ያስቀምጡ። በማንኛውም ጊዜ በቀላሉ ውሂብዎን ወደነበረበት ይመልሱ ወይም መሣሪያን ይቀይሩ። ምትኬዎ የመተግበሪያ ውሂብን ያካትታል።<ph name="END_PARAGRAPH1" /> @@ -9024,6 +9048,7 @@ <translation id="8098616321286360457">የአውታረ መረብ ግንኙነት ያስፈልጋል</translation> <translation id="8100230553590752325">በማንኛውም መሣሪያ ላይ የተቀመጡ የይለፍ ቃላትን ይጠቀሙ</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> ተመርጧል። ላለመምረጥ ፍለጋን እና ክፍተትን ይጫኑ</translation> +<translation id="8100725874569949614">ምስል <ph name="INDEX" /> የ<ph name="A" />፣ ከ<ph name="C" /> ስሜት ጋር።</translation> <translation id="8101409298456377967">በቀላሉ ወደ ጣቢያዎች እና መተግበሪያዎች መግባት እንዲችሉ የይለፍ ቃላትዎን ይፍጠሩ፣ ያስቀምጡ እና ያቀናብሩ <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="810185532889603849">ብጁ ቀለም</translation> <translation id="8101987792947961127">በቀጣዩ ዳግም ማስነሳት ላይ Powerwash ያስፈልጋል</translation> @@ -9033,6 +9058,7 @@ <translation id="8107015733319732394">የGoogle Play መደብርን በእርስዎ <ph name="DEVICE_TYPE" /> ላይ በመጫን ላይ። ይሄ ጥቂት ደቂቃዎችን ሊወስድ ይችላል።</translation> <translation id="810728361871746125">የማሳያ ጥራት</translation> <translation id="8109109153262930486">ነባሪ አምሳያ</translation> +<translation id="8109991406044913868">በAI የተፈጠረ ገጽታ</translation> <translation id="8110393529211831722">የደንበኝነት ምዝገባ በዚህ መሣሪያ ላይ ብቻ ተጭኗል እና በመለያዎ ስር ካሉ ሌሎች መሣሪያዎች ጋር አልሰመረም። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="8110489095782891123">የእውቂያ ዝርዝርን በማውረድ ላይ...</translation> <translation id="8115139559594092084">ከእርስዎ Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index f35280c..35a09db 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -278,6 +278,7 @@ <translation id="1203559206734265703">Адладка для Protected Audiences уключана.</translation> <translation id="120368089816228251">Музычная нота</translation> <translation id="1203942045716040624">Агульны рабочы працэс: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Прагледзець спасылку</translation> <translation id="1206832039833782423">Код бяспекі знаходзіцца на адваротным баку вашай карткі</translation> <translation id="1210678701920254279">Праглядайце або дадавайце прынтары і глядзіце актыўныя заданні друку</translation> <translation id="1211769675100312947">Ярлыкі, падабраныя вамі</translation> @@ -616,6 +617,7 @@ <translation id="1478340334823509079">Падрабязнасці: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">Усталяванне не ўключана</translation> <translation id="1480663089572535854">Вы можаце вярнуцца назад, каб змяніць прызначэнне для дзеяння "Выбраць". Аўтаматычнае сканіраванне заўсёды можна выключыць у Наладах.</translation> +<translation id="1481001611315487791">Даведацца больш пра стварэнне тэм з дапамогай AI.</translation> <translation id="1481537595330271162">Памылка пры змяненні памеру дыска</translation> <translation id="1482626744466814421">Дадаць гэту ўкладку ў закладкі...</translation> <translation id="1482772681918035149">змяніць паролі</translation> @@ -810,6 +812,7 @@ <translation id="1615433306336820465">Кіраванне данымі для ўваходу, захаванымі на ключы бяспекі</translation> <translation id="1616206807336925449">Пашырэнне не патрабуе спецыяльных дазволаў.</translation> <translation id="1616298854599875024">Не ўдалося імпартаваць пашырэнне "<ph name="IMPORT_NAME" />": гэта не абагулены модуль</translation> +<translation id="161654560322394775">Відарыс <ph name="INDEX" /> з <ph name="A" />, стыль: <ph name="B" />, настрой: <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Гэтыя даныя правяраюцца на адпаведнасць палітыкам бяспекі вашай арганізацыі...}=1{Гэты файл правяраецца на адпаведнасць палітыкам бяспекі вашай арганізацыі...}one{Гэтыя файлы правяраюцца на адпаведнасць палітыкам бяспекі вашай арганізацыі...}few{Гэтыя файлы правяраюцца на адпаведнасць палітыкам бяспекі вашай арганізацыі...}many{Гэтыя файлы правяраюцца на адпаведнасць палітыкам бяспекі вашай арганізацыі...}other{Гэтыя файлы правяраюцца на адпаведнасць палітыкам бяспекі вашай арганізацыі...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">Да&ведачны цэнтр</translation> @@ -1506,6 +1509,7 @@ <translation id="2140902257485550046">Націсніце, каб заблакіраваць усе пашырэнні на гэтым сайце</translation> <translation id="2142328300403846845">Адкрыць спасылку як</translation> <translation id="2142582065325732898">Каб праглядаць нядаўна адкрытыя ўкладкі Chrome, уключыце <ph name="LINK1_BEGIN" />Сінхранізацыю Chrome<ph name="LINK1_END" />. <ph name="LINK2_BEGIN" />Даведацца больш<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Бачна некаторым кантактам</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Сёння Chrome зноў заблакіруе файлы cookie}=1{Заўтра Chrome зноў заблакіруе файлы cookie}one{Праз # дзень файлы cookie зноў будуць заблакіраваны}few{Праз # дні файлы cookie зноў будуць заблакіраваны}many{Праз # дзён файлы cookie зноў будуць заблакіраваны}other{Праз # дня файлы cookie зноў будуць заблакіраваны}}</translation> <translation id="2143765403545170146">Заўсёды паказваць панэль інструментаў у поўнаэкранным рэжыме</translation> <translation id="2143778271340628265">Ручная канфігурацыя проксі</translation> @@ -1690,6 +1694,7 @@ <translation id="2291452790265535215">Паспрабуйце праглядзець закладкі, выканаць пошук па тэме або іншае дзеянне на бакавой панэлі</translation> <translation id="229182044471402145">Адпаведны шрыфт не знойдзены.</translation> <translation id="2292848386125228270">Запусціце <ph name="PRODUCT_NAME" /> як звычайны карыстальнік. Калі ў мэтах распрацоўкі вам трэба запусціць браўзер з правамі каранёвага доступу, перазапусціце яго, задаўшы эксперыментальны параметр "--no-sandbox".</translation> +<translation id="2292862094862078674">Праверце падключэнне да інтэрнэту і паўтарыце спробу. Вы таксама можаце выбраць адну з раней згенерыраваных тэм ніжэй.</translation> <translation id="2294081976975808113">Прыватнасць змесціва экрана</translation> <translation id="2294358108254308676">Сапраўды ўсталяваць <ph name="PRODUCT_NAME" />?</translation> <translation id="229477815107578534">Праверце налады</translation> @@ -3029,6 +3034,7 @@ <translation id="3325804108816646710">Ідзе пошук даступных профіляў...</translation> <translation id="3325910708063135066">Камера і мікрафон выключаны ў наладах System Preferences сістэмы Mac</translation> <translation id="3325930488268995856">Сховішча Microsoft OneDrive падключана</translation> +<translation id="3325995804968971809">Стыль</translation> <translation id="3327050066667856415">Прылады Chromebook распрацаваны для вашай бяспекі. Ваша прылада абараняецца ад шкодных праграм аўтаматычна – дадатковае праграмнае забеспячэнне не патрабуецца.</translation> <translation id="3328489342742826322">Пры аднаўленні з рэзервовай копіі будуць выдалены ўсе існуючыя праграмы Linux і даныя ў папцы файлаў Linux.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3213,6 +3219,7 @@ <translation id="3481268647794498892">Адкрыецца ў браўзеры <ph name="ALTERNATIVE_BROWSER_NAME" /> праз <ph name="COUNTDOWN_SECONDS" /> с</translation> <translation id="348268549820508141">Распазнаванне маўлення</translation> <translation id="3482719661246593752">Сайт <ph name="ORIGIN" /> можа праглядаць наступныя файлы</translation> +<translation id="3484595034894304035">Персаналізуйце шпалеры, застаўку, цёмную тэму і не толькі</translation> <translation id="3484869148456018791">Стварыць новы сертыфікат</translation> <translation id="3486950712960783074">Ваша паездка</translation> <translation id="3487007233252413104">ананімная функцыя</translation> @@ -3305,6 +3312,7 @@ <translation id="3561201631376780358">Каб праглядзець усе закладкі, адкрыйце бакавую панэль</translation> <translation id="3562423906127931518">Гэты працэс можа заняць некалькі хвілін. Ідзе наладжванне кантэйнера Linux.</translation> <translation id="3562655211539199254">Праглядайце нядаўна адкрытыя ўкладкі Chrome з тэлефона</translation> +<translation id="3563392617245068355">Настрой</translation> <translation id="3563432852173030730">Не ўдалося спампаваць праграму-кіёск.</translation> <translation id="3563558822383875692">Наладжваецца змесціва для спампоўвання.</translation> <translation id="3564334271939054422">Сетка Wi-Fi, якую вы выкарыстоўваеце (<ph name="NETWORK_ID" />), можа запатрабаваць ад вас наведаць яе старонку ўваходу.</translation> @@ -4186,6 +4194,7 @@ <translation id="4250229828105606438">Здымак экрана</translation> <translation id="4250680216510889253">Не</translation> <translation id="4251377547188244181">Рэгістрацыя прылады для работы ў рэжыме кіёска і лічбавай знешняй рэкламы</translation> +<translation id="4252141040239557279">Відарыс <ph name="INDEX" /> з <ph name="A" /></translation> <translation id="4252899949534773101">Bluetooth выключаны</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" />: змесціва ўкладкі абагулена</translation> <translation id="4253168017788158739">Нататка</translation> @@ -4564,6 +4573,7 @@ <translation id="4548858987594081919">Укажыце сваё імя карыстальніка для гэтага сайта, каб даныя для ўваходу можна было захаваць у Менеджары пароляў Google</translation> <translation id="4549791035683739768">На вашым ключы бяспекі няма захаваных адбіткаў пальцаў</translation> <translation id="4550926046134589611">Некаторыя спасылкі, якія падтрымліваюцца, па-ранейшаму будуць адкрывацца ў праграме "<ph name="APP_NAME" />".</translation> +<translation id="4551379727767354516">Вашы нядаўнія тэмы, створаныя AI</translation> <translation id="4551763574344810652">Каб адрабіць, націсніце <ph name="MODIFIER_KEY_DESCRIPTION" /></translation> <translation id="4553526521109675518">Каб змяніць мову прылады, трэба перазапусціць Chromebook. <ph name="BEGIN_LINK_LEARN_MORE" />Даведацца больш<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">Знешняе пашырэнне мае тую ж версію, што існуючае пашырэнне, або ніжэйшую.</translation> @@ -5885,6 +5895,7 @@ <translation id="5620568081365989559">Інструменты распрацоўшчыка запытваюць поўны доступ да папкі "<ph name="FOLDER_PATH" />". Упэўніцеся, што канфідэнцыяльная інфармацыя не будзе раскрыта.</translation> <translation id="5620612546311710611">статыстыка выкарыстання</translation> <translation id="5621272825308610394">Бачная назва не ўказана</translation> +<translation id="5621350029086078628">Гэта эксперыментальная функцыя на аснове AI.</translation> <translation id="562250930904332809">&Адключыць Імгненныя субцітры</translation> <translation id="5623282979409330487">Гэты сайт карыстаецца доступам да датчыкаў руху.</translation> <translation id="5623842676595125836">Журнал</translation> @@ -6002,6 +6013,7 @@ <translation id="572328651809341494">Нядаўнія ўкладкі</translation> <translation id="5723508132121499792">Няма праграм, якія працуюць у фонавым рэжыме</translation> <translation id="5723967018671998714">У рэжыме інкогніта староннія файлы cookie блакіруюцца</translation> +<translation id="5725112283692663422">Адпраўце водгук на стварэнне тэмы з дапамогай AI</translation> <translation id="5727728807527375859">Пашырэнні, праграмы і тэмы могуць нашкодзіць вашаму камп'ютару. Вы сапраўды хочаце працягнуць?</translation> <translation id="5728290366864286776">Гэта пашырэнне можа чытаць і змяняць інфармацыю сайтаў або запускацца ў фонавым рэжыме</translation> <translation id="5728450728039149624">Параметры блакіроўкі экрана Smart Lock</translation> @@ -6478,6 +6490,7 @@ <translation id="610487644502954950">Бакавая панэль адмацавана</translation> <translation id="6104929924898022309">Выкарыстоўвайце клавішу пошуку, каб змяніць паводзіны функцыянальных клавіш</translation> <translation id="6106167152849320869">Калі на папярэднім этапе вы таксама ўключылі адпраўку даных пра выкарыстанне і дыягностыку, гэтыя звесткі будуць збірацца для ўсталяваных праграм.</translation> +<translation id="6108952804512516814">Стварыць з дапамогай AI</translation> <translation id="6111718295497931251">Выдаліць доступ да Google Дыска</translation> <translation id="6111972606040028426">Уключыць Памочніка Google</translation> <translation id="6112294629795967147">Каб змяніць памер, націсніце тут</translation> @@ -7273,6 +7286,7 @@ <translation id="6761623907967804682">Даныя сайта забаронена захоўваць на прыладзе</translation> <translation id="6762833852331690540">Уключана</translation> <translation id="6762861159308991328">Вы можаце змяніць спосаб, якім адкрываюцца спасылкі, у наладах праграмы</translation> +<translation id="6764633064754857889">Прагледзець спасылку</translation> <translation id="676560328519657314">Вашы спосабы аплаты ў Google Pay</translation> <translation id="6766488013065406604">Перайсці ў Менеджар пароляў Google</translation> <translation id="6767566652486411142">Выбраць іншую мову...</translation> @@ -8243,6 +8257,7 @@ <translation id="752098910262610337">Паказаць спалучэнні клавіш</translation> <translation id="7521430434164837205">Файлы Microsoft 365</translation> <translation id="7522255036471229694">Скажыце "Ok Google"</translation> +<translation id="7523112275619538890">Абагульвайце файлы і іншае змесціва з прыладамі паблізу</translation> <translation id="7523117833414447032">Пры агучванні загалоўных літар</translation> <translation id="7523585675576642403">Пераймянуйце профіль</translation> <translation id="7525067979554623046">Стварыць</translation> @@ -8411,6 +8426,7 @@ <translation id="7657090467145778067">Малая эканомія</translation> <translation id="7657218410916651670"><ph name="BEGIN_LINK_GOOGLE" />Іншыя дзеянні<ph name="END_LINK_GOOGLE" /> могуць захоўвацца ва Уліковым запісе Google, у які вы ўвайшлі. Іх можна выдаліць у любы час.</translation> <translation id="7658239707568436148">Скасаваць</translation> +<translation id="7658727964021657194">Нядаўняя тэма <ph name="TILE_INDEX" />, створаная AI</translation> <translation id="7659154729610375585">Усё роўна выйсці з рэжыму інкогніта?</translation> <translation id="7659336857671800422">Азнаёмцеся з дапаможнікам па прыватнасці</translation> <translation id="7659584679870740384">Вы не аўтарызаваны для выкарыстання гэтай прылады. Звярніцеся да адміністратара з запытам на дазвол для ўваходу.</translation> @@ -8432,6 +8448,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Вярніце прыладу <ph name="DEVICE_TYPE" /> на працягу {NUM_WEEKS} тыдня}one{Вярніце прыладу <ph name="DEVICE_TYPE" /> на працягу {NUM_WEEKS} тыдня}few{Вярніце прыладу <ph name="DEVICE_TYPE" /> на працягу {NUM_WEEKS} тыдняў}many{Вярніце прыладу <ph name="DEVICE_TYPE" /> на працягу {NUM_WEEKS} тыдняў}other{Вярніце прыладу <ph name="DEVICE_TYPE" /> на працягу {NUM_WEEKS} тыдня}}</translation> <translation id="7668423670802040666">У Менеджары пароляў Google для ўліковага запісу <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">Спецыяльныя магчымасці спрашчаюць карыстанне прыладай. Каб атрымаць доступ да хуткіх налад, націсніце на гадзіннік унізе экрана.</translation> +<translation id="7669620291129890197">Бачна вашым прыладам</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{Няправільны PIN-код. У вас засталася адна спроба.}one{Няправільны PIN-код. У вас засталася # спроба.}few{Няправільны PIN-код. У вас засталося # спробы.}many{Няправільны PIN-код. У вас засталося # спроб.}other{Няправільны PIN-код. У вас засталося # спробы.}}</translation> <translation id="7670434942695515800">Для лепшай прадукцыйнасці сістэмы абнавіце яе да апошняй версіі. Мы рэкамендуем стварыць рэзервовыя копіі файлаў на выпадак збою пры абнаўленні. Як толькі пачнецца абнаўленне, Linux завершыць працу. Захавайце адкрытыя файлы, перш чым працягнуць. <ph name="LINK_START" />Даведацца больш<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Субцітры</translation> @@ -8631,6 +8648,7 @@ <translation id="7807711621188256451">Заўсёды даваць хосту <ph name="HOST" /> доступ да камеры</translation> <translation id="7810202088502699111">Усплывальныя вокны на гэтай старонцы заблакіраваны.</translation> <translation id="7810367892333449285">Запіс павінен мець фармат <ph name="LPA_0" />$<ph name="LPA_1" />адрас SM-DP+<ph name="LPA_2" />$<ph name="LPA_3" />неабавязковы ідэнтыфікатар для супастаўлення<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Паўтарыце спробу або выберыце адну з раней згенерыраваных тэм ніжэй.</translation> <translation id="7814458197256864873">&Капіраваць</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">Змяніць спалучэнне клавіш <ph name="SHORTCUT" /> для пашырэння "<ph name="EXTENSION_NAME" />"</translation> @@ -8735,6 +8753,7 @@ <translation id="789722939441020330">Не дазваляць сайтам аўтаматычна спампоўваць некалькі файлаў</translation> <translation id="7897900149154324287">У далейшым не забывайце адключаць здымную прыладу праз праграму "Файлы", перад тым як вымаць яе, інакш вы можаце страціць даныя.</translation> <translation id="7898725031477653577">Заўсёды перакладаць</translation> +<translation id="7899324822972399722">Відарыс <ph name="INDEX" /> з <ph name="A" />, стыль: <ph name="B" /></translation> <translation id="7901405293566323524">Phone Hub</translation> <translation id="7903290522161827520">Шукаеце кампаненты браўзера? Наведайце старонку</translation> <translation id="7903429136755645827">Націсніце, каб наладзіць кіраванне гульнёй</translation> @@ -8995,6 +9014,7 @@ <translation id="8089547136368562137">Абараняецца лепшымі тэхналогіямі Google</translation> <translation id="8090234456044969073">Прагледзець спіс вэб-сайтаў, якія вы наведваеце часцей за ўсё</translation> <translation id="8090513782447872344">Вы можаце вярнуцца ў любы час, і прагледзець Дапаможнік па прыватнасці яшчэ раз</translation> +<translation id="8090686009202681725">Стварэнне тэмы з дапамогай AI</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> не адказвае</translation> <translation id="8094536695728193970">Абрыкос</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Рэзервовае капіраванне на Google Дыск. Лёгка аднаўляйце даныя і пераносьце іх на іншыя прылады. Стварайце рэзервовыя копіі даных праграм.<ph name="END_PARAGRAPH1" /> @@ -9011,6 +9031,7 @@ <translation id="8098616321286360457">Патрабуецца падключэнне да сеткі</translation> <translation id="8100230553590752325">Выкарыстоўвайце захаваныя паролі на любой прыладзе</translation> <translation id="810068641062493918"><ph name="LANGUAGE" />, выбрана. Каб скасаваць выбар, націсніце "Пошук" і клавішу прабелу.</translation> +<translation id="8100725874569949614">Відарыс <ph name="INDEX" /> з <ph name="A" />, настрой: <ph name="C" />.</translation> <translation id="8101409298456377967">Стварайце паролі, захоўвайце іх і кіруйце імі, каб мець магчымасць з лёгкасцю ўваходзіць ва ўліковыя запісы на сайтах і ў праграмах. <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation> <translation id="810185532889603849">Карыстальніцкі колер</translation> <translation id="8101987792947961127">Пры наступнай перазагрузцы патрабуецца Powerwash</translation> @@ -9020,6 +9041,7 @@ <translation id="8107015733319732394">Ідзе ўсталяванне Крамы Google Play на <ph name="DEVICE_TYPE" />. Гэта можа заняць некалькі хвілін.</translation> <translation id="810728361871746125">Раздзяляльнасць дысплэя</translation> <translation id="8109109153262930486">Стандартны аватар</translation> +<translation id="8109991406044913868">Тэма, створаная AI</translation> <translation id="8110393529211831722">Падпіска ўсталёўваецца толькі на гэту прыладу і не сінхранізуецца з іншымі прыладамі, на якіх вы ўвайшлі ва ўліковы запіс. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Ідзе спампоўванне спіса кантактаў...</translation> <translation id="8115139559594092084">З Google Дыска</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 6ef50f89..a2ea381 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -4105,7 +4105,7 @@ <translation id="4175137578744761569">Porpra clar i blanc</translation> <translation id="4176463684765177261">Desactivat</translation> <translation id="4176864026061939326">Aquest és un dispositiu gestionat. L'administrador del dispositiu requereix un perfil nou per al compte <ph name="USER_EMAIL_ADDRESS" />.</translation> -<translation id="4177501066905053472">Temes d'anuncis</translation> +<translation id="4177501066905053472">Temes d'anunci</translation> <translation id="4177668342649553942">Obre <ph name="SHORTCUT_NAME" /> - <ph name="APP_NAME" /></translation> <translation id="4178220097446335546">A fi d'oblidar aquesta subscripció i les xarxes associades, ves a la pàgina de subscripció de Passpoint per suprimir la subscripció.</translation> <translation id="4180788401304023883">Voleu suprimir el certificat de CA "<ph name="CERTIFICATE_NAME" />"?</translation> @@ -5119,7 +5119,7 @@ <translation id="4992869834339068470">Ajuda a millorar les funcions i el rendiment de Chrome OS. Les dades són agregades i estan molt protegides.</translation> <translation id="4994426888044765950">Si mantens premuda una tecla, el caràcter de la tecla es repetirà</translation> <translation id="4994754230098574403">S'està configurant</translation> -<translation id="4995293419989417004">Més informació sobre els temes d'anuncis</translation> +<translation id="4995293419989417004">Més informació sobre els temes d'anunci</translation> <translation id="4995676741161760215">L'extensió està activada</translation> <translation id="4996851818599058005">{NUM_VMS,plural, =0{No s'ha trobat cap màquina virtual <ph name="VM_TYPE" />}=1{S'ha trobat una màquina virtual <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}other{S'han trobat {NUM_VMS} màquines virtuals <ph name="VM_TYPE" />: <ph name="VM_NAME_LIST" />}}</translation> <translation id="4997086284911172121">No hi ha connexió a Internet.</translation> @@ -8372,7 +8372,7 @@ <translation id="7634337648687970851">Actualment no s'admet la recuperació de dades locals.</translation> <translation id="7634566076839829401">S'ha produït un error; torna-ho a provar.</translation> <translation id="7635048370253485243">Fixada per l'administrador</translation> -<translation id="7635711411613274199">El fet que els anuncis que veus mentre navegues es personalitzin o no dependrà d'aquesta opció de configuració, dels <ph name="BEGIN_LINK1" />temes d'anuncis<ph name="LINK_END1" />, de la <ph name="BEGIN_LINK2" />configuració de galetes<ph name="LINK_END2" /> i de si el lloc web que estàs visitant personalitza els anuncis</translation> +<translation id="7635711411613274199">El fet que els anuncis que veus mentre navegues es personalitzin o no dependrà d'aquesta opció de configuració, dels <ph name="BEGIN_LINK1" />temes d'anunci<ph name="LINK_END1" />, de la <ph name="BEGIN_LINK2" />configuració de galetes<ph name="LINK_END2" /> i de si el lloc web que estàs visitant personalitza els anuncis</translation> <translation id="7636346903338549690">Llocs web amb permís per utilitzar galetes de tercers</translation> <translation id="7636919061354591437">Instal·la en aquest dispositiu</translation> <translation id="7637253234491814483">Toca el sensor d'empremtes digitals que hi ha a l'extrem superior dret del teclat, al costat del botó d'engegada. Les dades de l'empremta digital s'emmagatzemen de manera segura i no surten mai del <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index b666c18..875dec1 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -2641,6 +2641,7 @@ <translation id="2990313168615879645">Προσθήκη Λογαριασμού Google</translation> <translation id="2990375978470734995">Για να εφαρμοστεί αυτή η αλλαγή, συνδέστε ξανά τα εξωτερικά αξεσουάρ σας.</translation> <translation id="2990583317361835189">Να μην επιτρέπεται στους ιστοτόπους να χρησιμοποιούν τους αισθητήρες κίνησης</translation> +<translation id="2991182900092497283">Καταχωρίστε έναν λόγο για την επικόλληση αυτών των δεδομένων:</translation> <translation id="2992931425024192067">Εμφάνιση όλου του περιεχομένου ειδοποιήσεων</translation> <translation id="2993517869960930405">Πληροφορίες εφαρμογής</translation> <translation id="2996108796702395498">Ο σειριακός αριθμός της συσκευής σας είναι <ph name="SERIAL_NUMBER" />. Αυτός ο αριθμός μπορεί να χρησιμοποιηθεί για βοήθεια σχετικά με την ενεργοποίηση της υπηρεσίας.</translation> @@ -3154,6 +3155,7 @@ <translation id="3432762828853624962">Shared Workers</translation> <translation id="3433507769937235446">Κλείδωμα κατά την αποχώρηση</translation> <translation id="3433621910545056227">Ωχ! Το σύστημα απέτυχε να εφαρμόσει το κλείδωμα χρόνου εγκατάστασης χαρακτηριστικών.</translation> +<translation id="3434025015623587566">Ο Διαχειριστής κωδικών πρόσβασης Google χρειάζεται περισσότερη πρόσβαση</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="3434272557872943250">Εάν είναι ενεργή η ρύθμιση της πρόσθετης Δραστηριότητας ιστού και εφαρμογών για το παιδί σας, αυτά τα δεδομένα μπορεί να αποθηκευτούν στον Λογαριασμό του Google. Μάθετε περισσότερα σχετικά με αυτές τις ρυθμίσεις και τον τρόπο με τον οποίο μπορείτε να τις προσαρμόσετε στη διεύθυνση families.google.com.</translation> <translation id="3434475275396485144">Η διαχείριση αυτής της ρύθμισης γίνεται από τον διαχειριστή του τηλεφώνου σας</translation> @@ -3366,6 +3368,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{{COUNT} λογαριασμός χρησιμοποιεί τον ίδιο κωδικό πρόσβασης}other{{COUNT} λογαριασμοί χρησιμοποιούν τον ίδιο κωδικό πρόσβασης}}</translation> <translation id="3605780360466892872">Άνετος</translation> <translation id="3607671391978830431">Για ένα παιδί</translation> +<translation id="3608460311600621471">Καταχωρίστε έναν λόγο για την εκτύπωση αυτών των δεδομένων:</translation> <translation id="3608730769702025110">Βήμα 3 από 4: Έλεγχος στοιχείων προσωπικής ταυτοποίησης</translation> <translation id="3609277884604412258">Γρήγορη αναζήτηση</translation> <translation id="3610241585790874201">Δεν επιτρέπεται να αποθηκεύουν δεδομένα στη συσκευή σας</translation> @@ -6666,6 +6669,7 @@ <translation id="6238982280403036866">Επιτρέπεται να χρησιμοποιούν JavaScript</translation> <translation id="6239558157302047471">Επαναφόρτωση &πλαισίου</translation> <translation id="6240821072888636753">Ερώτηση κάθε φορά</translation> +<translation id="6240964651812394252">Για να χρησιμοποιήσετε τον Διαχειριστή κωδικών πρόσβασης Google με το λειτουργικό σύστημα, επανεκκινήστε το Chrome και επιτρέψτε την πρόσβαση στον διαχειριστή κωδικών πρόσβασης του υπολογιστή σας. Οι καρτέλες θα ανοίξουν ξανά μετά την επανεκκίνηση.</translation> <translation id="6241530762627360640">Πρόσβαση σε πληροφορίες σχετικά με τις συσκευές Bluetooth που βρίσκονται σε ζεύξη με το σύστημά σας και εντοπισμός κοντινών συσκευών Bluetooth.</translation> <translation id="6241844896329831164">Δεν απαιτείται πρόσβαση</translation> <translation id="6242574558232861452">Έλεγχος σε σχέση με τις πολιτικές ασφαλείας του οργανισμού σας.</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index e7379334..c7af0e1f 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -2632,6 +2632,7 @@ <translation id="2990313168615879645">Lisa Google'i konto</translation> <translation id="2990375978470734995">Selle muudatuse jõustumiseks ühendage välised tarvikud uuesti.</translation> <translation id="2990583317361835189">Ära luba saitidel kasutada liikumisandureid</translation> +<translation id="2991182900092497283">Sisestage nende andmete kleepimise põhjus.</translation> <translation id="2992931425024192067">Kuva kogu märguande sisu</translation> <translation id="2993517869960930405">Rakenduse teave</translation> <translation id="2996108796702395498">Teie seadme seerianumber on <ph name="SERIAL_NUMBER" />. See number on abiks teenuse aktiveerimisel.</translation> @@ -3145,6 +3146,7 @@ <translation id="3432762828853624962">Shared Workers</translation> <translation id="3433507769937235446">Lukusta lahkumisel</translation> <translation id="3433621910545056227">Vabandust! Süsteemil ei õnnestunud määrata seadme installiaegsete atribuutide lukustust.</translation> +<translation id="3434025015623587566">Google'i paroolihaldur vajab laialdasemat juurdepääsu</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="3434272557872943250">Kui täiendavad veebi- ja rakendustegevused on teie lapse jaoks sisse lülitatud, võidakse need andmed salvestada tema Google'i kontole. Seadete ja nende kohandamise kohta leiate lisateavet saidilt families.google.com.</translation> <translation id="3434475275396485144">Seda seadet haldab teie telefoni administraator</translation> @@ -3357,6 +3359,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{{COUNT} konto kasutab sama parooli}other{{COUNT} kontot kasutavad sama parooli}}</translation> <translation id="3605780360466892872">Triiksärk</translation> <translation id="3607671391978830431">Lapsele</translation> +<translation id="3608460311600621471">Sisestage nende andmete printimise põhjus.</translation> <translation id="3608730769702025110">3. toiming 4-st: vaadake üle isikut tuvastav teave</translation> <translation id="3609277884604412258">Kiirotsing</translation> <translation id="3610241585790874201">Pole lubatud andmeid teie seadmesse salvestada</translation> @@ -6655,6 +6658,7 @@ <translation id="6238982280403036866">JavaScripti kasutamine on lubatud</translation> <translation id="6239558157302047471">Laadi &raam uuesti</translation> <translation id="6240821072888636753">Küsi iga kord</translation> +<translation id="6240964651812394252">Google'i paroolihalduri kasutamiseks oma operatsioonisüsteemiga käivitage Chrome uuesti ja lubage juurdepääs oma arvuti paroolihaldurile. Pärast uuesti käivitamist avanevad teie vahelehed taas.</translation> <translation id="6241530762627360640">Juurdepääs teie süsteemiga seotud Bluetoothi seadmete teabele ja läheduses olevate Bluetoothi seadmete tuvastamine.</translation> <translation id="6241844896329831164">Juurdepääsu pole vaja</translation> <translation id="6242574558232861452">Kontrollitakse kooskõlas teie organisatsiooni turvaeeskirjadega.</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 6954a15..6c7861f 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -831,7 +831,7 @@ <translation id="163072119192489970">Datuak bidaltzen eta jasotzen amai dezakete</translation> <translation id="1630768113285622200">Berrabiarazi eta egin aurrera</translation> <translation id="1631503405579357839">Daltonismoa</translation> -<translation id="1632278969378690607">Bilaketa-tekla + klik</translation> +<translation id="1632278969378690607">Bilaketa + klik</translation> <translation id="1632293440289326475">Aktibatu Energia-aurreztailea bateriaren iraupena luzatzeko</translation> <translation id="1632756664321977232">Ebakitzeko tresna</translation> <translation id="163309982320328737">Hasierako karakterearen zabalera beteta dago</translation> @@ -3962,7 +3962,7 @@ <translation id="4049783682480068824">{COUNT,plural, =1{# kontaktu ez dago erabilgarri. Nearby Share kontaktu horrekin erabiltzeko, gehitu kontaktuetan haren Google-ko kontuarekin lotutako helbide elektronikoa.}other{# kontaktu ez daude erabilgarri. Nearby Share kontaktu horiekin erabiltzeko, gehitu kontaktuetan haien Google-ko kontuarekin lotutako helbide elektronikoa.}}</translation> <translation id="4050225813016893843">Autentifikazio-metodoa</translation> <translation id="4050534976465737778">Egiaztatu bi gailuak desblokeatuta eta elkarrengandik hurbil daudela, eta Bluetootha aktibatuta daukatela. Zure kontaktuetan ez dagoen Chromebook batekin edukia partekatzeko asmoa baduzu, egiaztatu Nearby-ren ikusgaitasuna aktibatuta dagoela (ireki egoeraren eremua eta, gero, aktibatu Nearby-ren ikusgaitasuna). <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation> -<translation id="4051177682900543628">bilaketa-tekla + eskuinera egiteko gezi-tekla</translation> +<translation id="4051177682900543628">Bilaketa + eskuinera egiteko gezi-tekla</translation> <translation id="4052120076834320548">Oso txikia</translation> <translation id="4052913941260326985">Sortu QR kodea</translation> <translation id="4054070260844648638">Guztientzat ikusgai</translation> @@ -5277,7 +5277,7 @@ <translation id="5123433949759960244">Saskibaloiko baloia</translation> <translation id="5125751979347152379">URLak ez du balio.</translation> <translation id="5125967981703109366">Txartel honi buruz</translation> -<translation id="512642543295077915">bilaketa-tekla + Atzera tekla</translation> +<translation id="512642543295077915">Bilaketa + Atzera tekla</translation> <translation id="5126611267288187364">Ikusi aldaketak</translation> <translation id="5127620150973591153">Konexio seguruaren IDa: <ph name="TOKEN" /></translation> <translation id="5127805178023152808">Sinkronizazioa desaktibatuta dago</translation> @@ -5390,7 +5390,7 @@ <translation id="5213891612754844763">Erakutsi proxy-ezarpenak</translation> <translation id="5214639857958972833"><ph name="BOOKMARK_TITLE" /> laster-marka sortu da.</translation> <translation id="5215502535566372932">Hautatu herrialdea</translation> -<translation id="5220011581825921581">bilaketa-tekla + gora egiteko gezi-tekla</translation> +<translation id="5220011581825921581">Bilaketa + gora egiteko gezi-tekla</translation> <translation id="5222403284441421673">Segurua ez den deskarga bat blokeatu da</translation> <translation id="5222676887888702881">Amaitu saioa</translation> <translation id="5225324770654022472">Erakutsi aplikazioen lasterbidea</translation> @@ -6805,7 +6805,7 @@ <translation id="6368276408895187373">Gaituta: <ph name="VARIATION_NAME" /></translation> <translation id="636850387210749493">Erregistratu erakundean</translation> <translation id="6370021412472292592">Ezin izan da manifestua kargatu.</translation> -<translation id="6370551072524410110">bilaketa-tekla + Maius + Atzera tekla</translation> +<translation id="6370551072524410110">Bilaketa + Maius + Atzera tekla</translation> <translation id="637135143619858508">Handia</translation> <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374469231428023295">Saiatu berriro</translation> @@ -7594,7 +7594,7 @@ <translation id="6998793565256476099">Erregistratu gailua bideokonferentziak egiteko</translation> <translation id="6999956497249459195">Talde berria</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> konektatu da baina konfiguratu egin behar da</translation> -<translation id="7000347579424117903">Erabili Ktrl, Alt edo bilaketa-tekla</translation> +<translation id="7000347579424117903">Erabili Ktrl, Alt edo Bilaketa</translation> <translation id="7001036685275644873">Linux aplikazioen eta fitxategien babeskopia egiten</translation> <translation id="7001066449188684145">Identitatea egiaztatu behar duzu <ph name="PRINTER_NAME" /> inprimagailuaren bidez inprimatzeko. Jarri administratzailearekin harremanetan.</translation> <translation id="7001397294201412227">Erabili telefono, tableta edo segurtasun-giltza bat</translation> @@ -8694,7 +8694,7 @@ <translation id="7870730066603611552">Berrikusi sinkronizazio-aukerak konfigurazioaren ondoren</translation> <translation id="7870790288828963061">Ez da aurkitu kiosko-aplikazio berriagorik. Ez dago ezer eguneratzeko. Kendu USB memoria.</translation> <translation id="7871109039747854576">Erabili <ph name="COMMA" /> eta <ph name="PERIOD" /> teklak aukeren zerrenda erakusteko</translation> -<translation id="7871277686245037315">bilaketa-tekla + ezkerrera egiteko gezi-tekla</translation> +<translation id="7871277686245037315">Bilaketa + ezkerrera egiteko gezi-tekla</translation> <translation id="7871691770940645922">Braille-bistaratze birtuala</translation> <translation id="787268756490971083">Desaktibatuta</translation> <translation id="7872758299142009420">Habiaratutako talde gehiegi daude: <ph name="ERROR_LINE" /></translation> @@ -9526,7 +9526,7 @@ <translation id="851991974800416566">Erabili pasahitz konplexu bat bizkor</translation> <translation id="8523493869875972733">Mantendu aldaketak</translation> <translation id="8523849605371521713">Gidalerroei jarraikiz gehitu da</translation> -<translation id="8524594273111932386">bilaketa-tekla + behera egiteko gezi-tekla</translation> +<translation id="8524594273111932386">Bilaketa + behera egiteko gezi-tekla</translation> <translation id="8524783101666974011">Gorde txartelak Google-ko kontuan</translation> <translation id="8525306231823319788">Pantaila osoa</translation> <translation id="8525461909394569609">Aplikazio honek hauetako sareko edukia dauka:</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 4e4fb9ce..e706840 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -6003,7 +6003,7 @@ <translation id="5711010025974903573">Zapisnici usluge</translation> <translation id="5711983031544731014">Otključavanje nije moguće. Unesite svoju zaporku.</translation> <translation id="5712153969432126546">Web-lokacije ponekad objavljuju PDF-ove, primjerice dokumente, ugovore i obrasce</translation> -<translation id="571222594670061844">Web-lokacije mogu prikazivati upite za prijavu usluga za identitet</translation> +<translation id="571222594670061844">Web-lokacije mogu prikazivati upite za prijavu s usluga za provjeru identiteta</translation> <translation id="5713033452812927234">Otvaranje prozora s prethodnog uređaja</translation> <translation id="5713158217420111469">Povezano s uređajem <ph name="DEVICE" /></translation> <translation id="5713960379473463904">Stil unosa razmaka</translation> @@ -6208,7 +6208,7 @@ <translation id="5876851302954717356">Nova kartica s desne strane</translation> <translation id="5877064549588274448">Kanal je promijenjen. Ponovo pokrenite uređaj za primjenu promjena.</translation> <translation id="5877584842898320529">Odabrani pisač nije dostupan ili nije ispravno instaliran. <ph name="BR" /> Provjerite pisač ili pokušajte odabrati neki drugi.</translation> -<translation id="5878945009165002849">Blokiraj upite za prijavu usluga za identitet</translation> +<translation id="5878945009165002849">Blokiraj upite za prijavu s usluga za provjeru identiteta</translation> <translation id="5881710783061958569">Ako jeste, uredite zaporku spremljenu na usluzi <ph name="BRAND" /> kako bi odgovarala vašoj novoj zaporki.</translation> <translation id="5882919346125742463">Poznate mreže</translation> <translation id="5883356647197510494">Automatski je blokirano sljedeće: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 631a42ff..460976e4 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -277,6 +277,7 @@ <translation id="1203559206734265703">A Protected Audience hibakeresése engedélyezve van.</translation> <translation id="120368089816228251">Hangjegy</translation> <translation id="1203942045716040624">Shared worker: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Link előnézete</translation> <translation id="1206832039833782423">A biztonsági kód a kártya hátoldalán található.</translation> <translation id="1210678701920254279">Nyomtatók megtekintése és hozzáadása, valamint aktív nyomtatási feladatok megtekintése</translation> <translation id="1211769675100312947">A megjelenő parancsikonokat Ön választhatja ki</translation> @@ -616,6 +617,7 @@ <translation id="1478340334823509079">Részletek: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">A telepítés nincs engedélyezve</translation> <translation id="1480663089572535854">Visszaléphet, és módosíthatja a „Kiválasztás” művelethez hozzárendelt kapcsolót. Bármikor kikapcsolhatja az automatikus keresést a Beállításokban.</translation> +<translation id="1481001611315487791">További információ arról, hogy miként hozhat létre témákat az AI használatával.</translation> <translation id="1481537595330271162">Hiba a lemez átméretezése során</translation> <translation id="1482626744466814421">Lap hozzáadása a könyvjelzőkhöz…</translation> <translation id="1482772681918035149">jelszavak szerkesztése</translation> @@ -810,6 +812,7 @@ <translation id="1615433306336820465">A biztonsági kulcson tárolt bejelentkezési adatok kezelése</translation> <translation id="1616206807336925449">A bővítmény nem igényel különleges engedélyeket.</translation> <translation id="1616298854599875024">A(z) „<ph name="IMPORT_NAME" />” bővítményt nem lehetett importálni, mivel az nem megosztott modul</translation> +<translation id="161654560322394775"><ph name="INDEX" />. kép, összesen: <ph name="A" /> kép, stílus: <ph name="B" />, hangulat: <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Folyamatban van annak ellenőrzése, hogy ezek az adatok megfelelnek-e szervezete biztonsági szabályainak}=1{Folyamatban van annak ellenőrzése, hogy ez a fájl megfelel-e szervezete biztonsági szabályainak}other{Folyamatban van annak ellenőrzése, hogy ezek a fájlok megfelelnek-e szervezete biztonsági szabályainak}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">Súgó</translation> @@ -1516,6 +1519,7 @@ <translation id="2140902257485550046">Válassza ki az összes bővítmény letiltásához ezen a webhelyen</translation> <translation id="2142328300403846845">Link megnyitása mint</translation> <translation id="2142582065325732898">Kapcsolja be a <ph name="LINK1_BEGIN" />Chrome-szinkronizálást<ph name="LINK1_END" /> a nemrég megnyitott Chrome-lapok megtekintéséhez. <ph name="LINK2_BEGIN" />További információ<ph name="LINK2_END" />.</translation> +<translation id="2143089736086572103">Néhány ismerős számára látható</translation> <translation id="2143667386128949432">{COUNT,plural, =0{A Chrome ma ismét letiltja a cookie-kat}=1{A Chrome holnap ismét letiltja a cookie-kat}other{# nap múlva ismét le lesznek tiltva a cookie-k}}</translation> <translation id="2143765403545170146">Eszköztár mindig látható teljes képernyős módban</translation> <translation id="2143778271340628265">Proxy beállítása kézzel</translation> @@ -1703,6 +1707,7 @@ <translation id="2291452790265535215">Próbálja meg az oldalsó panelt használni a könyvjelzőkhöz, az utazásokhoz és egyebekhez való hozzáféréshez.</translation> <translation id="229182044471402145">Nem található ilyen betűtípus.</translation> <translation id="2292848386125228270">Indítsa el a <ph name="PRODUCT_NAME" /> alkalmazást normál felhasználóként. Ha a fejlesztéshez rootként kell futtatnia, futtassa a --no-sandbox jelző használatával.</translation> +<translation id="2292862094862078674">Ellenőrizze az internetkapcsolatot, és próbálja újra. Alább továbbra is választhat a korábban létrehozott témák közül.</translation> <translation id="2294081976975808113">Adatvédelem a képernyőn</translation> <translation id="2294358108254308676">Biztosan telepíti a <ph name="PRODUCT_NAME" />-ot?</translation> <translation id="229477815107578534">Tekintse át beállításait</translation> @@ -3042,6 +3047,7 @@ <translation id="3325804108816646710">Rendelkezésre álló profilok keresése…</translation> <translation id="3325910708063135066">A kamera és a mikrofon ki van kapcsolva a Mac Rendszerbeállításokban</translation> <translation id="3325930488268995856">Microsoft OneDrive csatlakoztatva</translation> +<translation id="3325995804968971809">Stílus</translation> <translation id="3327050066667856415">A Chromebookokat a biztonság köré terveztük. Eszközét automatikusan védi a rendszer a rosszindulatú programokkal szemben – nincs szükség további szoftverek telepítésére.</translation> <translation id="3328489342742826322">A biztonsági másolat visszaállításával törli a Linux-fájlok mappájában található összes meglévő Linux-alkalmazást és -adatot.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3226,6 +3232,7 @@ <translation id="3481268647794498892">Megnyitás a(z) <ph name="ALTERNATIVE_BROWSER_NAME" /> böngészőben <ph name="COUNTDOWN_SECONDS" /> másodperc múlva…</translation> <translation id="348268549820508141">Beszédfelismerés</translation> <translation id="3482719661246593752">A(z) <ph name="ORIGIN" /> megtekintheti a következő fájlokat</translation> +<translation id="3484595034894304035">Háttérkép, képernyőkímélő, sötét téma és egyebek személyre szabása</translation> <translation id="3484869148456018791">Új tanúsítvány kérése</translation> <translation id="3486950712960783074">Az Ön utazása</translation> <translation id="3487007233252413104">névtelen funkció</translation> @@ -3318,6 +3325,7 @@ <translation id="3561201631376780358">Az összes könyvjelző megtekintéséhez nyissa meg az oldalsó panelt</translation> <translation id="3562423906127931518">Ez a folyamat néhány percet is igénybe vehet. A Linux-tároló beállítása folyamatban van.</translation> <translation id="3562655211539199254">A telefonján nemrég megnyitott Chrome-lapok megtekintése</translation> +<translation id="3563392617245068355">Hangulat</translation> <translation id="3563432852173030730">A kioszkalkalmazást nem sikerült letölteni.</translation> <translation id="3563558822383875692">DLC konfigurálása…</translation> <translation id="3564334271939054422">Előfordulhat, hogy az Ön által használt Wi-Fi-hálózat (<ph name="NETWORK_ID" />) előírja a bejelentkezési oldal felkeresését.</translation> @@ -4200,6 +4208,7 @@ <translation id="4250229828105606438">Képernyőkép</translation> <translation id="4250680216510889253">Nem</translation> <translation id="4251377547188244181">Kioszk vagy tájékoztatóeszköz regisztrációja</translation> +<translation id="4252141040239557279"><ph name="INDEX" />. kép, összesen: <ph name="A" /> kép</translation> <translation id="4252899949534773101">Bluetooth kikapcsolva</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – Megosztott laptartalom</translation> <translation id="4253168017788158739">Jegyzet</translation> @@ -4579,6 +4588,7 @@ <translation id="4548858987594081919">Adja meg felhasználónevét ehhez a webhelyhez, hogy a Google Jelszókezelő menteni tudja a bejelentkezési adatait.</translation> <translation id="4549791035683739768">A biztonsági kulcs nem tárol ujjlenyomatokat</translation> <translation id="4550926046134589611">Egyes támogatott linkek továbbra is a(z) <ph name="APP_NAME" /> alkalmazásban nyílnak meg.</translation> +<translation id="4551379727767354516">Legutóbbi AI-témák</translation> <translation id="4551763574344810652">Nyomja meg a <ph name="MODIFIER_KEY_DESCRIPTION" /> billentyűparancsot a visszavonáshoz</translation> <translation id="4553526521109675518">Az eszköz nyelvének módosításához újra kell indítani a Chromebookot. <ph name="BEGIN_LINK_LEARN_MORE" />További információ<ph name="END_LINK_LEARN_MORE" />.</translation> <translation id="4554591392113183336">A külső bővítmény a meglévő bővítmény verziószintjén vagy az alatt van.</translation> @@ -5901,6 +5911,7 @@ Győződjön meg arról, hogy nem ad ki bizalmas adatokat.</translation> <translation id="5620612546311710611">használati statisztikák</translation> <translation id="5621272825308610394">Nincs megjelenített név</translation> +<translation id="5621350029086078628">Ez egy kísérleti AI-funkció.</translation> <translation id="562250930904332809">Az Élő feliratozás &kikapcsolása</translation> <translation id="5623282979409330487">Ez a webhely hozzáfér a mozgásérzékelőkhöz.</translation> <translation id="5623842676595125836">Napló</translation> @@ -6018,6 +6029,7 @@ <translation id="572328651809341494">Nemrég megnyitott lapok</translation> <translation id="5723508132121499792">Nincs háttérben futó alkalmazás</translation> <translation id="5723967018671998714">A harmadik felektől származó cookie-k le vannak tiltva Inkognitó módban</translation> +<translation id="5725112283692663422">Visszajelzés küldése a Téma létrehozása AI-jal funkcióval kapcsolatban</translation> <translation id="5727728807527375859">A bővítmények, alkalmazások és témák esetleg károsíthatják számítógépét. Biztosan folytatja?</translation> <translation id="5728290366864286776">Ez a bővítmény olvashatja és módosíthatja a webhelyadatokat, és futhat a háttérben</translation> <translation id="5728450728039149624">A Smart Lock képernyőzár-beállításai</translation> @@ -6494,6 +6506,7 @@ <translation id="610487644502954950">Oldalsó panel rögzítése megszüntetve</translation> <translation id="6104929924898022309">A funkcióbillentyűk viselkedésének módosítása a keresőgombbal</translation> <translation id="6106167152849320869">Ha az előző lépésben elküldte a diagnosztikai és használati adatokat, akkor a rendszer gyűjti majd ezeket az adatokat a telepített alkalmazások esetében.</translation> +<translation id="6108952804512516814">Létrehozás AI használatával</translation> <translation id="6111718295497931251">A Google Drive-hozzáférés megvonása</translation> <translation id="6111972606040028426">A Google Segéd aktiválása</translation> <translation id="6112294629795967147">Érintse meg az átméretezéshez</translation> @@ -7285,6 +7298,7 @@ <translation id="6761623907967804682">Az eszközalapú webhelyadatok nem engedélyezettek</translation> <translation id="6762833852331690540">Be</translation> <translation id="6762861159308991328">A linkek megnyitásának módját az Alkalmazásbeállításokban módosíthatja</translation> +<translation id="6764633064754857889">Link előnézete</translation> <translation id="676560328519657314">Az Ön fizetési módjai a Google Pay szolgáltatásban</translation> <translation id="6766488013065406604">Ugrás a Google Jelszókezelőhöz</translation> <translation id="6767566652486411142">Másik nyelv választása…</translation> @@ -8255,6 +8269,7 @@ <translation id="752098910262610337">Parancsikonok megjelenítése</translation> <translation id="7521430434164837205">Microsoft 365-fájlok</translation> <translation id="7522255036471229694">Mondja ki a következő szavakat: „Ok Google” (Oké Google).</translation> +<translation id="7523112275619538890">Fájlok és egyebek megosztása közeli eszközökkel</translation> <translation id="7523117833414447032">Nagy kezdőbetűk felolvasásakor</translation> <translation id="7523585675576642403">Profil átnevezése</translation> <translation id="7525067979554623046">Létrehozás</translation> @@ -8423,6 +8438,7 @@ <translation id="7657090467145778067">Kis megtakarítás</translation> <translation id="7657218410916651670">Amikor be van jelentkezve, a <ph name="BEGIN_LINK_GOOGLE" />további tevékenységtípusokat<ph name="END_LINK_GOOGLE" /> a rendszer elmentheti a Google-fiókjába. Bármikor törölheti őket.</translation> <translation id="7658239707568436148">Mégse</translation> +<translation id="7658727964021657194">Legutóbbi AI-téma: <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">Mindenképp bezárja az inkognitó módot?</translation> <translation id="7659336857671800422">Az adatvédelmi útmutató megtekintése</translation> <translation id="7659584679870740384">Nem jogosult ennek az eszköznek a használatára. Bejelentkezési engedély kéréséhez vegye fel a kapcsolatot a rendszergazdával.</translation> @@ -8444,6 +8460,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{A(z) <ph name="DEVICE_TYPE" /> visszaküldésére {NUM_WEEKS} hét áll rendelkezésre}other{A(z) <ph name="DEVICE_TYPE" /> visszaküldésére {NUM_WEEKS} hét áll rendelkezésre}}</translation> <translation id="7668423670802040666">A Google Jelszókezelőben a következő fióknál: <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">A kisegítő lehetőségek megkönnyítik az eszköz használatát. A Gyorsbeállítások megnyitásához válassza a képernyő alján található órát.</translation> +<translation id="7669620291129890197">Látható az eszközei számára</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{Helytelen PIN-kód. Egy kísérlete maradt.}other{Helytelen PIN-kód. # kísérlete maradt.}}</translation> <translation id="7670434942695515800">A legjobb teljesítmény érdekében frissítsen a legújabb verzióra. Ajánlott a fájlokról biztonsági másolatot készítenie arra az esetre, ha nem lehet befejezni a frissítést. Amint elindul a frissítés, a Linux leáll. Folytatás előtt mentse el a megnyitott fájlokat. <ph name="LINK_START" />További információ<ph name="LINK_END" />.</translation> <translation id="7670483791111801022">Feliratok</translation> @@ -8643,6 +8660,7 @@ <translation id="7807711621188256451">A(z) <ph name="HOST" /> mindig hozzáférhet az Ön kamerájához</translation> <translation id="7810202088502699111">Az előugró ablakok le vannak tiltva ezen az oldalon.</translation> <translation id="7810367892333449285">A beírt adatnak a következő formátumban kell lennie: <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ cím<ph name="LPA_2" />$<ph name="LPA_3" />nem kötelező egyező azonosító<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Próbálkozzon újra, vagy válasszon egyet az alábbi korábban létrehozott témák közül.</translation> <translation id="7814458197256864873">&Másolás</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">A(z) <ph name="EXTENSION_NAME" /> billentyűparancsának (<ph name="SHORTCUT" />) szerkesztése</translation> @@ -8747,6 +8765,7 @@ <translation id="789722939441020330">A webhelyek nem kérhetnek engedélyt több fájl automatikus letöltésére</translation> <translation id="7897900149154324287">A jövőben mindenképpen adja ki az eltávolítható eszközt a Fájlok alkalmazásban, mielőtt kihúzná, máskülönben adatvesztés történhet.</translation> <translation id="7898725031477653577">Mindig legyen lefordítva</translation> +<translation id="7899324822972399722"><ph name="INDEX" />. kép, összesen: <ph name="A" /> kép, stílus: <ph name="B" /></translation> <translation id="7901405293566323524">Phone Hub</translation> <translation id="7903290522161827520">A böngésző-összetevőket keresi? Nyissa meg ezt az oldalt:</translation> <translation id="7903429136755645827">Kattintson a játékvezérlők személyre szabásához</translation> @@ -9008,6 +9027,7 @@ <translation id="8089547136368562137">A Google legjobb technológiái védik</translation> <translation id="8090234456044969073">Az Ön által leggyakrabban felkeresett webhelyek listájának olvasása</translation> <translation id="8090513782447872344">Bármikor visszatérhet, hogy újabb pillantást vethessen az útmutatóra</translation> +<translation id="8090686009202681725">Téma létrehozása AI-jal</translation> <translation id="8093359998839330381">A(z) <ph name="PLUGIN_NAME" /> nem válaszol</translation> <translation id="8094536695728193970">Sárgabarack</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Biztonsági másolat készítése a Google Drive-ra. Bármikor könnyedén helyreállíthatja adatait, illetve lecserélheti eszközét. A biztonsági másolat alkalmazásadatokat tartalmaz.<ph name="END_PARAGRAPH1" /> @@ -9024,6 +9044,7 @@ <translation id="8098616321286360457">Hálózati kapcsolat szükséges</translation> <translation id="8100230553590752325">Bármilyen eszközön használhatja mentett jelszavait</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> kiválasztva. A kiválasztás megszüntetéséhez nyomja le a Keresés + Space billentyűkombinációt.</translation> +<translation id="8100725874569949614"><ph name="INDEX" />. kép, összesen: <ph name="A" /> kép, hangulat: <ph name="C" />.</translation> <translation id="8101409298456377967">Létrehozhat, menthet és kezelhet jelszavakat, hogy egyszerűen be tudjon jelentkezni a webhelyekre és az alkalmazásokba. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="810185532889603849">Egyéni szín</translation> <translation id="8101987792947961127">Powerwash szükséges a következő újraindításkor</translation> @@ -9033,6 +9054,7 @@ <translation id="8107015733319732394">Folyamatban van a Google Play Áruház telepítése a(z) <ph name="DEVICE_TYPE" /> eszközre. Ez eltarthat néhány percig.</translation> <translation id="810728361871746125">Képernyőfelbontás</translation> <translation id="8109109153262930486">Alapértelmezett avatar</translation> +<translation id="8109991406044913868">AI által létrehozott téma</translation> <translation id="8110393529211831722">Az előfizetés csak erre az eszközre van telepítve, és nincs szinkronizálva a fiókhoz tartozó más eszközökkel. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation> <translation id="8110489095782891123">Névjegylista letöltése…</translation> <translation id="8115139559594092084">A Google Drive-fiókjából</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index fdac14b..e3ff77c2 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -9205,7 +9205,7 @@ <translation id="8250210000648910632">Ruang penyimpanan habis</translation> <translation id="8251441930213048644">Muat ulang sekarang</translation> <translation id="8251509999076836464">Menyambungkan ke <ph name="DEVICE_NAME" /></translation> -<translation id="8251578425305135684">Gambar kecil dihapus.</translation> +<translation id="8251578425305135684">Thumbnail dihapus.</translation> <translation id="825238165904109940">Selalu Tampilkan URL Lengkap</translation> <translation id="8252569384384439529">Mengupload...</translation> <translation id="8253198102038551905">Klik '+' untuk mendapatkan properti jaringan</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index b9bde13a..e0c491e9 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -278,6 +278,7 @@ <translation id="1203559206734265703">Kveikt er á villuleit fyrir verndaða notendahópa.</translation> <translation id="120368089816228251">Nóta</translation> <translation id="1203942045716040624">Samnýttur vefvirki: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Forskoða tengil</translation> <translation id="1206832039833782423">Öryggiskóðinn þinn er á bakhlið kortsins.</translation> <translation id="1210678701920254279">Skoðaðu eða bættu við prenturum og sjáðu virk prentverk</translation> <translation id="1211769675100312947">Þú hefur umsjón með flýtileiðum</translation> @@ -617,6 +618,7 @@ <translation id="1478340334823509079">Upplýsingar: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">Uppsetning er ekki leyfð</translation> <translation id="1480663089572535854">Þú getur farið til baka og breytt úthlutuninni fyrir „Velja“. Þú getur alltaf slökkt á sjálfvirkri skönnun í stillingum.</translation> +<translation id="1481001611315487791">Nánar um að búa til þemu með gervigreind.</translation> <translation id="1481537595330271162">Villa við að breyta diskstærð</translation> <translation id="1482626744466814421">Setja þennan flipa í bókamerki...</translation> <translation id="1482772681918035149">breyta aðgangsorðum</translation> @@ -811,6 +813,7 @@ <translation id="1615433306336820465">Stjórna innskráningargögnum sem eru vistuð á öryggislyklinum þínum</translation> <translation id="1616206807336925449">Þessi viðbót þarf engar sérstakar heimildir.</translation> <translation id="1616298854599875024">Ekki er hægt að flytja inn viðbótina „<ph name="IMPORT_NAME" />“ vegna þess að hún er ekki samnýtt eining</translation> +<translation id="161654560322394775">Mynd <ph name="INDEX" /> af <ph name="A" />, í stílnum <ph name="B" />, með stemningunni <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Athugar gögnin út frá öryggisreglum fyrirtækisins þíns...}=1{Athugar skrána út frá öryggisreglum fyrirtækisins þíns...}one{Athugar skrárnar út frá öryggisreglum fyrirtækisins þíns...}other{Athugar skrárnar út frá öryggisreglum fyrirtækisins þíns...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">Hjálparmiðstöð</translation> @@ -1518,6 +1521,7 @@ <translation id="2140902257485550046">Velja að loka fyrir allar viðbætur á þessari síðu</translation> <translation id="2142328300403846845">Opna tengil sem</translation> <translation id="2142582065325732898">Kveiktu á <ph name="LINK1_BEGIN" />Chrome samstillingu<ph name="LINK1_END" /> til að skoða nýlega flipa í Chrome. <ph name="LINK2_BEGIN" />Frekari upplýsingar<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Sýnilegt sumum tengiliðum</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome mun aftur loka fyrir fótspor í dag}=1{Chrome mun aftur loka fyrir fótspor á morgun}one{Aftur verður lokað á fótspor eftir # dag}other{Aftur verður lokað á fótspor eftir # daga}}</translation> <translation id="2143765403545170146">Sýna alltaf tækjastiku við birtingu á öllum skjánum</translation> <translation id="2143778271340628265">Handvirkar proxy-stillingar</translation> @@ -1705,6 +1709,7 @@ <translation id="2291452790265535215">Prófaðu að nota hliðarsvæðið fyrir bókamerki, ferli og fleira</translation> <translation id="229182044471402145">Engin samsvarandi leturgerð fannst.</translation> <translation id="2292848386125228270">Ræstu <ph name="PRODUCT_NAME" /> sem venjulegur notandi. Til að keyra sem rótarnotandi í þróunarskyni þarftu að endurkeyra með flagginu --no-sandbox.</translation> +<translation id="2292862094862078674">Athugaðu nettenginguna og reyndu aftur. Þú getur áfram valið úr eldri þemum hér fyrir neðan.</translation> <translation id="2294081976975808113">Skjávörn</translation> <translation id="2294358108254308676">Viltu setja upp <ph name="PRODUCT_NAME" />?</translation> <translation id="229477815107578534">Farðu yfir stillingarnar þínar</translation> @@ -3044,6 +3049,7 @@ <translation id="3325804108816646710">Leitar að tiltækum prófílum...</translation> <translation id="3325910708063135066">Slökkt er á myndavél og hljóðnema í kerfisstillingum Mac</translation> <translation id="3325930488268995856">Microsoft OneDrive tengt</translation> +<translation id="3325995804968971809">Stíll</translation> <translation id="3327050066667856415">Chromebook er hannað fyrir öryggi. Tækið þitt er sjálfkrafa varið fyrir spilliforritum og enginn viðbótarhugbúnaður er nauðsynlegur.</translation> <translation id="3328489342742826322">Við endurheimt úr öryggisafriti er öllum fyrirliggjandi Linux-forritum og gögnum í Linux-skráarmöppu eytt.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3228,6 +3234,7 @@ <translation id="3481268647794498892">Opnar í <ph name="ALTERNATIVE_BROWSER_NAME" /> eftir <ph name="COUNTDOWN_SECONDS" /> sekúndur</translation> <translation id="348268549820508141">Raddgreining</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> getur skoðað eftirfarandi skrár</translation> +<translation id="3484595034894304035">Sérsníða veggfóður, skjávara, dökkt þema og fleira</translation> <translation id="3484869148456018791">Fá nýtt vottorð</translation> <translation id="3486950712960783074">Ferðin þín</translation> <translation id="3487007233252413104">nafnlaust fall</translation> @@ -3320,6 +3327,7 @@ <translation id="3561201631376780358">Opnaðu hliðarglugga til að sjá öll bókamerki</translation> <translation id="3562423906127931518">Þetta gæti tekið nokkrar mínútur. Setur upp Linux-geymi.</translation> <translation id="3562655211539199254">Skoðaðu nýlega Chrome flipa úr símanum</translation> +<translation id="3563392617245068355">Stemning</translation> <translation id="3563432852173030730">Ekki tókst að sækja sjálfsalaforrit.</translation> <translation id="3563558822383875692">Stillir DLC.</translation> <translation id="3564334271939054422">Wi-Fi netið sem þú notar (<ph name="NETWORK_ID" />) kann að fara fram á að þú farir á innskráningarsíðu þess.</translation> @@ -4203,6 +4211,7 @@ <translation id="4250229828105606438">Skjámynd</translation> <translation id="4250680216510889253">Nei</translation> <translation id="4251377547188244181">Skráning tækis í sjálfsala- og merkingastillingu.</translation> +<translation id="4252141040239557279">Mynd <ph name="INDEX" /> af <ph name="A" /></translation> <translation id="4252899949534773101">Slökkt er á Bluetooth</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – flipaefni deilt</translation> <translation id="4253168017788158739">Athugasemd</translation> @@ -4582,6 +4591,7 @@ <translation id="4548858987594081919">Bættu við notandanafni þínu fyrir þetta vefsvæði til að hjálpa Google-aðgangsorðastjórnun að vista innskráningarupplýsingarnar þínar</translation> <translation id="4549791035683739768">Engin fingraför eru vistuð í öryggislyklinum þínum</translation> <translation id="4550926046134589611">Sumir studdir tenglar munu áfram opnast í <ph name="APP_NAME" />.</translation> +<translation id="4551379727767354516">Nýleg gervigreindarþemu frá þér</translation> <translation id="4551763574344810652">Ýttu á <ph name="MODIFIER_KEY_DESCRIPTION" /> til að afturkalla</translation> <translation id="4553526521109675518">Endurræsa þarf Chromebook til að breyta tungumáli tækisins. <ph name="BEGIN_LINK_LEARN_MORE" />Frekari upplýsingar<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">Útgáfa ytri viðbótar er hin sama og eða eldri en útgáfa fyrirliggjandi viðbótar.</translation> @@ -5903,6 +5913,7 @@ <translation id="5620568081365989559">DevTools óskar eftir fullum aðgangi að <ph name="FOLDER_PATH" />. Gættu þess að gefa ekki upp viðkvæmar upplýsingar.</translation> <translation id="5620612546311710611">talnagögn um notkun</translation> <translation id="5621272825308610394">Ekkert skjánafn</translation> +<translation id="5621350029086078628">Þetta er gervigreindareiginleiki á tilraunastigi.</translation> <translation id="562250930904332809">&Slökkva á skjátextum í rauntíma</translation> <translation id="5623282979409330487">Þetta vefsvæði er að nota hreyfiskynjarana þína.</translation> <translation id="5623842676595125836">Notkunarskrá</translation> @@ -6020,6 +6031,7 @@ <translation id="572328651809341494">Nýlegir flipar</translation> <translation id="5723508132121499792">Engin bakgrunnsforrit í gangi</translation> <translation id="5723967018671998714">Lokað er á fótspor frá þriðja aðila í huliðsstillingu</translation> +<translation id="5725112283692663422">Senda ábendingu um þemagerð með gervigreind</translation> <translation id="5727728807527375859">Viðbætur, forrit og þemu geta skaðað tölvuna þína. Ertu viss um að þú viljir halda áfram?</translation> <translation id="5728290366864286776">Þessi viðbót kann að lesa og breyta vefsvæðisupplýsingum eða keyra í bakgrunni</translation> <translation id="5728450728039149624">Valkostir Smart Lock skjáláss</translation> @@ -6496,6 +6508,7 @@ <translation id="610487644502954950">Hliðargluggi laus</translation> <translation id="6104929924898022309">Nota leitarlykilinn til að breyta virkni virknilykla</translation> <translation id="6106167152849320869">Ef þú velur einnig að senda greiningar- og notkunargögn í fyrra skrefi verður þessum gögnum safnað fyrir uppsett forrit.</translation> +<translation id="6108952804512516814">Búa til með gervigreind</translation> <translation id="6111718295497931251">Fjarlægja aðgang að Google Drive</translation> <translation id="6111972606040028426">Kveikja á Google hjálpara</translation> <translation id="6112294629795967147">Snerta til að breyta stærð</translation> @@ -7289,6 +7302,7 @@ <translation id="6761623907967804682">Vefsvæðagögn í tæki ekki leyfð</translation> <translation id="6762833852331690540">Kveikt</translation> <translation id="6762861159308991328">Í forritastillingum geturðu breytt því hvernig tenglar eru opnaðir</translation> +<translation id="6764633064754857889">Forskoða tengil</translation> <translation id="676560328519657314">Þínir greiðslumátar á Google Pay</translation> <translation id="6766488013065406604">Opna Google-aðgangsorðastjórnun</translation> <translation id="6767566652486411142">Velja annað tungumál...</translation> @@ -8259,6 +8273,7 @@ <translation id="752098910262610337">Sýna flýtilykla</translation> <translation id="7521430434164837205">Microsoft 365-skrár</translation> <translation id="7522255036471229694">Segðu „Ok Google“</translation> +<translation id="7523112275619538890">Deildu skrám og fleiru með nálægum tækjum</translation> <translation id="7523117833414447032">Þegar hástafir eru lesnir</translation> <translation id="7523585675576642403">Endurnefna prófíl</translation> <translation id="7525067979554623046">Búa til</translation> @@ -8427,6 +8442,7 @@ <translation id="7657090467145778067">Lítill sparnaður</translation> <translation id="7657218410916651670"><ph name="BEGIN_LINK_GOOGLE" />Aðrar aðgerðir<ph name="END_LINK_GOOGLE" /> kunna að vera vistaðar á Google reikningnum þínum ef þú ert innskráð(ur). Þú getur eytt þessu hvenær sem er.</translation> <translation id="7658239707568436148">Hætta við</translation> +<translation id="7658727964021657194">Nýlegt gervigreindarþema <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">Viltu samt loka huliðsstillingu?</translation> <translation id="7659336857671800422">Skoðaðu leiðbeiningar um persónuvernd</translation> <translation id="7659584679870740384">Þú hefur ekki leyfi til að nota þetta tæki. Hafðu samband við kerfisstjóra til að fá leyfi til að skrá þig inn.</translation> @@ -8448,6 +8464,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Skilaðu <ph name="DEVICE_TYPE" /> tækinu innan {NUM_WEEKS} viku}one{Skilaðu <ph name="DEVICE_TYPE" /> tækinu innan {NUM_WEEKS} viku}other{Skilaðu <ph name="DEVICE_TYPE" /> tækinu innan {NUM_WEEKS} vikna}}</translation> <translation id="7668423670802040666">Í Aðgangsorðastjórnun Google fyrir <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">Aðgengiseiginleikar auðvelda notkun tækisins. Veldu tímasetninguna neðst á skjánum til að opna flýtistillingarnar.</translation> +<translation id="7669620291129890197">Sýnilegt tækjunum þínum</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{Rangt PIN-númer. Þú átt eina tilraun eftir.}one{Rangt PIN-númer. Þú átt # tilraun eftir.}other{Rangt PIN-númer. Þú átt # tilraunir eftir.}}</translation> <translation id="7670434942695515800">Uppfærðu í nýjustu útgáfuna til að ná sem mestum afköstum. Mælt er með því að taka afrit af skrám ef ske kynni að ekki takist að ljúka við uppfærsluna. Slökkt verður á Linux um leið og uppfærslan hefst. Vistaðu opnar skrár áður en haldið er áfram. <ph name="LINK_START" />Nánar<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Skjátexti</translation> @@ -8647,6 +8664,7 @@ <translation id="7807711621188256451">Veita <ph name="HOST" /> alltaf aðgang að myndavélinni</translation> <translation id="7810202088502699111">Sprettigluggar voru útilokaðir á þessari síðu.</translation> <translation id="7810367892333449285">Færslan ætti að vera á sniðinu<ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ heimilisfang<ph name="LPA_2" />$<ph name="LPA_3" />valkvætt samsvarandi auðkenni<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Reyndu aftur eða veldu úr eldri þemum hér fyrir neðan.</translation> <translation id="7814458197256864873">Afrita</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">Breyta flýtileiðinni <ph name="SHORTCUT" /> fyrir <ph name="EXTENSION_NAME" /></translation> @@ -8751,6 +8769,7 @@ <translation id="789722939441020330">Ekki leyfa vefsvæðum að hlaða mörgum skrám niður sjálfkrafa</translation> <translation id="7897900149154324287">Framvegis skaltu gæta þess að aftengja lausa tækið í forritinu Skrár áður en þú tekur það úr sambandi. Að öðrum kosti gætirðu tapað gögnum.</translation> <translation id="7898725031477653577">Þýða alltaf</translation> +<translation id="7899324822972399722">Mynd <ph name="INDEX" /> af <ph name="A" />, í stílnum <ph name="B" /></translation> <translation id="7901405293566323524">Phone Hub</translation> <translation id="7903290522161827520">Ertu að leita að vafraíhlutum? Opna</translation> <translation id="7903429136755645827">Smelltu til að sérsníða leikjastýringar</translation> @@ -9011,6 +9030,7 @@ <translation id="8089547136368562137">Öll besta tækni Google verndar það</translation> <translation id="8090234456044969073">Lesa lista yfir vefsvæðin sem þú heimsækir oftast</translation> <translation id="8090513782447872344">Þú getur komið aftur hvenær sem er til að skoða þetta betur</translation> +<translation id="8090686009202681725">Búa til þema með gervigreind</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> svarar ekki</translation> <translation id="8094536695728193970">Apríkósa</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Vistaðu öryggisafrit á Google Drive. Endurheimtu gögnin þín eða skiptu um tæki hvenær sem er. Öryggisafritunin felur í sér forritagögn.<ph name="END_PARAGRAPH1" /> @@ -9027,6 +9047,7 @@ <translation id="8098616321286360457">Nettenging áskilin</translation> <translation id="8100230553590752325">Notaðu vistuð aðgangsorð í hvaða tæki sem er</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> valið. Ýttu á leit og bilslána til að hætta við val.</translation> +<translation id="8100725874569949614">Mynd <ph name="INDEX" /> af <ph name="A" />, með stemningunni <ph name="C" />.</translation> <translation id="8101409298456377967">Búðu til, vistaðu og stjórnaðu aðgangsorðunum þínum til að skrá þig inn á vefsvæði og forrit á einfaldan hátt. <ph name="BEGIN_LINK" />Nánar<ph name="END_LINK" /></translation> <translation id="810185532889603849">Sérsniðinn litur</translation> <translation id="8101987792947961127">Djúphreinsunar er krafist við næstu endurræsingu</translation> @@ -9036,6 +9057,7 @@ <translation id="8107015733319732394">Setur Google Play Store upp á <ph name="DEVICE_TYPE" />. Þetta gæti tekið nokkrar mínútur.</translation> <translation id="810728361871746125">Skjáupplausn</translation> <translation id="8109109153262930486">Sjálfgefin notandamynd</translation> +<translation id="8109991406044913868">Þema búið til með gervigreind</translation> <translation id="8110393529211831722">Áskriftin er eingöngu uppsett í þessu tæki og er ekki samstillt við önnur tæki þar sem þú skráir þig inn á reikninginn þinn. <ph name="LINK_BEGIN" />Nánar<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Sækir tengiliðalista...</translation> <translation id="8115139559594092084">Af Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index e6d847d..0425d8e 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -277,6 +277,7 @@ <translation id="1203559206734265703">ការជួសជុលសម្រាប់ទស្សនិកជនដែលមានការការពារត្រូវបានបើក។</translation> <translation id="120368089816228251">ណោតភ្លេង</translation> <translation id="1203942045716040624">Shared Worker: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">មើលតំណសាកល្បង</translation> <translation id="1206832039833782423">លេខកូដសុវត្ថិភាពរបស់អ្នកស្ថិតនៅផ្នែកខាងក្រោយនៃកាតរបស់អ្នក</translation> <translation id="1210678701920254279">មើល ឬបញ្ចូលម៉ាស៊ីនបោះពុម្ព និងមើលឃើញការងារបោះពុម្ពដែលសកម្ម</translation> <translation id="1211769675100312947">ផ្លូវកាត់ត្រូវបានជ្រើសរើសដោយអ្នក</translation> @@ -616,6 +617,7 @@ <translation id="1478340334823509079">ព័ត៌មានលំអិត៖ <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">មិនបានបើកការដំឡើងទេ</translation> <translation id="1480663089572535854">អ្នកអាចត្រឡប់ក្រោយ ដើម្បីប្ដូរការកំណត់សម្រាប់ “ជ្រើសរើស”។ អ្នកអាចបិទការស្កេនដោយស្វ័យប្រវត្តិនៅក្នុងការកំណត់បានជានិច្ច។</translation> +<translation id="1481001611315487791">ស្វែងយល់បន្ថែមអំពីការបង្កើតទម្រង់រចនាដោយប្រើ AI។</translation> <translation id="1481537595330271162">មានបញ្ហាក្នុងការប្ដូរទំហំថាស</translation> <translation id="1482626744466814421">ចំណាំផ្ទាំងនេះ...</translation> <translation id="1482772681918035149">កែពាក្យសម្ងាត់</translation> @@ -810,6 +812,7 @@ <translation id="1615433306336820465">គ្រប់គ្រងទិន្នន័យសម្រាប់ចូលគណនី ដែលបានរក្សាទុកនៅក្នុងសោសុវត្ថិភាពរបស់អ្នក</translation> <translation id="1616206807336925449">កម្មវិធីបន្ថែមនេះមិនតម្រូវឲ្យមានការអនុញ្ញាតពិសេសអ្វីទេ។</translation> <translation id="1616298854599875024">មិនអាចនាំចូលកម្មវិធីបន្ថែម "<ph name="IMPORT_NAME" />" បានទេ ដោយសារវាមិនមែនជាម៉ូឌុលដែលបានចែករំលែក</translation> +<translation id="161654560322394775">រូបភាពទី <ph name="INDEX" /> នៃ <ph name="A" /> ក្នុងរចនាប័ទ្ម <ph name="B" /> ជាមួយនឹងអារម្មណ៍ <ph name="C" />។</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{កំពុងពិនិត្យទិន្នន័យនេះដោយប្រើគោលការណ៍សុវត្ថិភាពរបស់ស្ថាប័នអ្នក...}=1{កំពុងពិនិត្យឯកសារនេះដោយប្រើគោលការណ៍សុវត្ថិភាពរបស់ស្ថាប័នអ្នក...}other{កំពុងពិនិត្យឯកសារទាំងនេះដោយប្រើគោលការណ៍សុវត្ថិភាពរបស់ស្ថាប័នអ្នក...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">មជ្ឈមណ្ឌលជំនួយ</translation> @@ -1517,6 +1520,7 @@ <translation id="2140902257485550046">ជ្រើសរើសទប់ស្កាត់កម្មវិធីបន្ថែមទាំងអស់នៅលើគេហទំព័រនេះ</translation> <translation id="2142328300403846845">បើកដំណជា</translation> <translation id="2142582065325732898">បើក <ph name="LINK1_BEGIN" />Chrome សមកាលកម្ម<ph name="LINK1_END" /> ដើម្បីមើលផ្ទាំង Chrome ថ្មីៗ។ <ph name="LINK2_BEGIN" />ស្វែងយល់បន្ថែម<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">ទំនាក់ទំនងមួយចំនួនអាចមើលឃើញ</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome នឹងទប់ស្កាត់ខូគីម្ដងទៀតនៅថ្ងៃនេះ}=1{Chrome នឹងទប់ស្កាត់ខូគីម្ដងទៀតនៅថ្ងៃស្អែក}other{នៅសល់ # ថ្ងៃទៀតទើបខូគីត្រូវបានទប់ស្កាត់ម្ដងទៀត}}</translation> <translation id="2143765403545170146">បង្ហាញរបារឧបករណ៍ពេញអេក្រង់ជានិច្ច</translation> <translation id="2143778271340628265">ការតំឡើងប្រូកស៊ីដោយខ្លូនឯង</translation> @@ -1704,6 +1708,7 @@ <translation id="2291452790265535215">សាកល្បងប្រើផ្ទាំងចំហៀងសម្រាប់ចំណាំ ការធ្វើដំណើរ និងអ្វីៗជាច្រើនទៀត</translation> <translation id="229182044471402145">រកមិនឃើញពុម្ពអក្សរដែលត្រូវគ្នាទេ</translation> <translation id="2292848386125228270">សូមចាប់ផ្តើម <ph name="PRODUCT_NAME" /> ជាអ្នកប្រើប្រាស់ធម្មតា។ ប្រសិនបើអ្នកចង់ដំណើរការជាលក្ខណៈរូតសម្រាប់ការអភិវឌ្ឍន៍ សូមដំណើរការទង់គ្មានប្រអប់សុវត្ថិភាពឡើងវិញ។</translation> +<translation id="2292862094862078674">សូមពិនិត្យមើលអ៊ីនធឺណិតរបស់អ្នក រួចព្យាយាមម្ដងទៀត។ អ្នកនៅតែអាចជ្រើសរើសពីទម្រង់រចនាដែលបានបង្កើតពីមុនណាមួយខាងក្រោម។</translation> <translation id="2294081976975808113">ឯកជនភាពអេក្រង់</translation> <translation id="2294358108254308676">តើអ្នកចង់តំឡើង <ph name="PRODUCT_NAME" />ទេ?</translation> <translation id="229477815107578534">ពិនិត្យមើលការកំណត់របស់អ្នក</translation> @@ -2641,6 +2646,7 @@ <translation id="2990313168615879645">បញ្ចូលគណនី Google</translation> <translation id="2990375978470734995">ដើម្បីឱ្យការផ្លាស់ប្ដូរនេះមានប្រសិទ្ធភាព សូមភ្ជាប់ឧបករណ៍បន្ទាប់បន្សំខាងក្រៅរបស់អ្នក។</translation> <translation id="2990583317361835189">មិនអនុញ្ញាតឱ្យគេហទំព័រប្រើឧបករណ៍ចាប់ចលនាទេ</translation> +<translation id="2991182900092497283">សូមបញ្ចូលមូលហេតុសម្រាប់ការដាក់ទិន្នន័យនេះចូល៖</translation> <translation id="2992931425024192067">បង្ហាញខ្លឹមសារនៃការជូនដំណឹងទាំងអស់</translation> <translation id="2993517869960930405">ព័ត៌មានកម្មវិធី</translation> <translation id="2996108796702395498">លេខស៊េរីឧបករណ៍របស់អ្នកគឺ <ph name="SERIAL_NUMBER" />។ លេខនេះអាចត្រូវបានប្រើប្រាស់ដើម្បីជួយបើកដំណើរការសេវាកម្ម។</translation> @@ -3043,6 +3049,7 @@ <translation id="3325804108816646710">កំពុងរកមើលកម្រងព័ត៌មានដែលមាន...</translation> <translation id="3325910708063135066">កាម៉េរា និងមីក្រូហ្វូនត្រូវបានបិទនៅក្នុងចំណូលចិត្តប្រព័ន្ធ Mac</translation> <translation id="3325930488268995856">បានភ្ជាប់ Microsoft OneDrive</translation> +<translation id="3325995804968971809">រចនាប័ទ្ម</translation> <translation id="3327050066667856415">Chromebook ត្រូវបានរចនាឡើងដើម្បីឱ្យមានសុវត្ថិភាព។ ឧបករណ៍របស់អ្នកទទួលបានការការពារពីកម្មវិធីគ្រោះថ្នាក់ដោយស្វ័យប្រវត្តិ ដោយមិនតម្រូវឱ្យមានកម្មវិធីបន្ថែមទេ។</translation> <translation id="3328489342742826322">ការស្ដារពីការបម្រុងទុកនឹងលុបកម្មវិធី និងទិន្នន័យ Linux ដែលមានស្រាប់នៅក្នុងថតឯកសារ Linux របស់អ្នក។</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3154,6 +3161,7 @@ <translation id="3432762828853624962">Shared Workers</translation> <translation id="3433507769937235446">ចាក់សោនៅពេលទុកចោល</translation> <translation id="3433621910545056227">អូ! ប្រព័ន្ធបានបរាជ័យក្នុងការបង្កើតសោគុណលក្ខណៈរយៈពេលតំឡើងឧបករណ៍។</translation> +<translation id="3434025015623587566">កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ត្រូវការសិទ្ធិចូលប្រើប្រាស់បន្ថែមទៀត</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="3434272557872943250">ប្រសិនបើការកំណត់សកម្មភាពកម្មវិធី និងគេហទំព័របន្ថែមត្រូវបានបើកសម្រាប់កូនរបស់អ្នក នោះទិន្នន័យនេះអាចត្រូវបានរក្សាទុកទៅក្នុងគណនី Google របស់គាត់។ ស្វែងយល់បន្ថែមអំពីការកំណត់ទាំងនេះ និងរបៀបកែតម្រូវវាតាមរយៈ families.google.com។</translation> <translation id="3434475275396485144">ការកំណត់នេះត្រូវបានគ្រប់គ្រងដោយអ្នកគ្រប់គ្រងទូរសព្ទរបស់អ្នក</translation> @@ -3227,6 +3235,7 @@ <translation id="3481268647794498892">នឹងបើកនៅក្នុង <ph name="ALTERNATIVE_BROWSER_NAME" /> ក្នុងរយៈពេល <ph name="COUNTDOWN_SECONDS" /> វិនាទីទៀត</translation> <translation id="348268549820508141">ការសម្គាល់ការនិយាយ</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> អាចមើលឯកសារខាងក្រោម</translation> +<translation id="3484595034894304035">កំណត់ផ្ទាំងរូបភាព ធាតុរក្សាអេក្រង់ ទម្រង់រចនាងងឹត និងអ្វីៗជាច្រើនទៀតឱ្យមានលក្ខណៈផ្ទាល់ខ្លួន</translation> <translation id="3484869148456018791">ទទួលយកវិញ្ញាបនប័ត្រថ្មី</translation> <translation id="3486950712960783074">ការធ្វើដំណើររបស់អ្នក</translation> <translation id="3487007233252413104">មុខងារអនាមិក</translation> @@ -3319,6 +3328,7 @@ <translation id="3561201631376780358">បើកផ្ទាំងចំហៀង ដើម្បីឃើញចំណាំទាំងអស់</translation> <translation id="3562423906127931518">ដំណើរការនេះអាចចំណាយពេលពីរបីនាទី។ កំពុងរៀបចំទម្រង់ផ្ទុក Linux ។</translation> <translation id="3562655211539199254">មើលផ្ទាំង Chrome ថ្មីៗពីទូរសព្ទរបស់អ្នក</translation> +<translation id="3563392617245068355">អារម្មណ៍</translation> <translation id="3563432852173030730">កម្មវិធីបញ្ជរមិនអាចត្រូវបានទាញយកទេ។</translation> <translation id="3563558822383875692">កំពុងកំណត់រចនាសម្ព័ន្ធ DLC។</translation> <translation id="3564334271939054422">បណ្តាញ Wi-Fi ដែលអ្នកកំពុងប្រើ (<ph name="NETWORK_ID" />) អាចតម្រូវឲ្យអ្នកទៅកាន់ទំព័រចូលរបស់វា។</translation> @@ -3366,6 +3376,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{គណនី {COUNT} កំពុងប្រើប្រាស់ពាក្យសម្ងាត់ដូចគ្នា}other{គណនី {COUNT} កំពុងប្រើប្រាស់ពាក្យសម្ងាត់ដូចគ្នា}}</translation> <translation id="3605780360466892872">Buttondown</translation> <translation id="3607671391978830431">សម្រាប់កុមារ</translation> +<translation id="3608460311600621471">សូមបញ្ចូលមូលហេតុសម្រាប់ការបោះពុម្ពទិន្នន័យនេះ៖</translation> <translation id="3608730769702025110">ជំហានទី 3 នៃ 4៖ ពិនិត្យមើលព័ត៌មានបញ្ជាក់អត្តសញ្ញាណបុគ្គល</translation> <translation id="3609277884604412258">ការស្វែងរករហ័ស</translation> <translation id="3610241585790874201">មិនបានអនុញ្ញាតឱ្យរក្សាទុកទិន្នន័យនៅលើឧបករណ៍របស់អ្នកទេ</translation> @@ -4202,6 +4213,7 @@ <translation id="4250229828105606438">ថតអេក្រង់</translation> <translation id="4250680216510889253">ទេ</translation> <translation id="4251377547188244181">ការចុះឈ្មោះឧបករណ៍ Kiosk និង signage</translation> +<translation id="4252141040239557279">រូបភាពទី <ph name="INDEX" /> នៃ <ph name="A" /></translation> <translation id="4252899949534773101">បានបិទប៊្លូធូស</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - បានចែករំលែកមាតិការបស់ផ្ទាំង</translation> <translation id="4253168017788158739">កំណត់ត្រា</translation> @@ -4581,6 +4593,7 @@ <translation id="4548858987594081919">ដើម្បីជួយកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់រក្សាទុកព័ត៌មានចូលគណនីរបស់អ្នក សូមបញ្ចូលឈ្មោះអ្នកប្រើប្រាស់របស់អ្នកសម្រាប់គេហទំព័រនេះ</translation> <translation id="4549791035683739768">គ្មានស្នាមម្រាមដៃត្រូវបានរក្សាទុកនៅលើសោសុវត្ថិភាពរបស់អ្នកទេ</translation> <translation id="4550926046134589611">តំណដែលអាចប្រើបានមួយចំនួននឹងនៅតែបើកនៅក្នុង <ph name="APP_NAME" /> ដដែល។</translation> +<translation id="4551379727767354516">ទម្រង់រចនា AI ថ្មីៗរបស់អ្នក</translation> <translation id="4551763574344810652">ចុច <ph name="MODIFIER_KEY_DESCRIPTION" /> ដើម្បីត្រឡប់វិញ</translation> <translation id="4553526521109675518">អ្នកត្រូវចាប់ផ្ដើម Chromebook របស់អ្នកឡើងវិញ ដើម្បីផ្លាស់ប្ដូរភាសារបស់ឧបករណ៍។ <ph name="BEGIN_LINK_LEARN_MORE" />ស្វែងយល់បន្ថែម<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">កម្មវិធីបន្ថែមខាងក្រៅស្ថិតនៅក្នុងកំណែដូចគ្នា ឬទាបជាងបើប្រៀបនឺងកំណែដែលមានស្រាប់។</translation> @@ -5903,6 +5916,7 @@ ត្រូវប្រាកដអ្នកមិនបង្ហាញព័ត៌មានរសើបទេ។</translation> <translation id="5620612546311710611">ស្ថិតិការប្រើប្រាស់</translation> <translation id="5621272825308610394">មិនមានឈ្មោះបង្ហាញ</translation> +<translation id="5621350029086078628">នេះគឺជាមុខងារ AI ដែលស្ថិតក្នុងការពិសោធ។</translation> <translation id="562250930904332809">&បិទអក្សររត់ក្នុងពេលជាក់ស្ដែង</translation> <translation id="5623282979409330487">គេហទំព័រនេះកំពុងចូលប្រើឧបករណ៍ចាប់ចលនារបស់អ្នក។</translation> <translation id="5623842676595125836">កំណត់ត្រា</translation> @@ -6020,6 +6034,7 @@ <translation id="572328651809341494">ផ្ទាំងថ្មីៗ</translation> <translation id="5723508132121499792">គ្មានកម្មវិធីផ្ទៃខាងក្រោយកំពុងដំណើរការទេ</translation> <translation id="5723967018671998714">បានទប់ស្កាត់ខូគីភាគទីបីនៅក្នុងមុខងារឯកជន</translation> +<translation id="5725112283692663422">ផ្ញើមតិកែលម្អសម្រាប់ "បង្កើតទម្រង់រចនាដោយប្រើ AI"</translation> <translation id="5727728807527375859">កម្មវិធីបន្ថែម កម្មវិធី និងធីមអាចប៉ះពាល់ដល់កុំព្យូទ័ររបស់អ្នក។ តើអ្នកប្រាកដថាអ្នកចង់បន្តទេ?</translation> <translation id="5728290366864286776">កម្មវិធីបន្ថែមនេះអាចអាន និងប្ដូរព័ត៌មានគេហទំព័រ ឬដំណើរការនៅផ្ទៃខាងក្រោយ</translation> <translation id="5728450728039149624">ជម្រើសចាក់សោអេក្រង់របស់ Smart Lock</translation> @@ -6496,6 +6511,7 @@ <translation id="610487644502954950">ផ្ទាំងចំហៀងត្រូវបានដកខ្ទាស់</translation> <translation id="6104929924898022309">ប្រើប៊ូតុងស្វែងរក ដើម្បីប្ដូរសកម្មភាពគ្រាប់ចុច Function</translation> <translation id="6106167152849320869">ប្រសិនបើអ្នកក៏បានជ្រើសរើសផ្ញើទិន្នន័យប្រើប្រាស់ និងទិន្នន័យវិភាគនៅក្នុងជំហានមុនដែរ ទិន្នន័យនេះនឹងត្រូវបានប្រមូលសម្រាប់កម្មវិធីដែលបានដំឡើង។</translation> +<translation id="6108952804512516814">បង្កើតដោយប្រើ AI</translation> <translation id="6111718295497931251">ដកសិទ្ធិចូលប្រើ Google ថាស</translation> <translation id="6111972606040028426">បើក Google ជំនួយការ</translation> <translation id="6112294629795967147">ប៉ះដើម្បីប្ដូរទំហំ</translation> @@ -6666,6 +6682,7 @@ <translation id="6238982280403036866">អនុញ្ញាតឱ្យប្រើ JavaScript</translation> <translation id="6239558157302047471">ដំណើរការហ្វ្រេមឡើងវិញ</translation> <translation id="6240821072888636753">សួរគ្រប់ពេល</translation> +<translation id="6240964651812394252">ដើម្បីប្រើប្រាស់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ជាមួយនឹងប្រព័ន្ធប្រតិបត្តិការរបស់អ្នក សូមចាប់ផ្ដើម Chrome ឡើងវិញ និងអនុញ្ញាតឱ្យចូលប្រើប្រាស់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់របស់កុំព្យូទ័រអ្នក។ ផ្ទាំងរបស់អ្នកនឹងបើកឡើងវិញ បន្ទាប់ពីចាប់ផ្តើមឡើងវិញ។</translation> <translation id="6241530762627360640">ចូលប្រើព័ត៌មានអំពីឧបករណ៍ប៊្លូធូសដែលបានភ្ជាប់ជាមួយប្រព័ន្ធរបស់អ្នក និងស្វែងរកឧបករណ៍ប៊្លូធូសដែលនៅក្បែរ។</translation> <translation id="6241844896329831164">មិនតម្រូវឱ្យមានការចូលប្រើទេ</translation> <translation id="6242574558232861452">កំពុងពិនិត្យមើលគោលការណ៍សុវត្ថិភាពរបស់ស្ថាប័នអ្នក។</translation> @@ -7287,6 +7304,7 @@ <translation id="6761623907967804682">មិនអនុញ្ញាតទិន្នន័យគេហទំព័រនៅលើឧបករណ៍ទេ</translation> <translation id="6762833852331690540">បើក</translation> <translation id="6762861159308991328">អ្នកអាចប្ដូររបៀបដែលតំណបើកនៅក្នុងការកំណត់កម្មវិធី</translation> +<translation id="6764633064754857889">មើលតំណសាកល្បង</translation> <translation id="676560328519657314">វិធីបង់ប្រាក់របស់អ្នកនៅក្នុង Google Pay</translation> <translation id="6766488013065406604">ចូលទៅកាន់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់</translation> <translation id="6767566652486411142">ជ្រើសរើសភាសាផ្សេងទៀត...</translation> @@ -8257,6 +8275,7 @@ <translation id="752098910262610337">បង្ហាញផ្លូវកាត់</translation> <translation id="7521430434164837205">ឯកសារ Microsoft 365</translation> <translation id="7522255036471229694">និយាយថា "Ok Google"</translation> +<translation id="7523112275619538890">ចែករំលែកឯកសារ និងអ្វីៗជាច្រើនទៀតជាមួយនឹងឧបករណ៍នៅជិត</translation> <translation id="7523117833414447032">នៅពេលអានអក្សរធំ</translation> <translation id="7523585675576642403">ប្ដូរឈ្មោះកម្រងព័ត៌មាន</translation> <translation id="7525067979554623046">បង្កើត</translation> @@ -8425,6 +8444,7 @@ <translation id="7657090467145778067">ការសន្សំសំចៃតិចតួច</translation> <translation id="7657218410916651670"><ph name="BEGIN_LINK_GOOGLE" />ទម្រង់ផ្សេងទៀតនៃសកម្មភាព<ph name="END_LINK_GOOGLE" />អាចត្រូវបានរក្សាទុកនៅក្នុងគណនី Google របស់អ្នក នៅពេលអ្នកចូលគណនី។ អ្នកអាចលុបវាបានគ្រប់ពេល។</translation> <translation id="7658239707568436148">បដិសេធ</translation> +<translation id="7658727964021657194">ទម្រង់រចនា AI ថ្មីៗទី <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">នៅតែចង់ចាកចេញពីមុខងារឯកជនឬ?</translation> <translation id="7659336857671800422">ពិនិត្យមើលការណែនាំអំពីឯកជនភាព</translation> <translation id="7659584679870740384">អ្នកមិនត្រូវបានអនុញ្ញាតឲ្យប្រើឧបករណ៍នេះទេ។ សូមទាក់ទងអ្នកគ្រប់គ្រងសម្រាប់ការអនុញ្ញាតចូល។</translation> @@ -8446,6 +8466,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{បញ្ជូន <ph name="DEVICE_TYPE" /> ត្រឡប់ទៅវិញក្នុងរយៈពេល {NUM_WEEKS} សប្តាហ៍}other{បញ្ជូន <ph name="DEVICE_TYPE" /> ត្រឡប់ទៅវិញក្នុងរយៈពេល {NUM_WEEKS} សប្តាហ៍}}</translation> <translation id="7668423670802040666">នៅក្នុងកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ Google សម្រាប់ <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">មុខងារភាពងាយស្រួលធ្វើឱ្យឧបករណ៍របស់អ្នកកាន់តែងាយស្រួលប្រើ។ ដើម្បីចូលប្រើប្រាស់ការកំណត់រហ័ស សូមជ្រើសរើសពេលវេលានៅផ្នែកខាងក្រោមនៃអេក្រង់របស់អ្នក។</translation> +<translation id="7669620291129890197">ឧបករណ៍របស់អ្នកអាចមើលឃើញ</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{កូដ PIN មិនត្រឹមត្រូវទេ។ អ្នកអាចបញ្ចូលបានតែម្ដងទៀតប៉ុណ្ណោះ។}other{កូដ PIN មិនត្រឹមត្រូវទេ។ អ្នកអាចបញ្ចូលបានតែ # ដងទៀតប៉ុណ្ណោះ។}}</translation> <translation id="7670434942695515800">ដើម្បីទទួលបានប្រតិបត្តិការល្អបំផុត សូមដំឡើងទៅកំណែចុងក្រោយបំផុត។ យើងសូមណែនាំឱ្យបម្រុងទុកឯកសាររបស់អ្នក ក្នុងករណីដែលការដំឡើងកំណែមិនអាចបញ្ចប់បាន។ នៅពេលចាប់ផ្ដើមការដំឡើងកំណែ Linux នឹងបិទ។ សូមរក្សាទុកឯកសារដែលបានបើកសិន មុននឹងបន្ត។ <ph name="LINK_START" />ស្វែងយល់បន្ថែម<ph name="LINK_END" /></translation> <translation id="7670483791111801022">អក្សររត់</translation> @@ -8645,6 +8666,7 @@ <translation id="7807711621188256451">អនុញ្ញាត <ph name="HOST" /> ឲ្យចូលប្រើកាមេរ៉ារបស់អ្នកជានិច្ច</translation> <translation id="7810202088502699111">ការលេចឡើងត្រូវបានរារាំងនៅលើទំព័រនេះ។</translation> <translation id="7810367892333449285">ការបញ្ចូលរបស់អ្នកគួរតែមានទម្រង់ <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ អាសយដ្ឋាន<ph name="LPA_2" />$<ph name="LPA_3" />លេខកូដសម្គាល់ដែលត្រូវគ្នាដែលមិនតម្រូវ<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">ព្យាយាមម្ដងទៀត ឬជ្រើសរើសពីទម្រង់រចនាដែលបានបង្កើតពីមុនណាមួយខាងក្រោម។</translation> <translation id="7814458197256864873">ចម្លង</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">កែផ្លូវកាត់ <ph name="SHORTCUT" /> សម្រាប់ <ph name="EXTENSION_NAME" /></translation> @@ -8749,6 +8771,7 @@ <translation id="789722939441020330">មិនអនុញ្ញាតឱ្យគេហទំព័រទាញយកឯកសារច្រើនដោយស្វ័យប្រវត្តិទេ</translation> <translation id="7897900149154324287">នាពេលអនាគត ត្រូវប្រាកដថាដកឧបករណ៍ដែលអាចដកចេញបាននៅក្នុងកម្មវិធីឯកសារ មុនពេលដកវាចេញ។ បើមិនដូច្នេះទេ អ្នកអាចបាត់បង់ទិន្នន័យ។</translation> <translation id="7898725031477653577">បកប្រែជានិច្ច</translation> +<translation id="7899324822972399722">រូបភាពទី <ph name="INDEX" /> នៃ <ph name="A" /> ក្នុងរចនាប័ទ្ម <ph name="B" /></translation> <translation id="7901405293566323524">Phone Hub</translation> <translation id="7903290522161827520">កំពុងរកមើលសមាសភាគកម្មវិធីរុករកតាមអ៊ីនធឺណិតឬ? ចូលមើល</translation> <translation id="7903429136755645827">ចុច ដើម្បីប្ដូរការបញ្ជាហ្គេមរបស់អ្នកតាមបំណង</translation> @@ -9009,6 +9032,7 @@ <translation id="8089547136368562137">វាត្រូវបានការពារដោយបច្ចេកវិទ្យាល្អបំផុតរបស់ Google</translation> <translation id="8090234456044969073">អានបញ្ជីគេហទំព័រដែលអ្នកទៅកាន់ញឹកញាប់បំផុត</translation> <translation id="8090513782447872344">អ្នកអាចត្រឡប់មកវិញបានគ្រប់ពេល ដើម្បីពិនិត្យមើលម្ដងទៀត</translation> +<translation id="8090686009202681725">បង្កើតទម្រង់រចនាដោយប្រើ AI</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> មិនឆ្លើយតបទេ</translation> <translation id="8094536695728193970">ទឹកក្រូចបែកលឿងស្លេក</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />បម្រុងទុកទៅ Google ថាស។ ងាយស្រួលក្នុងការស្ដារទិន្នន័យរបស់អ្នក ឬប្ដូរឧបករណ៍បានគ្រប់ពេល។ ការបម្រុងទុករបស់អ្នករួមបញ្ចូលទាំងទិន្នន័យកម្មវិធី។<ph name="END_PARAGRAPH1" /> @@ -9025,6 +9049,7 @@ <translation id="8098616321286360457">តម្រូវឱ្យមានការតភ្ជាប់បណ្ដាញ</translation> <translation id="8100230553590752325">ប្រើពាក្យសម្ងាត់ដែលបានរក្សាទុកនៅលើឧបករណ៍ណាក៏បាន</translation> <translation id="810068641062493918">បានជ្រើសរើស <ph name="LANGUAGE" />។ សូមចុច "ស្វែងរក" រួមជាមួយ "ដកឃ្លា" ដើម្បីដកការជ្រើសរើស។</translation> +<translation id="8100725874569949614">រូបភាពទី <ph name="INDEX" /> នៃ <ph name="A" /> ដែលមានអារម្មណ៍ <ph name="C" />។</translation> <translation id="8101409298456377967">បង្កើត រក្សាទុក និងគ្រប់គ្រងពាក្យសម្ងាត់របស់អ្នក ដើម្បីឱ្យអ្នកអាចចូលគេហទំព័រ និងកម្មវិធីបានយ៉ាងងាយស្រួល។ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LINK" /></translation> <translation id="810185532889603849">ពណ៌ផ្ទាល់ខ្លួន</translation> <translation id="8101987792947961127">តម្រូវឲ្យមាន Powerwash នៅលើពេលបិទបើកដំណើរការឡើងវិញនៅពេលបន្ទាប់</translation> @@ -9034,6 +9059,7 @@ <translation id="8107015733319732394">កំពុងដំឡើង Google Play Store នៅលើ <ph name="DEVICE_TYPE" /> របស់អ្នក។ វាអាចចំណាយពេលពីរបីនាទី។</translation> <translation id="810728361871746125">កម្រិតច្បាស់របស់ផ្ទាំងអេក្រង់</translation> <translation id="8109109153262930486">រូបតំណាងលំនាំដើម</translation> +<translation id="8109991406044913868">ទម្រង់រចនាដែលបានបង្កើតដោយ AI</translation> <translation id="8110393529211831722">ការជាវត្រូវបានដំឡើងនៅលើឧបករណ៍នេះតែប៉ុណ្ណោះ និងមិនធ្វើសមកាលកម្មជាមួយឧបករណ៍ផ្សេងទៀតក្នុងគណនីរបស់អ្នកទេ។ <ph name="LINK_BEGIN" />ស្វែងយល់បន្ថែម<ph name="LINK_END" /></translation> <translation id="8110489095782891123">កំពុងទាញយកបញ្ជីទំនាក់ទំនង...</translation> <translation id="8115139559594092084">ពី Google ថាសរបស់អ្នក</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index f2969e1b..96d2395 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -277,6 +277,7 @@ <translation id="1203559206734265703">Perlindungan Penyahpepijatan Khalayak didayakan.</translation> <translation id="120368089816228251">Nota muzik</translation> <translation id="1203942045716040624">Pekerja Dikongsi: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Pratonton Pautan</translation> <translation id="1206832039833782423">Kod keselamatan tertera di bahagian belakang kad anda</translation> <translation id="1210678701920254279">Paparkan atau tambahkan pencetak dan lihat tugas cetak yang aktif</translation> <translation id="1211769675100312947">Pintasan dipilih susun oleh anda</translation> @@ -616,6 +617,7 @@ <translation id="1478340334823509079">Butiran: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">Pemasangan tidak didayakan</translation> <translation id="1480663089572535854">Anda boleh kembali untuk menukar penetapan untuk “Pilih”. Anda boleh mematikan autoimbas dalam Tetapan pada bila-bila masa.</translation> +<translation id="1481001611315487791">Ketahui lebih lanjut tentang membuat tema dengan AI.</translation> <translation id="1481537595330271162">Ralat semasa mengubah saiz cakera</translation> <translation id="1482626744466814421">Tanda Tab Ini...</translation> <translation id="1482772681918035149">edit kata laluan</translation> @@ -810,6 +812,7 @@ <translation id="1615433306336820465">Urus data log masuk yang disimpan pada kunci keselamatan anda</translation> <translation id="1616206807336925449">Sambungan ini tidak memerlukan kebenaran khas.</translation> <translation id="1616298854599875024">Tidak dapat mengimport sambungan "<ph name="IMPORT_NAME" />" kerana bukan modul kongsi</translation> +<translation id="161654560322394775">Imej <ph name="INDEX" /> daripada <ph name="A" />, dalam gaya <ph name="B" /> dengan perasaan <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Menyemak data ini berdasarkan dasar keselamatan organisasi anda...}=1{Menyemak fail ini berdasarkan dasar keselamatan organisasi anda...}other{Menyemak fail ini berdasarkan dasar keselamatan organisasi anda...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">P&usat Bantuan</translation> @@ -1517,6 +1520,7 @@ <translation id="2140902257485550046">Pilih untuk menyekat semua sambungan pada laman ini</translation> <translation id="2142328300403846845">Buka Pautan sebagai</translation> <translation id="2142582065325732898">Hidupkan <ph name="LINK1_BEGIN" />Penyegerakan Chrome<ph name="LINK1_END" /> untuk melihat tab Chrome baru-baru ini. <ph name="LINK2_BEGIN" />Ketahui Lebih Lanjut<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Dapat dilihat oleh sesetengah kenalan</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome akan menyekat kuki lagi hari ini}=1{Chrome akan menyekat kuki lagi esok}other{# hari sehingga kuki disekat lagi}}</translation> <translation id="2143765403545170146">Sentiasa Tunjukkan Bar Alat dalam Skrin Penuh</translation> <translation id="2143778271340628265">Konfigurasi proksi manual</translation> @@ -1704,6 +1708,7 @@ <translation id="2291452790265535215">Cuba gunakan panel sisi untuk penanda halaman, perjalanan dan pelbagai lagi</translation> <translation id="229182044471402145">Tiada fon yang sepadan ditemukan.</translation> <translation id="2292848386125228270">Sila mulakan <ph name="PRODUCT_NAME" /> sebagai pengguna biasa. Jika anda perlu menjalankan apl sebagai akar untuk pembangunan, jalankan semula dengan --bendera tanpa kotak pasir.</translation> +<translation id="2292862094862078674">Semak sambungan Internet anda dan cuba lagi. Anda masih boleh memilih salah satu daripada tema yang dijana sebelum ini di bawah.</translation> <translation id="2294081976975808113">Privasi skrin</translation> <translation id="2294358108254308676">Adakah anda mahu memasang <ph name="PRODUCT_NAME" />?</translation> <translation id="229477815107578534">Semak tetapan anda</translation> @@ -3044,6 +3049,7 @@ <translation id="3325804108816646710">Mencari profil yang tersedia...</translation> <translation id="3325910708063135066">Kamera dan mikrofon dimatikan dalam Pilihan Sistem Mac</translation> <translation id="3325930488268995856">Microsoft OneDrive disambungkan</translation> +<translation id="3325995804968971809">Gaya</translation> <translation id="3327050066667856415">Chromebook direka untuk keselamatan. Peranti anda dilindungi daripada perisian hasad secara automatik – tiada perisian tambahan diperlukan.</translation> <translation id="3328489342742826322">Tindakan memulihkan daripada sandaran akan memadamkan aplikasi dan data Linux yang sedia ada dalam folder fail Linux anda.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3229,6 +3235,7 @@ <translation id="3481268647794498892">Membuka dalam <ph name="ALTERNATIVE_BROWSER_NAME" /> dalam masa <ph name="COUNTDOWN_SECONDS" /> saat</translation> <translation id="348268549820508141">Pengecaman pertuturan</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> boleh melihat fail yang berikut</translation> +<translation id="3484595034894304035">Hiasan latar diperibadikan, penyelamat skrin, tema gelap dan pelbagai lagi</translation> <translation id="3484869148456018791">Dapatkan sijil baharu</translation> <translation id="3486950712960783074">Perjalanan anda</translation> <translation id="3487007233252413104">fungsi awanama</translation> @@ -3321,6 +3328,7 @@ <translation id="3561201631376780358">Buka Panel Sisi untuk melihat Semua Penanda Halaman</translation> <translation id="3562423906127931518">Proses ini mungkin mengambil masa beberapa minit. Menyediakan bekas Linux.</translation> <translation id="3562655211539199254">Lihat tab Chrome baru-baru ini daripada telefon anda</translation> +<translation id="3563392617245068355">Perasaan</translation> <translation id="3563432852173030730">Aplikasi kios tidak dapat dimuat turun.</translation> <translation id="3563558822383875692">Mengkonfigurasikan DLC.</translation> <translation id="3564334271939054422">Rangkaian Wi-Fi yang anda gunakan (<ph name="NETWORK_ID" />) mungkin menghendaki anda melawati halaman log masuknya.</translation> @@ -4205,6 +4213,7 @@ <translation id="4250229828105606438">Tangkapan skrin</translation> <translation id="4250680216510889253">Tidak</translation> <translation id="4251377547188244181">Pendaftaran peranti kios dan papan tanda</translation> +<translation id="4252141040239557279">Imej <ph name="INDEX" /> daripada <ph name="A" /></translation> <translation id="4252899949534773101">Bluetooth dilumpuhkan</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Kandungan tab dikongsi</translation> <translation id="4253168017788158739">Nota</translation> @@ -4584,6 +4593,7 @@ <translation id="4548858987594081919">Untuk membantu Google Password Manager menyimpan maklumat log masuk anda, tambahkan nama pengguna anda untuk laman ini</translation> <translation id="4549791035683739768">Kunci keselamatan anda tidak menyimpan cap jari.</translation> <translation id="4550926046134589611">Sesetengah pautan yang disokong masih akan dibuka dalam <ph name="APP_NAME" />.</translation> +<translation id="4551379727767354516">Tema AI terbaharu anda</translation> <translation id="4551763574344810652">Tekan <ph name="MODIFIER_KEY_DESCRIPTION" /> untuk buat asal</translation> <translation id="4553526521109675518">Anda perlu memulakan semula Chromebook anda untuk menukar bahasa peranti. <ph name="BEGIN_LINK_LEARN_MORE" />Ketahui lebih lanjut<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">Sambungan luar ialah versi yang sama atau lebih rendah berbanding yang sedia ada.</translation> @@ -5905,6 +5915,7 @@ <translation id="5620568081365989559">DevTools meminta akses penuh ke <ph name="FOLDER_PATH" />. Pastikan anda tidak mendedahkan sebarang maklumat sensitif.</translation> <translation id="5620612546311710611">statistik penggunaan</translation> <translation id="5621272825308610394">Tiada nama paparan</translation> +<translation id="5621350029086078628">Ciri ini merupakan ciri AI percubaan.</translation> <translation id="562250930904332809">&Lumpuhkan Sari Kata Langsung</translation> <translation id="5623282979409330487">Tapak ini sedang mengakses penderia gerakan anda.</translation> <translation id="5623842676595125836">Log</translation> @@ -6022,6 +6033,7 @@ <translation id="572328651809341494">Tab terbaharu</translation> <translation id="5723508132121499792">Tiada apl latar belakang dijalankan</translation> <translation id="5723967018671998714">Kuki pihak ketiga disekat dalam mod Inkognito</translation> +<translation id="5725112283692663422">Hantar maklum balas untuk Buat tema dengan AI</translation> <translation id="5727728807527375859">Sambungan, apl dan tema boleh membahayakan komputer anda. Adakah anda pasti anda mahu meneruskan?</translation> <translation id="5728290366864286776">Sambungan ini mungkin membaca dan menukar maklumat laman atau dijalankan pada latar</translation> <translation id="5728450728039149624">Pilihan kunci skrin Smart Lock</translation> @@ -6498,6 +6510,7 @@ <translation id="610487644502954950">Panel sisi dinyahsematkan</translation> <translation id="6104929924898022309">Gunakan kekunci carian untuk mengubah gelagat kekunci fungsi</translation> <translation id="6106167152849320869">Jika anda memilih untuk menghantar data diagnostik dan penggunaan pada langkah terdahulu, data ini akan dikumpulkan untuk apl yang dipasang.</translation> +<translation id="6108952804512516814">Buat dengan AI</translation> <translation id="6111718295497931251">Alih keluar akses Google Drive</translation> <translation id="6111972606040028426">Dayakan Google Assistant</translation> <translation id="6112294629795967147">Sentuh untuk mengubah saiz</translation> @@ -7290,6 +7303,7 @@ <translation id="6761623907967804682">Data laman pada peranti tidak dibenarkan</translation> <translation id="6762833852331690540">Hidupkan</translation> <translation id="6762861159308991328">Anda boleh menukar cara pautan dibuka dalam tetapan Apl</translation> +<translation id="6764633064754857889">Pratonton pautan</translation> <translation id="676560328519657314">Kaedah pembayaran anda pada Google Pay</translation> <translation id="6766488013065406604">Akses Google Password Manager</translation> <translation id="6767566652486411142">Pilih Bahasa Lain...</translation> @@ -8261,6 +8275,7 @@ <translation id="752098910262610337">Paparkan pintasan</translation> <translation id="7521430434164837205">Fail Microsoft 365</translation> <translation id="7522255036471229694">Sebut "Ok Google".</translation> +<translation id="7523112275619538890">Kongsi fail dan lebih lagi dengan peranti berdekatan</translation> <translation id="7523117833414447032">Apabila membaca huruf besar</translation> <translation id="7523585675576642403">Namakan Semula Profil</translation> <translation id="7525067979554623046">Cipta</translation> @@ -8429,6 +8444,7 @@ <translation id="7657090467145778067">Penjimatan kecil</translation> <translation id="7657218410916651670"><ph name="BEGIN_LINK_GOOGLE" />Bentuk aktiviti lain<ph name="END_LINK_GOOGLE" /> mungkin disimpan dalam Akaun Google anda semasa anda dilog masuk. Anda boleh memadamkan data tersebut pada bila-bila masa.</translation> <translation id="7658239707568436148">Batal</translation> +<translation id="7658727964021657194">Tema AI terbaharu <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">Keluar daripada mod Inkognito juga?</translation> <translation id="7659336857671800422">Semak Panduan Privasi</translation> <translation id="7659584679870740384">Anda tiada kebenaran untuk menggunakan peranti ini. Sila hubungi pentadbir untuk mendapatkan kebenaran log masuk.</translation> @@ -8450,6 +8466,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Pulangkan <ph name="DEVICE_TYPE" /> dalam masa {NUM_WEEKS} minggu}other{Pulangkan <ph name="DEVICE_TYPE" /> dalam masa {NUM_WEEKS} minggu}}</translation> <translation id="7668423670802040666">Dalam Pengurus Kata Laluan Google untuk <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">Ciri kebolehaksesan menjadikan peranti anda lebih mudah digunakan. Untuk mengakses Tetapan Pantas, pilih masa di bahagian bawah skrin anda.</translation> +<translation id="7669620291129890197">Dapat dilihat pada peranti anda</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{PIN salah. Anda mempunyai satu percubaan lagi.}other{PIN salah. Anda mempunyai # percubaan lagi.}}</translation> <translation id="7670434942695515800">Untuk mendapatkan prestasi terbaik, tingkatkan kepada versi terbaharu. Anda disyorkan untuk menyandarkan fail sekiranya peningkatan tidak dapat diselesaikan. Setelah peningkatan bermula, Linux akan dimatikan. Simpan fail terbuka sebelum meneruskan. <ph name="LINK_START" />Ketahui lebih lanjut<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Sari Kata</translation> @@ -8649,6 +8666,7 @@ <translation id="7807711621188256451">Sentiasa benarkan <ph name="HOST" /> mengakses kamera anda</translation> <translation id="7810202088502699111">Pop muncul disekat pada halaman ini.</translation> <translation id="7810367892333449285">Masukan anda sepatutnya mengandungi format <ph name="LPA_0" />$<ph name="LPA_1" />alamat SM-DP+<ph name="LPA_2" />$<ph name="LPA_3" />ID padanan pilihan<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Cuba lagi atau pilih salah satu daripada tema yang dijana sebelum ini di bawah.</translation> <translation id="7814458197256864873">&Salin</translation> <translation id="7814857791038398352">Microsoft® OneDrive</translation> <translation id="7815583197273433531">Edit pintasan <ph name="SHORTCUT" /> untuk <ph name="EXTENSION_NAME" /></translation> @@ -8753,6 +8771,7 @@ <translation id="789722939441020330">Jangan benarkan laman memuat turun berbilang fail secara automatik</translation> <translation id="7897900149154324287">Pada masa hadapan, pastikan anda melentingkan peranti boleh dialih keluar anda dalam apl Fail sebelum mencabutnya. Jika tidak, anda mungkin kehilangan data.</translation> <translation id="7898725031477653577">Sentiasa terjemahkan</translation> +<translation id="7899324822972399722">Imej <ph name="INDEX" /> daripada <ph name="A" />, dalam gaya <ph name="B" /></translation> <translation id="7901405293566323524">Hab Telefon</translation> <translation id="7903290522161827520">Mencari komponen penyemak imbas? Lawati</translation> <translation id="7903429136755645827">Klik untuk menyesuaikan kawalan permainan anda</translation> @@ -9014,6 +9033,7 @@ <translation id="8089547136368562137">Kata laluan dilindungi dengan teknologi terbaik Google</translation> <translation id="8090234456044969073">Baca senarai laman web yang paling kerap anda lawati</translation> <translation id="8090513782447872344">Anda boleh kembali untuk menyemak panduan ini lagi pada bila-bila masa</translation> +<translation id="8090686009202681725">Buat tema dengan AI</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> tidak bertindak balas</translation> <translation id="8094536695728193970">Aprikot</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Sandarkan ke Google Drive. Pulihkan data anda atau tukar peranti anda dengan mudah pada bila-bila masa. Sandaran anda merangkumi data apl.<ph name="END_PARAGRAPH1" /> @@ -9030,6 +9050,7 @@ <translation id="8098616321286360457">Sambungan rangkaian diperlukan</translation> <translation id="8100230553590752325">Gunakan kata laluan yang disimpan pada mana-mana peranti</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> dipilih. Tekan Cari dan Ruang untuk menyahpilih.</translation> +<translation id="8100725874569949614">Imej <ph name="INDEX" /> daripada <ph name="A" />, perasaan <ph name="C" />.</translation> <translation id="8101409298456377967">Buat, simpan dan urus kata laluan anda supaya anda dapat log masuk ke laman dan apl dengan mudah. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation> <translation id="810185532889603849">Warna tersuai</translation> <translation id="8101987792947961127">Powerwash diperlukan pada but semula seterusnya</translation> @@ -9039,6 +9060,7 @@ <translation id="8107015733319732394">Memasang Gedung Google Play pada <ph name="DEVICE_TYPE" /> anda. Proses ini mungkin mengambil masa beberapa minit.</translation> <translation id="810728361871746125">Peleraian paparan</translation> <translation id="8109109153262930486">Avatar lalai</translation> +<translation id="8109991406044913868">Tema yang dibuat oleh AI</translation> <translation id="8110393529211831722">Langganan dipasang pada peranti ini sahaja dan tidak disegerakkan dengan peranti lain di bawah akaun anda. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Memuat turun senarai kenalan...</translation> <translation id="8115139559594092084">Daripada Google Drive anda</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index 4493014..f820928d 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -277,6 +277,7 @@ <translation id="1203559206734265703">‘ကာကွယ်ထားသော ပရိသတ် အမှားရှာပြင်ခြင်း’ ကို ဖွင့်ထားသည်။</translation> <translation id="120368089816228251">သီချင်းသင်္ကေတ</translation> <translation id="1203942045716040624">မျှဝေထားသော ဆောင်ရွက်စနစ်- <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">လင့်ခ်ကို အစမ်းကြည့်ရန်</translation> <translation id="1206832039833782423">သင့်ကတ်နောက်ခြမ်းတွင် လုံခြုံရေးကုဒ်ရှိသည်</translation> <translation id="1210678701920254279">ပရင်တာများ ကြည့်/ထည့်နိုင်ပြီး ပရင့်ထုတ်နေဆဲ ဖိုင်များကို ကြည့်နိုင်သည်</translation> <translation id="1211769675100312947">ဖြတ်လမ်းလင့်ခ်များကို သင် ရွေးချယ်ထားသည်</translation> @@ -615,6 +616,7 @@ <translation id="1478340334823509079">အသေးစိတ်များ: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">ထည့်သွင်းမှု ဖွင့်မထားပါ</translation> <translation id="1480663089572535854">“ရွေးရန်” အတွက် သတ်မှတ်မှုကိုပြောင်းရန် ပြန်သွားနိုင်သည်။ အလိုအလျောက် ရှာဖွေခြင်းကို ဆက်တင်များတွင် အချိန်မရွေးပိတ်နိုင်သည်။</translation> +<translation id="1481001611315487791">AI ဖြင့် အပြင်အဆင်ပြုလုပ်ခြင်းအကြောင်း ပိုမိုလေ့လာရန်။</translation> <translation id="1481537595330271162">ဒစ်ခ်ကို အရွယ်အစားပြင်ပြင်ခြင်းအမှား</translation> <translation id="1482626744466814421">ဤတဘ်၏လိပ်စာကို မှတ်ခြင်း...</translation> <translation id="1482772681918035149">စကားဝှက်များ ပြင်ရန်</translation> @@ -809,6 +811,7 @@ <translation id="1615433306336820465">သင်၏လုံခြုံရေးကီးတွင် သိမ်းထားသော လက်မှတ်ထိုးဝင်ခြင်းဆိုင်ရာ ဒေတာကို စီမံနိုင်သည်</translation> <translation id="1616206807336925449">ဤတိုးချဲ့လိုင်းသည် အထူးခွင့်ပြုချက် မလိုအပ်ပါ။</translation> <translation id="1616298854599875024">မျှဝေထားသည့် မော်ဂျူးမဟုတ်သောကြောင့် နောက်ဆက်တွဲ "<ph name="IMPORT_NAME" />" ကို မတင်သွင်းနိုင်ပါ</translation> +<translation id="161654560322394775">ပုံ <ph name="A" /> အနက် <ph name="INDEX" />၊ <ph name="B" /> ပုံစံ၊ <ph name="C" /> ခံစားချက်ဟန်ဖြင့်။</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{ဤဒေတာကို သင့်အဖွဲ့အစည်း၏ လုံခြုံရေးမူဝါဒများဖြင့် စစ်ဆေးနေသည်...}=1{ဤဖိုင်ကို သင့်အဖွဲ့အစည်း၏ လုံခြုံရေးမူဝါဒများဖြင့် စစ်ဆေးနေသည်...}other{ဤဖိုင်များကို သင့်အဖွဲ့အစည်း၏ လုံခြုံရေးမူဝါဒများဖြင့် စစ်ဆေးနေသည်...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">အကူ&အညီ ဌာန</translation> @@ -1515,6 +1518,7 @@ <translation id="2140902257485550046">ဤဝဘ်ဆိုက်တွင် နောက်ဆက်တွဲအားလုံး ပိတ်ထားရန်အတွက် ရွေးပါ</translation> <translation id="2142328300403846845">လင့်ကို ...အဖြစ် ဖွင့်ပါ</translation> <translation id="2142582065325732898">လတ်တလော Chrome တဘ်များကြည့်ရန် <ph name="LINK1_BEGIN" />Chrome စင့်ခ်<ph name="LINK1_END" /> ကို ဖွင့်ပါ။ <ph name="LINK2_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">အဆက်အသွယ်အချို့က မြင်နိုင်သည်</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome သည် ကွတ်ကီးများကို ယနေ့ ထပ်ပိတ်ထားပါမည်}=1{Chrome သည် ကွတ်ကီးများကို မနက်ဖြန် ထပ်ပိတ်ထားပါမည်}other{ကွတ်ကီးများကို ထပ်ပိတ်ရန် # ရက်အလို}}</translation> <translation id="2143765403545170146">မျက်နှာပြင်အပြည့်ဖွင့်ချိန်တွင် ကိရိယာဘားကို အမြဲပြပါ</translation> <translation id="2143778271340628265">လက်ဖြင့် ပရောက်စီ စီစဉ်ပေးခြင်း</translation> @@ -1702,6 +1706,7 @@ <translation id="2291452790265535215">လိပ်စာ၊ ခရီးစဉ် စသည်တို့အတွက် ဘေးအကန့် သုံးကြည့်ပါ</translation> <translation id="229182044471402145">ကိုက်ညီသောဖောင့် မတွေ့ပါ။</translation> <translation id="2292848386125228270"><ph name="PRODUCT_NAME" /> ကို သာမန်အသုံးပြုသူတစ်ယောက်အနေဖြင့် စတင်ပါ။ ပြင်ဆင်တည်းဖြတ်ရန်အတွက် စီမံခန့်ခွဲသူအနေဖြင့် ဖွင့်လိုလျှင် --no-sandbox အလံဖြင့် ပြန်ဖွင့်ပါ။</translation> +<translation id="2292862094862078674">အင်တာနက်ကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။ ယခင်ထုတ်ထားသော အောက်ပါအပြင်အဆင်များထဲမှ တစ်ခုကို ရွေးနိုင်ပါသေးသည်။</translation> <translation id="2294081976975808113">ဖန်သားပြင် အချက်အလက်လုံခြုံမှု</translation> <translation id="2294358108254308676"><ph name="PRODUCT_NAME" />ကို သင် တပ်ဆင် သင်သည် လိုပါသလား?</translation> <translation id="229477815107578534">သင်၏ ဆက်တင်များကို ပြန်ကြည့်ခြင်း</translation> @@ -2640,6 +2645,7 @@ <translation id="2990313168615879645">Google Account ထည့်ရန်</translation> <translation id="2990375978470734995">ဤပြောင်းလဲမှု သက်ရောက်ရန် ပြင်ပဆက်စပ်ပစ္စည်းများကို ပြန်ချိတ်ဆက်ပါ။</translation> <translation id="2990583317361835189">လှုပ်ရှားမှုအာရုံခံစနစ်များ သုံးရန် ဝဘ်ဆိုက်များကို ခွင့်မပြုပါနှင့်</translation> +<translation id="2991182900092497283">ဤဒေတာကို ကူးထည့်ခြင်းအတွက် အကြောင်းပြချက် ထည့်ပါ-</translation> <translation id="2992931425024192067">အကြောင်းကြားချက်ပါ အကြောင်းအရာအားလုံးကို ပြရန်</translation> <translation id="2993517869960930405">အက်ပ်အင်ဖို...</translation> <translation id="2996108796702395498">သင့်စက်အမှတ်စဉ်မှာ <ph name="SERIAL_NUMBER" /> ဖြစ်သည်။ ဝန်ဆောင်မှုစတင်ရာ၌ ကူညီရန် ဤနံပါတ်ကို သုံးနိုင်သည်။</translation> @@ -3042,6 +3048,7 @@ <translation id="3325804108816646710">ရနိုင်သောပရိုဖိုင်များ ရှာနေသည်...</translation> <translation id="3325910708063135066">'Mac စနစ် သတ်မှတ်ချက်များ' တွင် ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို ပိတ်ထားသည်</translation> <translation id="3325930488268995856">Microsoft OneDrive ချိတ်ဆက်ထားသည်</translation> +<translation id="3325995804968971809">ပုံစံ</translation> <translation id="3327050066667856415">Chromebook များကို လုံခြုံရေးအတွက် ရည်ရွယ်ထုတ်လုပ်ထားခြင်းဖြစ်သည်။ သင့်စက်ကို မဲလ်ဝဲမှ အလိုအလျောက်ကာကွယ်ပြီးဖြစ်သည်၊ နောက်ထပ်ဆော့ဖ်ဝဲမလိုပါ။</translation> <translation id="3328489342742826322">အရန်သိမ်းဆည်းမှုမှနေ၍ ပြန်ယူခြင်းဖြင့် လက်ရှိ Linux အက်ပ်များနှင့် သင်၏ Linux ဖိုင်တွဲရှိ ဒေတာများကို ဖျက်လိုက်ပါမည်။</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3153,6 +3160,7 @@ <translation id="3432762828853624962">မျှဝေထားသော လုပ်သားများ</translation> <translation id="3433507769937235446">ထွက်သွားချိန် လော့ခ်ချခြင်း</translation> <translation id="3433621910545056227">အို၊ သော့ချရန် လိုအပ်သည့် စက်ပစ္စည်းတပ်ဆင်ချိန်အား စနစ်မှ မစတင်နိုင်ပါ။</translation> +<translation id="3434025015623587566">Google Password Manager သည် သုံးခွင့်ထပ်လိုသည်</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="3434272557872943250">သင့်ကလေးအတွက် ထပ်တိုး 'ဝဘ်နှင့် အက်ပ်လုပ်ဆောင်ချက်' ကို ဖွင့်ထားသည့်အခါ ဤဒေတာကို သူ၏ Google အကောင့်သို့ သိမ်းသွားပါမည်။ ဤဆက်တင်များနှင့် ၎င်းတို့အား ချိန်ညှိနည်းကို families.google.com တွင် ပိုမိုလေ့လာပါ။</translation> <translation id="3434475275396485144">ဤဆက်တင်ကို သင့်ဖုန်း၏စီမံခန့်ခွဲသူက ကြီးကြပ်ပါသည်</translation> @@ -3226,6 +3234,7 @@ <translation id="3481268647794498892"><ph name="ALTERNATIVE_BROWSER_NAME" /> ကို <ph name="COUNTDOWN_SECONDS" /> စက္ကန့်အကြာတွင် ဖွင့်ပါမည်</translation> <translation id="348268549820508141">စကားသံ မှတ်မိခြင်း</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> သည် အောက်ပါဖိုင်များကို ကြည့်နိုင်သည်</translation> +<translation id="3484595034894304035">နောက်ခံ၊ စခရင်နားချိန်ပုံ၊ အမှောင်နောက်ခံ စသည်တို့ကို ပုဂ္ဂိုလ်ရေးသီးသန့်ပြင်ဆင်နိုင်သည်</translation> <translation id="3484869148456018791">အသိမှတ်ပြု လက်မှတ်အသစ် ရယူရန်</translation> <translation id="3486950712960783074">သင်၏ခရီးစဉ်</translation> <translation id="3487007233252413104">အမည်မသိရ လုပ်ကိုင်မှု</translation> @@ -3318,6 +3327,7 @@ <translation id="3561201631376780358">လိပ်စာအားလုံး ကြည့်ရန်အတွက် ဘေးအကန့် ဖွင့်ရန်</translation> <translation id="3562423906127931518">ဤလုပ်ဆောင်ချက်သည် မိနစ်အနည်းငယ်ကြာနိုင်သည်။ Linux ကွန်တိန်နာကို စနစ်ထည့်သွင်းနေသည်။</translation> <translation id="3562655211539199254">သင့်ဖုန်းမှ လတ်တလော Chrome တဘ်များကို ကြည့်နိုင်သည်</translation> +<translation id="3563392617245068355">ခံစားချက်ဟန်</translation> <translation id="3563432852173030730">Kiosk အပလီကေးရှင်းကို ဒေါင်းလုဒ် မလုပ်နိုင်ခဲ့ပါ။</translation> <translation id="3563558822383875692">DLC စီစဉ်သတ်မှတ်နေသည်။</translation> <translation id="3564334271939054422">သင်အသုံးပြုနေသည့် ဝိုင်ဖိုင်ကွန်ရက် ( <ph name="NETWORK_ID" /> ) သည် ၎င်း၏ လက်မှတ်ထိုးဝင်ရန် စာမျက်နှာသို့ ဝင်ကြည့်ရန် လိုအပ်နိုင်သည်။</translation> @@ -3365,6 +3375,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{အကောင့် {COUNT} ခုက တူညီသောစကားဝှက်ကို သုံးနေသည်}other{အကောင့် {COUNT} ခုက တူညီသောစကားဝှက်ကို သုံးနေသည်}}</translation> <translation id="3605780360466892872">အမည်သစ်</translation> <translation id="3607671391978830431">ကလေးအတွက်</translation> +<translation id="3608460311600621471">ဤဒေတာကို ပုံနှိပ်ထုတ်ယူခြင်းအတွက် အကြောင်းပြချက် ထည့်ပါ-</translation> <translation id="3608730769702025110">အဆင့် ၄ ဆင့်အနက် ၃- ပုဂ္ဂိုလ်ရေးအရ ခွဲခြားသိရှိနိုင်သော အချက်အလက်များ ပြန်စစ်ပါ</translation> <translation id="3609277884604412258">အမြန် ရှာဖွေရန်</translation> <translation id="3610241585790874201">သင့်စက်တွင် ဒေတာသိမ်းရန် ခွင့်ပြုမထားပါ</translation> @@ -4200,6 +4211,7 @@ <translation id="4250229828105606438">မျက်နှာပြင် လျှပ်တပြက်ပုံ</translation> <translation id="4250680216510889253">No</translation> <translation id="4251377547188244181">Kiosk နှင့် သတ်မှတ်စက် စာရင်းသွင်းခြင်း</translation> +<translation id="4252141040239557279">ပုံ <ph name="A" /> အနက် <ph name="INDEX" /></translation> <translation id="4252899949534773101">ဘလူးတုသ် ပိတ်ထားသည်</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - တဘ်အကြောင်းအရာများကို မျှဝေထားသည်</translation> <translation id="4253168017788158739">မှတ်ချက်</translation> @@ -4579,6 +4591,7 @@ <translation id="4548858987594081919">သင်၏လက်မှတ်ထိုးဝင်သည့် အချက်အလက်ကို Google Password Manager ကသိမ်းပေးနိုင်ရန် ဤဝဘ်ဆိုက်အတွက် သင့်အသုံးပြုသူအမည်ထည့်ပါ</translation> <translation id="4549791035683739768">သင့်လုံခြုံရေးကီးတွင် လက်ဗွေရာများ သိမ်းမထားပါ</translation> <translation id="4550926046134589611">ပံ့ပိုးထားသောလင့်ခ်အချို့ကို <ph name="APP_NAME" /> တွင် ဖွင့်နိုင်ပါဦးမည်။</translation> +<translation id="4551379727767354516">သင်၏လတ်တလော AI အပြင်အဆင်များ</translation> <translation id="4551763574344810652">တစ်ဆင့်နောက်ပြန်ရန် <ph name="MODIFIER_KEY_DESCRIPTION" /> ကို နှိပ်ပါ</translation> <translation id="4553526521109675518">စက်၏ဘာသာစကားပြောင်းရန် သင်၏ Chromebook ကို ပြန်စရပါမည်။ <ph name="BEGIN_LINK_LEARN_MORE" />ပိုမိုလေ့လာရန်<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">ပြင်ပတိုးချဲ့လိုင်းသည် လက်ရှိတစ်ခုနှင့် နှိုင်းယှဉ်ပါက အတူတူ သို့မဟုတ် ပိုမိုနိမ့်သော ဗားရှင်းတွင် ဖြစ်၏။</translation> @@ -5901,6 +5914,7 @@ သင်သည် အရေးပါသည့် အချက်အလက် တစ်ခုကိုမှ ထုတ်မပေးဖြစ်တာ သေချာပါစေ။</translation> <translation id="5620612546311710611">အသုံးပြုမှု စာရင်းအင်းများ</translation> <translation id="5621272825308610394">ဖော်ပြချက်အမည် မရှိပါ</translation> +<translation id="5621350029086078628">၎င်းသည် စမ်းသပ်ဆဲ AI ဝန်ဆောင်မှုဖြစ်သည်။</translation> <translation id="562250930904332809">တိုက်ရိုက်စာတန်း &ပိတ်ရန်</translation> <translation id="5623282979409330487">ဤဝဘ်ဆိုက်က သင့်လှုပ်ရှားမှု အာရုံခံစနစ်များကို ဝင်သုံးနေသည်။</translation> <translation id="5623842676595125836">မှတ်တမ်း</translation> @@ -6018,6 +6032,7 @@ <translation id="572328651809341494">မကြာမီက တဲဘ်များ</translation> <translation id="5723508132121499792">ဖွင့်ထားသည့် နောက်ခံ အက်ပ်များ မရှိ</translation> <translation id="5723967018671998714">'ရုပ်ဖျက်' မုဒ်တွင် ပြင်ပကုမ္ပဏီကွတ်ကီးများကို ပိတ်ထားသည်</translation> +<translation id="5725112283692663422">‘AI ဖြင့် အပြင်အဆင် ဖန်တီးခြင်း’ အတွက် အကြံပြုချက်ပို့ပါ</translation> <translation id="5727728807527375859">တိုးချဲ့မှုများ၊ အက်ပ်များ၊ နှင့် အပြင်အဆင်များက သင်၏ ကွန်ပျူတာကို အန္တရာယ် ပြုနိင်ကြသည်။ သက် ဆက်ပြီး လုပ်ချင်တာ သေချာလား?</translation> <translation id="5728290366864286776">ဤနောက်ဆက်တွဲသည် ဝဘ်ဆိုက်အချက်အလက်ကို ဖတ်ပြီး ပြောင်းခြင်း (သို့) နောက်ခံတွင် လုပ်ဆောင်ခြင်းတို့ လုပ်ဆောင်နိုင်သည်</translation> <translation id="5728450728039149624">Smart Lock ဖုန်းမျက်နှာပြင် လော့ခ်ချရန် ရွေးစရာများ</translation> @@ -6492,6 +6507,7 @@ <translation id="610487644502954950">ဘေးအကန့်ကို ပင်ဖြုတ်လိုက်သည်</translation> <translation id="6104929924898022309">လုပ်ဆောင်ချက်ကီးများ၏ လုပ်ဆောင်ပုံပြောင်းရန်အတွက် ရှာရန်ခလုတ်ကို အသုံးပြုရန်</translation> <translation id="6106167152849320869">ယခင်အဆင့်တွင် အမှားရှာဖွေမှုနှင့် သုံးစွဲမှုဒေတာကို ပေးပို့ရန် ရွေးချယ်ထားပါက ထည့်သွင်းထားသည့် အက်ပ်များအတွက် ဤဒေတာကို စုစည်းပါမည်။</translation> +<translation id="6108952804512516814">AI ဖြင့် ဖန်တီးရန်</translation> <translation id="6111718295497931251">Google Drive အသုံးပြုမှု ဖယ်ရှားရန်</translation> <translation id="6111972606040028426">Google Assistant ဖွင့်ရန်</translation> <translation id="6112294629795967147">အရွယ်အစားပြင်ရန် ထိပါ</translation> @@ -6663,6 +6679,7 @@ <translation id="6238982280403036866">JavaScript သုံးရန် ခွင့်ပြုထားသည်</translation> <translation id="6239558157302047471">ပြန်ဖွင့်ပါ &frame</translation> <translation id="6240821072888636753">အကြိမ်တိုင်း မေးရန်</translation> +<translation id="6240964651812394252">သင်၏ လည်ပတ်သည့်စနစ်ဖြင့် Google Password Manager သုံးရန် Chrome ပြန်ဖွင့်ပြီး ကွန်ပျူတာ၏ စကားဝှက်မန်နေဂျာကို သုံးခွင့်ပြုပါ။ ပြန်ဖွင့်ပြီးနောက် သင့်တဘ်များ ပြန်ပွင့်ပါမည်။</translation> <translation id="6241530762627360640">သင်၏ စနစ်နှင့် ချိတ်တွဲထားသည် ဘလူးတုသ် ကိရိယာများ အကြောင်း အချက်အလက်များကို ရယူလျက် အနီးတဝိုက်ရှိ ဘလူးတုသ် ကိရိယာများကို ရှာကြည့်ပါ။</translation> <translation id="6241844896329831164">အသုံးပြုခွင့် မလိုပါ</translation> <translation id="6242574558232861452">သင့်အဖွဲ့အစည်း၏ လုံခြုံရေးမူဝါဒများဖြင့် စစ်ဆေးနေသည်။</translation> @@ -7282,6 +7299,7 @@ <translation id="6761623907967804682">စက်ပစ္စည်းပေါ်ရှိ ဝဘ်ဆိုက်ဒေတာကို ခွင့်ပြုမထားပါ</translation> <translation id="6762833852331690540">ဖွင့်</translation> <translation id="6762861159308991328">အက်ပ်ဆက်တင်များတွင် လင့်ခ်များဖွင့်သည့်ပုံစံကို ပြောင်းနိုင်သည်</translation> +<translation id="6764633064754857889">လင့်ခ်ကို အစမ်းကြည့်ရန်</translation> <translation id="676560328519657314">Google Pay ရှိ သင်၏ငွေပေးချေနည်းလမ်းများ</translation> <translation id="6766488013065406604">Google Password Manager သို့သွားရန်</translation> <translation id="6767566652486411142">အခြားဘာသာစကားတစ်ခု ရွေးရန်...</translation> @@ -8252,6 +8270,7 @@ <translation id="752098910262610337">ဖြတ်လမ်းလင့်ခ်များ ပြပါ</translation> <translation id="7521430434164837205">Microsoft 365 ဖိုင်</translation> <translation id="7522255036471229694">"Ok Google" ဟုပြောပါ</translation> +<translation id="7523112275619538890">ဖိုင်နှင့် အခြားအရာများကို အနီးတစ်ဝိုက်ရှိ စက်များနှင့် မျှဝေနိုင်သည်</translation> <translation id="7523117833414447032">စာလုံးကြီးများကို ဖတ်သည့်အခါ</translation> <translation id="7523585675576642403">ပရိုဖိုင်ကို အမည်ပြောင်းရန်</translation> <translation id="7525067979554623046">ပြုလုပ်ရန်</translation> @@ -8420,6 +8439,7 @@ <translation id="7657090467145778067">အနည်းငယ် ချွေတာမှုများ</translation> <translation id="7657218410916651670">သင်လက်မှတ်ထိုးဝင်သောအခါ <ph name="BEGIN_LINK_GOOGLE" />အခြားသော လုပ်ဆောင်ချက်များ<ph name="END_LINK_GOOGLE" /> ကို သင်၏ Google Account တွင် သိမ်းထားနိုင်သည်။ ၎င်းတို့ကို အချိန်မရွေး ဖျက်နိုင်သည်။</translation> <translation id="7658239707568436148">မလုပ်တော့</translation> +<translation id="7658727964021657194">လတ်တလော AI အပြင်အဆင် <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">မည်သို့ပင်ဖြစ်စေ ရုပ်ဖျက်မုဒ်မှ ထွက်လိုပါသလား။</translation> <translation id="7659336857671800422">ကိုယ်ရေးအချက်အလက်လုံခြုံမှုလမ်းညွှန် ရယူရန်</translation> <translation id="7659584679870740384">သင်သည် ဒီကိရိယာကို သုံးပိုင်ခွင့် မရှိပါ။ လက်မှတ်ထိုး ဝင်ရန် ခွင့်ပြုချက် အတွက် ကြီးကြပ်သူအား ဆက်သွယ်ပါ။</translation> @@ -8441,6 +8461,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{<ph name="DEVICE_TYPE" /> ကို {NUM_WEEKS} ပတ်အတွင်း ပြန်ပို့ပါ}other{<ph name="DEVICE_TYPE" /> ကို {NUM_WEEKS} ပတ်အတွင်း ပြန်ပို့ပါ}}</translation> <translation id="7668423670802040666"><ph name="ACCOUNT" /> အတွက် ‘Google စကားဝှက်မန်နေဂျာ’ တွင်</translation> <translation id="7668648754769651616">အများသုံးနိုင်သည့် ဝန်ဆောင်မှုများက သင့်စက်ကို ပိုမိုလွယ်ကူစွာ သုံးနိုင်စေသည်။ ‘အမြန် ဆက်တင်များ’ သုံးရန် ဖန်သားပြင်အောက်ခြေရှိ အချိန်ကို ရွေးပါ။</translation> +<translation id="7669620291129890197">သင့်စက်အားလုံးတွင် မြင်နိုင်သည်</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{ပင်နံပါတ် မမှန်ပါ။ ကြိုးစားခွင့် တစ်ကြိမ် ကျန်ပါသည်။}other{ပင်နံပါတ် မမှန်ပါ။ ကြိုးစားခွင့် # ကြိမ် ကျန်ပါသည်။}}</translation> <translation id="7670434942695515800">အကောင်းဆုံး စွမ်းဆောင်ရည်အတွက် နောက်ဆုံးဗားရှင်းသို့ အဆင့်မြှင့်နိုင်သည်။ အဆင့်မြှင့်မှုမပြီးခြင်းများ ရှိနိုင်သဖြင့် သင့်ဖိုင်များကို မိတ္တူကူးထားရန် အကြံပြုပါသည်။ အဆင့်မြှင့်ခြင်း စတင်သောအခါ Linux အပြီးပိတ်ပါမည်။ ရှေ့မဆက်မီ ဖွင့်ထားသောဖိုင်များကို သိမ်းပါ။ <ph name="LINK_START" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation> <translation id="7670483791111801022">စာတန်းထိုးများ</translation> @@ -8640,6 +8661,7 @@ <translation id="7807711621188256451"><ph name="HOST" />အား သင့် ကင်မရာကို ရယူသုံးမှု အမြဲတမ်း ခွင့်ပြုရန်</translation> <translation id="7810202088502699111">ဤစာမျက်နှာတွင် ပေါ့ပ်အာ့ပ်များ ပိတ်ဆို့ထားသည်။</translation> <translation id="7810367892333449285">သင့်ထည့်သွင်းမှုသည် ဤပုံစံဖြစ်ရမည်- <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ address<ph name="LPA_2" />$<ph name="LPA_3" />optional matching id<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">ထပ်စမ်းကြည့်ပါ (သို့) ယခင်ထုတ်ထားသော အောက်ပါအပြင်အဆင်များထဲမှ တစ်ခုကိုရွေးပါ။</translation> <translation id="7814458197256864873">&ကူးယူ</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531"><ph name="EXTENSION_NAME" /> အတွက် ဖြတ်လမ်းလင့်ခ် <ph name="SHORTCUT" /> ပြင်ဆင်ရန်</translation> @@ -8744,6 +8766,7 @@ <translation id="789722939441020330">ဖိုင်အများအပြားကို အလိုအလျောက်ဒေါင်းလုဒ်လုပ်ရန် ဝဘ်ဆိုက်များကို ခွင့်မပြုပါနှင့်</translation> <translation id="7897900149154324287">အနာဂတ်မှာ၊ ထုတ်ယူနိုင်သည့် သင်၏ ကိရိယာကို ၎င်းကို ဖြုတ်မယူမီမှာ ဖိုင်များ အက်ပ် ထဲတွင် ထုတ်ပစ်လိုက်တာ သေချာပါစေ၊ သို့မဟုတ်လျှင် သင်သည် ဒေတာကို ဆုံးရှုံးရနိုင်သည်။</translation> <translation id="7898725031477653577">အမြဲတမ်း ဘာသာပြန်ရန်</translation> +<translation id="7899324822972399722">ပုံ <ph name="A" /> အနက် <ph name="INDEX" />၊ <ph name="B" /> ပုံစံဖြင့်</translation> <translation id="7901405293566323524">ဖုန်းပင်မ</translation> <translation id="7903290522161827520">ဘရောင်ဇာ အစိတ်အပိုင်းများ ရှာနေပါသလား။ ဝင်ကြည့်ရန်</translation> <translation id="7903429136755645827">ဂိမ်းထိန်းချုပ်ခလုတ်များကို စိတ်ကြိုက်လုပ်ရန် နှိပ်ပါ</translation> @@ -9004,6 +9027,7 @@ <translation id="8089547136368562137">Google က ၎င်းကို အကောင်းဆုံး ကာကွယ်ပေးထားသည်</translation> <translation id="8090234456044969073">သင် အများဆုံး မကြာခဏ သွားလေ့ရှိသော ဝက်ဆိုက်များ စာရင်းအား ဖတ်ရန်</translation> <translation id="8090513782447872344">နောက်တစ်ခါကြည့်ရန် အချိန်မရွေး ပြန်လာနိုင်သည်</translation> +<translation id="8090686009202681725">AI ဖြင့် အပြင်အဆင် ဖန်တီးခြင်း</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> သည် တုံ့ပြန်မှုမရှိပါ</translation> <translation id="8094536695728193970">တရုတ်ဇီးသီး</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Google Drive သို့ အရန်သိမ်းပါ။ သင့်ဒေတာများကို ပြန်ယူခြင်း (သို့) စက်ပစ္စည်းပြောင်းခြင်းတို့ အချိန်မရွေး လွယ်ကူစွာပြုလုပ်နိုင်သည်။ သင့်အရန်တွင် အက်ပ်ဒေတာများ ပါဝင်သည်။<ph name="END_PARAGRAPH1" /> @@ -9020,6 +9044,7 @@ <translation id="8098616321286360457">ကွန်ရက်ချိတ်ဆက်မှု လိုအပ်သည်</translation> <translation id="8100230553590752325">သိမ်းထားသောစကားဝှက်များကို နှစ်သက်ရာစက်တွင် သုံးနိုင်သည်</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> ကို ရွေးချယ်ထားသည်။ ပြန်ဖြုတ်ရန် 'ရှာဖွေရန်' နှင့် Space ကိုနှိပ်ပါ။</translation> +<translation id="8100725874569949614">ပုံ <ph name="A" /> အနက် <ph name="INDEX" />၊ <ph name="C" /> ခံစားချက်ဟန်ဖြင့်။</translation> <translation id="8101409298456377967">ဝဘ်ဆိုက်နှင့် အက်ပ်များသို့ လွယ်ကူစွာလက်မှတ်ထိုးဝင်နိုင်ရန် စကားဝှက်များ ပြုလုပ်ပြီး သိမ်းကာစီမံပါ။ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation> <translation id="810185532889603849">စိတ်ကြိုက်အရောင်</translation> <translation id="8101987792947961127">နောက်တစ်ကြိမ် reboot လုပ်လျှင် Powerwash လိုအပ်သည်။</translation> @@ -9029,6 +9054,7 @@ <translation id="8107015733319732394">သင့် <ph name="DEVICE_TYPE" /> တွင် Google Play Store ကို ထည့်သွင်းနေပါသည်။ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။</translation> <translation id="810728361871746125">မျက်နှာပြင်ပြသမှုပုံရိပ် ပြတ်သားကိန်း</translation> <translation id="8109109153262930486">မူရင်း ကိုယ်စားပြုပုံ</translation> +<translation id="8109991406044913868">AI ဖြင့် ဖန်တီးထားသော အပြင်အဆင်</translation> <translation id="8110393529211831722">စာရင်းသွင်းမှုကို ဤစက်တွင်သာ ထည့်သွင်းထားပြီး သင့်အကောင့်အောက်ရှိ အခြားစက်များနှင့် စင့်ခ်လုပ်ထားခြင်း မရှိပါ။ <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation> <translation id="8110489095782891123">အဆက်အသွယ် စာရင်းကို ဒေါင်းလုဒ်လုပ်နေသည်...</translation> <translation id="8115139559594092084">သင်၏ Google Drive မှ</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index f90e12b6..27ed55f 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -2641,6 +2641,7 @@ <translation id="2990313168615879645">Legg til Google-konto</translation> <translation id="2990375978470734995">For at denne endringen skal tre i kraft, må du koble til det eksterne tilbehøret på nytt.</translation> <translation id="2990583317361835189">Ikke la nettsteder bruke bevegelsessensorer</translation> +<translation id="2991182900092497283">Oppgi en årsak til at du laster ned disse dataene:</translation> <translation id="2992931425024192067">Vis alt innhold i varsler</translation> <translation id="2993517869960930405">Appinformasjon</translation> <translation id="2996108796702395498">Enhetens serienummer er <ph name="SERIAL_NUMBER" />. Dette nummeret kan brukes til å aktivere tjenesten.</translation> @@ -3155,6 +3156,7 @@ <translation id="3432762828853624962">Delte arbeidere (SharedWorker)</translation> <translation id="3433507769937235446">Lås når enheten forlates</translation> <translation id="3433621910545056227">Beklager. Systemet kunne ikke oppdage enhetens attributtlås for installasjonstid.</translation> +<translation id="3434025015623587566">Google Passordlagring trenger mer tilgang</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" /> %</translation> <translation id="3434272557872943250">Hvis du har slått på innstillingen for annen nett- og appaktivitet for barnet ditt, kan disse dataene bli lagret i barnets Google-konto. Finn ut mer om disse innstillingene og hvordan du justerer dem, på families.google.com.</translation> <translation id="3434475275396485144">Denne innstillingen administreres av telefonadministratoren</translation> @@ -3369,6 +3371,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{{COUNT} konto bruker det samme passordet}other{{COUNT} kontoer bruker det samme passordet}}</translation> <translation id="3605780360466892872">Businessmann</translation> <translation id="3607671391978830431">For et barn</translation> +<translation id="3608460311600621471">Oppgi en årsak til at du skriver ut disse dataene:</translation> <translation id="3608730769702025110">Trinn 3 av 4: Gå gjennom personlig identifiserende informasjon</translation> <translation id="3609277884604412258">Hurtigsøk</translation> <translation id="3610241585790874201">Nettsteder som ikke har lov til å lagre data på enheten din</translation> @@ -6669,6 +6672,7 @@ <translation id="6238982280403036866">Nettsteder som har lov til å bruke JavaScript</translation> <translation id="6239558157302047471">Last inn &rammen på nytt</translation> <translation id="6240821072888636753">Spør hver gang</translation> +<translation id="6240964651812394252">For å bruke Google Passordlagring med operativsystemet ditt, start Chrome på nytt og gi tilgang til datamaskinens passordlagring. Fanene dine åpnes på nytt når du starter på nytt.</translation> <translation id="6241530762627360640">bruke informasjon om Bluetooth-enheter tilkoblet systemet ditt og oppdage Bluetooth-enheter i nærheten.</translation> <translation id="6241844896329831164">Ingen tilgang trengs</translation> <translation id="6242574558232861452">Sjekker opp mot sikkerhetsretningslinjene til organisasjonen din.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index d56aaec..018332c0 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -278,6 +278,7 @@ <translation id="1203559206734265703">A depuração de públicos protegidos está ativada.</translation> <translation id="120368089816228251">Nota musical</translation> <translation id="1203942045716040624">Worker compartilhado: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Prévia do link</translation> <translation id="1206832039833782423">O código de segurança está no verso do cartão</translation> <translation id="1210678701920254279">Verificar ou adicionar impressoras e conferir trabalhos de impressão ativos</translation> <translation id="1211769675100312947">Atalhos selecionados por você</translation> @@ -617,6 +618,7 @@ <translation id="1478340334823509079">Detalhes: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">A instalação não está ativada</translation> <translation id="1480663089572535854">Você pode voltar para mudar a atribuição da ação "Selecionar". Desative a leitura automática nas Configurações quando quiser.</translation> +<translation id="1481001611315487791">Saiba mais sobre como criar temas com IA.</translation> <translation id="1481537595330271162">Erro ao redimensionar o disco</translation> <translation id="1482626744466814421">Adicionar esta guia aos favoritos...</translation> <translation id="1482772681918035149">editar as senhas</translation> @@ -811,6 +813,7 @@ <translation id="1615433306336820465">Gerenciar os dados de login armazenados na sua chave de segurança</translation> <translation id="1616206807336925449">Esta extensão não requer permissões especiais.</translation> <translation id="1616298854599875024">Não foi possível importar a extensão "<ph name="IMPORT_NAME" />", porque ela não é um módulo compartilhado</translation> +<translation id="161654560322394775">Imagem <ph name="INDEX" /> de <ph name="A" />, no estilo <ph name="B" />, com o clima <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Verificando esses dados com as políticas de segurança da sua organização…}=1{Verificando esse arquivo com as políticas de segurança da sua organização…}one{Verificando esse arquivo com as políticas de segurança da sua organização…}other{Verificando esses arquivos com as políticas de segurança da sua organização…}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">Central de ajuda</translation> @@ -1518,6 +1521,7 @@ <translation id="2140902257485550046">Selecione para bloquear todas as extensões neste site</translation> <translation id="2142328300403846845">Abrir link como</translation> <translation id="2142582065325732898">Ative a <ph name="LINK1_BEGIN" />Sincronização do Chrome<ph name="LINK1_END" /> para ver as guias recentes do navegador. <ph name="LINK2_BEGIN" />Saiba mais<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Visível para alguns contatos</translation> <translation id="2143667386128949432">{COUNT,plural, =0{O Chrome vai bloquear os cookies de novo hoje}=1{O Chrome vai bloquear os cookies de novo amanhã}one{# dia até que os cookies sejam bloqueados de novo}other{# dias até que os cookies sejam bloqueados de novo}}</translation> <translation id="2143765403545170146">Sempre mostrar a barra de ferramentas em tela cheia</translation> <translation id="2143778271340628265">Configuração manual de proxy</translation> @@ -1705,6 +1709,7 @@ <translation id="2291452790265535215">Tente usar o painel lateral para acessar favoritos, jornadas e muito mais</translation> <translation id="229182044471402145">Nenhuma fonte encontrada.</translation> <translation id="2292848386125228270">Inicie o <ph name="PRODUCT_NAME" /> como um usuário normal. Se precisar executar como raiz para desenvolvimento, execute novamente com a sinalização --no-sandbox.</translation> +<translation id="2292862094862078674">Verifique sua conexão de Internet e tente de novo. Você ainda pode selecionar um dos temas gerados anteriormente abaixo.</translation> <translation id="2294081976975808113">Privacidade da tela</translation> <translation id="2294358108254308676">Quer instalar o <ph name="PRODUCT_NAME" />?</translation> <translation id="229477815107578534">Revise suas configurações</translation> @@ -3043,6 +3048,7 @@ <translation id="3325804108816646710">Procurando perfis disponíveis…</translation> <translation id="3325910708063135066">A câmera e o microfone estão desativados nas preferências do sistema do Mac</translation> <translation id="3325930488268995856">Microsoft OneDrive conectado</translation> +<translation id="3325995804968971809">Estilo</translation> <translation id="3327050066667856415">Os Chromebooks são desenvolvidos para serem seguros. Seu dispositivo é automaticamente protegido contra malwares, sem a necessidade de softwares extras.</translation> <translation id="3328489342742826322">A restauração de um backup exclui todos os aplicativos e dados da sua pasta de arquivos do Linux.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3228,6 +3234,7 @@ <translation id="3481268647794498892">Abrindo no <ph name="ALTERNATIVE_BROWSER_NAME" /> em <ph name="COUNTDOWN_SECONDS" /> segundos</translation> <translation id="348268549820508141">Reconhecimento de fala</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> pode ver os seguintes arquivos</translation> +<translation id="3484595034894304035">Personalize o papel de parede, protetor de tela, tema escuro e muito mais</translation> <translation id="3484869148456018791">Obter novo certificado</translation> <translation id="3486950712960783074">Sua viagem</translation> <translation id="3487007233252413104">função anônima</translation> @@ -3320,6 +3327,7 @@ <translation id="3561201631376780358">Abrir o painel lateral para visualizar todos os favoritos</translation> <translation id="3562423906127931518">O processo pode levar alguns minutos. Configurando o contêiner Linux.</translation> <translation id="3562655211539199254">Ver guias recentes do Chrome no seu smartphone</translation> +<translation id="3563392617245068355">Clima</translation> <translation id="3563432852173030730">Não foi possível fazer o download do aplicativo Kiosk.</translation> <translation id="3563558822383875692">Configurando DLC.</translation> <translation id="3564334271939054422">A rede Wi-Fi que você está usando (<ph name="NETWORK_ID" />) pode exigir que você visite sua página de login.</translation> @@ -4203,6 +4211,7 @@ <translation id="4250229828105606438">Captura de tela</translation> <translation id="4250680216510889253">Não</translation> <translation id="4251377547188244181">Registro do dispositivo com quiosque e sinalização</translation> +<translation id="4252141040239557279">Imagem <ph name="INDEX" /> de <ph name="A" /></translation> <translation id="4252899949534773101">Bluetooth desativado</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Conteúdo da guia compartilhado</translation> <translation id="4253168017788158739">Nota</translation> @@ -4582,6 +4591,7 @@ <translation id="4548858987594081919">Para ajudar o Gerenciador de senhas do Google a salvar suas informações de login, adicione seu nome de usuário deste site</translation> <translation id="4549791035683739768">Sua chave de segurança não tem nenhuma impressão digital armazenada</translation> <translation id="4550926046134589611">Alguns links com suporte ainda serão abertos no app <ph name="APP_NAME" />.</translation> +<translation id="4551379727767354516">Seus temas recentes de IA</translation> <translation id="4551763574344810652">Pressione <ph name="MODIFIER_KEY_DESCRIPTION" /> para desfazer</translation> <translation id="4553526521109675518">Será necessário reiniciar o Chromebook para mudar o idioma do dispositivo. <ph name="BEGIN_LINK_LEARN_MORE" />Saiba mais<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">A extensão externa está na mesma versão ou em uma versão anterior à existente.</translation> @@ -5904,6 +5914,7 @@ Não exponha nenhuma informação confidencial.</translation> <translation id="5620612546311710611">estatísticas de uso</translation> <translation id="5621272825308610394">Nenhum nome de exibição</translation> +<translation id="5621350029086078628">Este é um recurso experimental de IA.</translation> <translation id="562250930904332809">&Desativar a Legenda instantânea</translation> <translation id="5623282979409330487">Este site está acessando seus sensores de movimento.</translation> <translation id="5623842676595125836">Registro</translation> @@ -6021,6 +6032,7 @@ <translation id="572328651809341494">Guias recentes</translation> <translation id="5723508132121499792">Nenhum aplicativo de fundo sendo executado</translation> <translation id="5723967018671998714">Os cookies de terceiros são bloqueados no modo de navegação anônima</translation> +<translation id="5725112283692663422">Enviar feedback sobre a página "Criar um tema com IA"</translation> <translation id="5727728807527375859">Extensões, aplicativos e temas podem danificar o seu computador. Você quer mesmo continuar?</translation> <translation id="5728290366864286776">Esta extensão pode ler e mudar as informações do site ou ser executada em segundo plano</translation> <translation id="5728450728039149624">Opções do bloqueio de tela do Smart Lock</translation> @@ -6497,6 +6509,7 @@ <translation id="610487644502954950">Painel lateral liberado</translation> <translation id="6104929924898022309">Usar a tecla de pesquisa para mudar o comportamento das teclas de função</translation> <translation id="6106167152849320869">Se você também escolheu enviar dados de uso e diagnóstico na etapa anterior, esses dados serão coletados para os apps instalados.</translation> +<translation id="6108952804512516814">Criar com IA</translation> <translation id="6111718295497931251">Remover o acesso ao Google Drive</translation> <translation id="6111972606040028426">Ativar o Google Assistente</translation> <translation id="6112294629795967147">Toque para redimensionar</translation> @@ -7290,6 +7303,7 @@ <translation id="6761623907967804682">Não é permitido usar dados de sites no dispositivo</translation> <translation id="6762833852331690540">Ativado</translation> <translation id="6762861159308991328">Você pode mudar a forma como os links são abertos nas configurações do app</translation> +<translation id="6764633064754857889">Prévia do link</translation> <translation id="676560328519657314">Suas formas de pagamento no Google Pay</translation> <translation id="6766488013065406604">Acessar o Gerenciador de senhas do Google</translation> <translation id="6767566652486411142">Escolher outro idioma…</translation> @@ -8261,6 +8275,7 @@ <translation id="752098910262610337">Mostrar atalhos</translation> <translation id="7521430434164837205">Arquivos do Microsoft 365</translation> <translation id="7522255036471229694">Diga "Ok Google"</translation> +<translation id="7523112275619538890">Compartilhe arquivos e muito mais com dispositivos por perto</translation> <translation id="7523117833414447032">Ao ler letras maiúsculas</translation> <translation id="7523585675576642403">Renomear perfil</translation> <translation id="7525067979554623046">Criar</translation> @@ -8429,6 +8444,7 @@ <translation id="7657090467145778067">Pequena economia</translation> <translation id="7657218410916651670"><ph name="BEGIN_LINK_GOOGLE" />Outras formas de atividade<ph name="END_LINK_GOOGLE" /> podem ser salvas na sua Conta do Google quando ela está conectada. É possível excluí-las a qualquer momento.</translation> <translation id="7658239707568436148">Cancelar</translation> +<translation id="7658727964021657194">Tema recente de IA <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">Sair do modo de navegação anônima mesmo assim?</translation> <translation id="7659336857671800422">Consultar o Guia de privacidade</translation> <translation id="7659584679870740384">Você não tem autorização para usar este dispositivo. Para permissão de login, entre em contato com o administrador.</translation> @@ -8450,6 +8466,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Devolva o <ph name="DEVICE_TYPE" /> em até {NUM_WEEKS} semana}one{Devolva o <ph name="DEVICE_TYPE" /> em até {NUM_WEEKS} semana}other{Devolva o <ph name="DEVICE_TYPE" /> em até {NUM_WEEKS} semanas}}</translation> <translation id="7668423670802040666">No Gerenciador de senhas do Google da conta <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">Os recursos de acessibilidade facilitam o uso do seu dispositivo. Para acessar as Configurações rápidas, selecione o horário na parte de baixo da tela.</translation> +<translation id="7669620291129890197">Visível para seus dispositivos</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{PIN incorreto. Você tem apenas uma tentativa restante.}one{PIN incorreto. Você tem apenas # tentativa restante.}other{PIN incorreto. Você tem apenas # tentativas restantes.}}</translation> <translation id="7670434942695515800">Para ter o melhor desempenho, faça upgrade para a versão mais recente. O backup dos arquivos é recomendado quando não é possível concluir o upgrade. O Linux será desligado quando o upgrade começar. Salve os arquivos abertos antes de continuar. <ph name="LINK_START" />Saiba mais<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Legendas</translation> @@ -8649,6 +8666,7 @@ <translation id="7807711621188256451">Sempre permitir que <ph name="HOST" /> acesse sua câmera</translation> <translation id="7810202088502699111">As pop-ups foram bloqueadas nesta página.</translation> <translation id="7810367892333449285">A entrada precisa ter o formato <ph name="LPA_0" />$<ph name="LPA_1" />endereço SM-DP+<ph name="LPA_2" />$<ph name="LPA_3" />ID correspondente opcional<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Tente de novo ou selecione um dos temas gerados anteriormente abaixo.</translation> <translation id="7814458197256864873">Co&piar</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">Editar o atalho <ph name="SHORTCUT" /> para a extensão <ph name="EXTENSION_NAME" /></translation> @@ -8753,6 +8771,7 @@ <translation id="789722939441020330">Não permitir que os sites façam o download automático de vários arquivos</translation> <translation id="7897900149154324287">No futuro, não se esqueça de ejetar o dispositivo removível no aplicativo "Arquivos" antes de desconectá-lo. Caso contrário, você poderá perder dados.</translation> <translation id="7898725031477653577">Sempre traduzir do</translation> +<translation id="7899324822972399722">Imagem <ph name="INDEX" /> de <ph name="A" />, no estilo <ph name="B" /></translation> <translation id="7901405293566323524">Phone Hub</translation> <translation id="7903290522161827520">Procurando componentes do navegador? Acesse</translation> <translation id="7903429136755645827">Clique para personalizar os controles do jogo</translation> @@ -9014,6 +9033,7 @@ <translation id="8089547136368562137">Protegida pelas melhores tecnologias do Google</translation> <translation id="8090234456044969073">Ler uma lista dos seus websites mais visitados</translation> <translation id="8090513782447872344">Volte pode voltar e revisar este guia sempre que quiser</translation> +<translation id="8090686009202681725">Criar um tema com IA</translation> <translation id="8093359998839330381">O plug-in <ph name="PLUGIN_NAME" /> não está respondendo</translation> <translation id="8094536695728193970">Damasco</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Fazer backup no Google Drive. Restaure seus dados com facilidade ou troque de dispositivo a qualquer momento. O backup inclui dados de apps.<ph name="END_PARAGRAPH1" /> @@ -9030,6 +9050,7 @@ <translation id="8098616321286360457">Conexão de rede necessária</translation> <translation id="8100230553590752325">Use senhas salvas em qualquer dispositivo</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> selecionado. Pressione "Pesquisar" junto à barra de espaço para desmarcar.</translation> +<translation id="8100725874569949614">Imagem <ph name="INDEX" /> de <ph name="A" />, com o clima <ph name="C" />.</translation> <translation id="8101409298456377967">Crie, salve e gerencie suas senhas para fazer login em sites e apps com facilidade. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="810185532889603849">Cor personalizada</translation> <translation id="8101987792947961127">Powerwash obrigatório na próxima reinicialização</translation> @@ -9039,6 +9060,7 @@ <translation id="8107015733319732394">Instalando a Google Play Store no seu <ph name="DEVICE_TYPE" />. Isso pode demorar alguns minutos.</translation> <translation id="810728361871746125">Resolução da tela</translation> <translation id="8109109153262930486">Avatar padrão</translation> +<translation id="8109991406044913868">Tema criado por IA</translation> <translation id="8110393529211831722">A assinatura é instalada apenas neste dispositivo e não é sincronizada com outros dispositivos conectados à sua conta. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Fazendo o download da lista de contatos…</translation> <translation id="8115139559594092084">Do seu Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 328eb8e..0590a55 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -275,6 +275,7 @@ <translation id="1203559206734265703">A depuração de públicos-alvo protegidos está ativada.</translation> <translation id="120368089816228251">Nota musical</translation> <translation id="1203942045716040624">Trabalhador partilhado: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Pré-visualizar link</translation> <translation id="1206832039833782423">O código de segurança encontra-se no verso do cartão</translation> <translation id="1210678701920254279">Veja ou adicione impressoras e veja as tarefas de impressão ativas</translation> <translation id="1211769675100312947">Os atalhos são organizados por si</translation> @@ -613,6 +614,7 @@ <translation id="1478340334823509079">Detalhes: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">A instalação não está ativada.</translation> <translation id="1480663089572535854">Pode regressar para alterar a atribuição de "Selecionar". Pode sempre desativar a análise automática nas Definições.</translation> +<translation id="1481001611315487791">Saber mais sobre a criação de temas com IA.</translation> <translation id="1481537595330271162">Ocorreu um erro ao redimensionar o disco.</translation> <translation id="1482626744466814421">Adicionar este separador aos marcadores…</translation> <translation id="1482772681918035149">editar palavras-passe</translation> @@ -807,6 +809,7 @@ <translation id="1615433306336820465">Faça a gestão dos dados de início de sessão armazenados na sua chave de segurança</translation> <translation id="1616206807336925449">Esta extensão não requer autorizações especiais.</translation> <translation id="1616298854599875024">Não é possível importar a extensão "<ph name="IMPORT_NAME" />" porque não é um módulo partilhado.</translation> +<translation id="161654560322394775">Imagem <ph name="INDEX" /> de <ph name="A" />, no estilo <ph name="B" />, com o estado de espírito <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{A verificar estes dados com as políticas de segurança da sua entidade…}=1{A verificar este ficheiro com as políticas de segurança da sua entidade…}other{A verificar estes ficheiros com as políticas de segurança da sua entidade…}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">C&entro de Ajuda</translation> @@ -1505,6 +1508,7 @@ <translation id="2140902257485550046">Selecionar para bloquear todas as extensões neste site</translation> <translation id="2142328300403846845">Abrir link como</translation> <translation id="2142582065325732898">Ative a <ph name="LINK1_BEGIN" />Sincronização do Chrome<ph name="LINK1_END" /> para ver separadores recentes do Chrome. <ph name="LINK2_BEGIN" />Saiba mais<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Visível para alguns contactos</translation> <translation id="2143667386128949432">{COUNT,plural, =0{O Chrome vai bloquear os cookies novamente hoje}=1{O Chrome vai bloquear os cookies novamente amanhã}other{# dias até os cookies serem bloqueados novamente}}</translation> <translation id="2143765403545170146">Mostrar sempre a barra de ferramentas no modo de ecrã inteiro</translation> <translation id="2143778271340628265">Configuração manual do proxy</translation> @@ -1689,6 +1693,7 @@ <translation id="2291452790265535215">Experimente usar o painel lateral para marcadores, percursos e muito mais</translation> <translation id="229182044471402145">Não foi encontrado qualquer tipo de letra correspondente.</translation> <translation id="2292848386125228270">Inicie o <ph name="PRODUCT_NAME" /> como um utilizador normal. Se precisar de executar com acesso máximo para programação, volte a executar com a sinalização --no-sandbox.</translation> +<translation id="2292862094862078674">Verifique a ligação à Internet e tente novamente. Ainda pode selecionar um dos temas gerados anteriormente abaixo.</translation> <translation id="2294081976975808113">Privacidade do ecrã</translation> <translation id="2294358108254308676">Instalar o <ph name="PRODUCT_NAME" />?</translation> <translation id="229477815107578534">Reveja as definições</translation> @@ -3029,6 +3034,7 @@ <translation id="3325804108816646710">A procurar perfis disponíveis…</translation> <translation id="3325910708063135066">A câmara e o microfone estão desativados nas Preferências do Sistema no Mac</translation> <translation id="3325930488268995856">Microsoft OneDrive associado</translation> +<translation id="3325995804968971809">Estilo</translation> <translation id="3327050066667856415">Os Chromebooks foram concebidos a pensar na segurança. O seu dispositivo está automaticamente protegido contra software malicioso, sem que seja necessário software adicional.</translation> <translation id="3328489342742826322">Se restaurar a partir de uma cópia de segurança, irá eliminar as aplicações e os dados do Linux existentes na pasta Ficheiros Linux.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3213,6 +3219,7 @@ <translation id="3481268647794498892">A abrir o <ph name="ALTERNATIVE_BROWSER_NAME" /> dentro de <ph name="COUNTDOWN_SECONDS" /> segundos</translation> <translation id="348268549820508141">Reconhecimento de voz</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> pode ver os seguintes ficheiros</translation> +<translation id="3484595034894304035">Personalize a imagem de fundo, a proteção de ecrã, o tema escuro e muito mais</translation> <translation id="3484869148456018791">Obter novo certificado</translation> <translation id="3486950712960783074">A sua viagem</translation> <translation id="3487007233252413104">função anónima</translation> @@ -3305,6 +3312,7 @@ <translation id="3561201631376780358">Abrir painel lateral para ver todos os marcadores</translation> <translation id="3562423906127931518">Este processo pode demorar alguns minutos. A configurar o contentor do Linux…</translation> <translation id="3562655211539199254">Veja os separadores recentes do Chrome do telemóvel.</translation> +<translation id="3563392617245068355">Estado de espírito</translation> <translation id="3563432852173030730">Não foi possível transferir a app de quiosque.</translation> <translation id="3563558822383875692">A configurar o DLC (conteúdo transferível).</translation> <translation id="3564334271939054422">A rede Wi-Fi que está a utilizar (<ph name="NETWORK_ID" />) pode exigir que aceda à respetiva página de início de sessão.</translation> @@ -4188,6 +4196,7 @@ <translation id="4250229828105606438">Captura de ecrã</translation> <translation id="4250680216510889253">Não</translation> <translation id="4251377547188244181">Inscrição de dispositivo no modo quiosque e sinalização</translation> +<translation id="4252141040239557279">Imagem <ph name="INDEX" /> de <ph name="A" /></translation> <translation id="4252899949534773101">O Bluetooth está desativado</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – conteúdo do separador partilhado</translation> <translation id="4253168017788158739">Nota</translation> @@ -4566,6 +4575,7 @@ <translation id="4548858987594081919">Para ajudar o Gestor de Palavras-passe da Google a guardar as suas informações de início de sessão, adicione o seu nome de utilizador para este site</translation> <translation id="4549791035683739768">A sua chave de segurança não tem impressões digitais armazenadas.</translation> <translation id="4550926046134589611">Alguns links suportados continuarão a ser abertos na app <ph name="APP_NAME" />.</translation> +<translation id="4551379727767354516">Os seus temas de IA recentes</translation> <translation id="4551763574344810652">Prima <ph name="MODIFIER_KEY_DESCRIPTION" /> para anular</translation> <translation id="4553526521109675518">Tem de reiniciar o seu Chromebook para alterar o idioma do dispositivo. <ph name="BEGIN_LINK_LEARN_MORE" />Saiba mais<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">A extensão externa tem a mesma versão ou uma versão inferior à existente.</translation> @@ -5888,6 +5898,7 @@ Certifique-se de que não revela informações confidenciais.</translation> <translation id="5620612546311710611">estatísticas de utilização</translation> <translation id="5621272825308610394">Nenhum nome a apresentar</translation> +<translation id="5621350029086078628">Esta é uma funcionalidade de IA experimental.</translation> <translation id="562250930904332809">&Desativar Legendas instantâneas</translation> <translation id="5623282979409330487">Este site está a aceder aos sensores de movimentos.</translation> <translation id="5623842676595125836">Registo</translation> @@ -6005,6 +6016,7 @@ <translation id="572328651809341494">Separadores recentes</translation> <translation id="5723508132121499792">Não há aplicações em execução em segundo plano</translation> <translation id="5723967018671998714">Os cookies de terceiros estão bloqueados no Modo de navegação anónima</translation> +<translation id="5725112283692663422">Envie feedback sobre a funcionalidade Crie um tema com IA</translation> <translation id="5727728807527375859">As extensões, as aplicações e os temas podem danificar o computador. Tem a certeza de que quer continuar?</translation> <translation id="5728290366864286776">Esta extensão pode ler e alterar informações do site ou ser executada em segundo plano</translation> <translation id="5728450728039149624">Opções de bloqueio de ecrã do Smart Lock</translation> @@ -6481,6 +6493,7 @@ <translation id="610487644502954950">Painel lateral desafixado</translation> <translation id="6104929924898022309">Usar a tecla de pesquisa para alterar o comportamento das teclas de função</translation> <translation id="6106167152849320869">Se também tiver optado por enviar dados de diagnóstico e utilização no passo anterior, estes dados são recolhidos para as apps instaladas.</translation> +<translation id="6108952804512516814">Criar com IA</translation> <translation id="6111718295497931251">Remover acesso ao Google Drive</translation> <translation id="6111972606040028426">Ativar Assistente Google</translation> <translation id="6112294629795967147">Tocar para redimensionar</translation> @@ -7272,6 +7285,7 @@ <translation id="6761623907967804682">Não são permitidos dados de sites no dispositivo</translation> <translation id="6762833852331690540">Ativado</translation> <translation id="6762861159308991328">Pode alterar a forma como os links abrem nas Definições da app</translation> +<translation id="6764633064754857889">Pré-visualizar link</translation> <translation id="676560328519657314">Os seus métodos de pagamento no Google Pay</translation> <translation id="6766488013065406604">Aceder ao Gestor de Palavras-passe da Google</translation> <translation id="6767566652486411142">Selecionar outro idioma…</translation> @@ -8243,6 +8257,7 @@ <translation id="752098910262610337">Mostrar atalhos</translation> <translation id="7521430434164837205">Ficheiros do Microsoft 365</translation> <translation id="7522255036471229694">Diga "OK Google"</translation> +<translation id="7523112275619538890">Partilhe ficheiros e muito mais com dispositivos próximos</translation> <translation id="7523117833414447032">Ao ler letras maiúsculas</translation> <translation id="7523585675576642403">Mude o nome do perfil</translation> <translation id="7525067979554623046">Criar</translation> @@ -8381,7 +8396,7 @@ <translation id="7636919061354591437">Instalar neste dispositivo</translation> <translation id="7637253234491814483">Toque no sensor de impressões digitais no canto superior direito do teclado, junto ao botão ligar/desligar. Os seus dados de impressões digitais são armazenados em segurança e nunca saem do <ph name="DEVICE_TYPE" />.</translation> <translation id="7637272932128132922">Enquanto este separador estava inativo, a Poupança de memória libertou memória para outras tarefas. Pode alterar esta definição em qualquer altura nas <ph name="SETTINGS_LINK" />.</translation> -<translation id="7637593984496473097">Não existe espaço suficiente no disco.</translation> +<translation id="7637593984496473097">Não existe espaço suficiente em disco.</translation> <translation id="7639914187072011620">Falha ao obter o URL de redirecionamento SAML do servidor</translation> <translation id="7640256527901510478">O IMEI do dispositivo é <ph name="IMEI_NUMBER" /> e a série do dispositivo é <ph name="SERIAL_NUMBER" />. Estes números podem ser usados para ajudar a ativar o serviço.</translation> <translation id="7640308610547854367">Reverteu para uma versão anterior do ChromeOS. Para obter atualizações, aguarde até que a próxima versão esteja disponível.</translation> @@ -8411,6 +8426,7 @@ <translation id="7657090467145778067">Pequenas poupanças</translation> <translation id="7657218410916651670">Podem ser guardadas <ph name="BEGIN_LINK_GOOGLE" />outras formas de atividade<ph name="END_LINK_GOOGLE" /> na sua Conta Google quando tem sessão iniciada. Pode eliminá-las em qualquer altura.</translation> <translation id="7658239707568436148">Cancelar</translation> +<translation id="7658727964021657194">Tema de IA recente <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">Quer sair do Modo de navegação anónima mesmo assim?</translation> <translation id="7659336857671800422">Iniciar guia de privacidade</translation> <translation id="7659584679870740384">Não está autorizado a utilizar este dispositivo. Contacte o gestor para obter autorização de início de sessão.</translation> @@ -8432,6 +8448,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Devolva o <ph name="DEVICE_TYPE" /> dentro de {NUM_WEEKS} semana}other{Devolva o <ph name="DEVICE_TYPE" /> dentro de {NUM_WEEKS} semanas}}</translation> <translation id="7668423670802040666">No Gestor de palavras-passe da Google para a conta <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">As funcionalidades de acessibilidade facilitam o uso do dispositivo. Para aceder às Definições rápidas, selecione a hora na parte inferior do ecrã.</translation> +<translation id="7669620291129890197">Visível para os seus dispositivos</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{PIN incorreto. Tem mais uma tentativa.}other{PIN incorreto. Tem mais # tentativas.}}</translation> <translation id="7670434942695515800">Para obter o melhor desempenho, atualize para a versão mais recente. É recomendável fazer uma cópia de segurança dos ficheiros caso não seja possível concluir a atualização. Assim que a atualização começar, o Linux será encerrado. Guarde os ficheiros abertos antes de continuar. <ph name="LINK_START" />Saiba mais<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Legendas</translation> @@ -8631,6 +8648,7 @@ <translation id="7807711621188256451">Permitir sempre que <ph name="HOST" /> aceda à sua câmara</translation> <translation id="7810202088502699111">Os pop-ups foram bloqueados nesta página.</translation> <translation id="7810367892333449285">A sua entrada deve ter o formato <ph name="LPA_0" />$<ph name="LPA_1" />Endereço de SM-DP+<ph name="LPA_2" />$<ph name="LPA_3" />ID correspondente opcional<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Tente novamente ou selecione um dos temas gerados anteriormente abaixo.</translation> <translation id="7814458197256864873">&Copiar</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">Editar atalho <ph name="SHORTCUT" /> para <ph name="EXTENSION_NAME" /></translation> @@ -8735,6 +8753,7 @@ <translation id="789722939441020330">Não permitir que os sites transfiram automaticamente vários ficheiros</translation> <translation id="7897900149154324287">De futuro, não se esqueça de ejetar o dispositivo amovível na aplicação Ficheiros antes de o desligar. Caso contrário, pode perder dados.</translation> <translation id="7898725031477653577">Traduzir sempre</translation> +<translation id="7899324822972399722">Imagem <ph name="INDEX" /> de <ph name="A" />, no estilo <ph name="B" /></translation> <translation id="7901405293566323524">Phone Hub</translation> <translation id="7903290522161827520">Está à procura dos componentes do navegador? Visite</translation> <translation id="7903429136755645827">Clicar para personalizar os controlos de jogos</translation> @@ -8996,6 +9015,7 @@ <translation id="8089547136368562137">Está protegida pelo melhor da Google</translation> <translation id="8090234456044969073">Ler uma lista dos Sites visitados com mais frequência</translation> <translation id="8090513782447872344">Pode regressar em qualquer altura para consultar novamente</translation> +<translation id="8090686009202681725">Crie um tema com IA</translation> <translation id="8093359998839330381">O plug-in <ph name="PLUGIN_NAME" /> não está a responder.</translation> <translation id="8094536695728193970">Alperce</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Faça uma cópia de segurança no Google Drive. Restaure os dados ou mude de dispositivo facilmente em qualquer altura. A cópia de segurança inclui dados de apps.<ph name="END_PARAGRAPH1" /> @@ -9012,6 +9032,7 @@ <translation id="8098616321286360457">É necessária uma ligação de rede</translation> <translation id="8100230553590752325">Use palavras-passe guardadas em qualquer dispositivo</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> selecionado. Prima Pesquisar e a tecla de espaço para desmarcar.</translation> +<translation id="8100725874569949614">Imagem <ph name="INDEX" /> de <ph name="A" />, com o estado de espírito <ph name="C" />.</translation> <translation id="8101409298456377967">Crie, guarde e faça a gestão das suas palavras-passe para poder iniciar sessão facilmente nos sites e apps. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="810185532889603849">Cor personalizada</translation> <translation id="8101987792947961127">Powerwash necessário no próximo reinício</translation> @@ -9021,6 +9042,7 @@ <translation id="8107015733319732394">A instalar a Google Play Store no <ph name="DEVICE_TYPE" />… Esta ação pode demorar alguns minutos.</translation> <translation id="810728361871746125">Resolução do ecrã</translation> <translation id="8109109153262930486">Avatar predefinido</translation> +<translation id="8109991406044913868">Tema criado por IA</translation> <translation id="8110393529211831722">A subscrição é instalada apenas neste dispositivo e não é sincronizada com outros dispositivos na sua conta. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="8110489095782891123">A transferir a lista de contactos…</translation> <translation id="8115139559594092084">A partir do Google Drive</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index c9b1e46..92797d8 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1864,7 +1864,7 @@ <translation id="2412593942846481727">Доступно обновление</translation> <translation id="2412753904894530585">Kerberos</translation> <translation id="2414159296888870200">Продолжить просмотр: <ph name="MODULE_TITLE" /></translation> -<translation id="2414886740292270097">Темная</translation> +<translation id="2414886740292270097">Тёмная</translation> <translation id="2415117815770324983">Вы автоматически выйдете из аккаунтов на большинстве сайтов, но останетесь в аккаунте Google</translation> <translation id="2416435988630956212">Функциональные клавиши клавиатуры</translation> <translation id="2418307627282545839">Делает изображение на экране ярче.</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 82d6311..d33e8e2 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -277,6 +277,7 @@ <translation id="1203559206734265703">Ladenie chránených publík je povolené.</translation> <translation id="120368089816228251">Nota</translation> <translation id="1203942045716040624">Spolupracovník: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Zobraziť ukážku odkazu</translation> <translation id="1206832039833782423">Bezpečnostný kód je na zadnej strane karty</translation> <translation id="1210678701920254279">Zobrazenie alebo pridanie tlačiarní a zobrazenie aktívnych tlačových úloh</translation> <translation id="1211769675100312947">Skratky vyberáte vy</translation> @@ -615,6 +616,7 @@ <translation id="1478340334823509079">Podrobnosti: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">Inštalácia nie je povolená</translation> <translation id="1480663089572535854">Môžete sa vrátiť a zmeniť pridelenie prepínača akcii Vybrať. Automatické prehľadávanie môžete kedykoľvek vypnúť v Nastaveniach.</translation> +<translation id="1481001611315487791">Ďalšie informácie o vytváraní motívov pomocou umelej inteligencie</translation> <translation id="1481537595330271162">Pri menení veľkosti disku sa vyskytla chyba</translation> <translation id="1482626744466814421">Pridať kartu medzi záložky…</translation> <translation id="1482772681918035149">upraviť heslá</translation> @@ -809,6 +811,7 @@ <translation id="1615433306336820465">Spravovať prihlasovacie údaje uložené v bezpečnostnom kľúči</translation> <translation id="1616206807336925449">Toto rozšírenie nevyžaduje žiadne špeciálne povolenia.</translation> <translation id="1616298854599875024">Rozšírenie <ph name="IMPORT_NAME" /> sa nepodarilo importovať, pretože nie je zdieľaným modulom</translation> +<translation id="161654560322394775"><ph name="INDEX" />. z <ph name="A" /> obrázkov v štýle <ph name="B" /> s náladou <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Kontroluje sa súlad týchto údajov s pravidlami zabezpečenia vašej organizácie…}=1{Kontroluje sa súlad tohto súboru s pravidlami zabezpečenia vašej organizácie…}few{Kontroluje sa súlad týchto súborov s pravidlami zabezpečenia vašej organizácie…}many{Kontroluje sa súlad týchto súborov s pravidlami zabezpečenia vašej organizácie…}other{Kontroluje sa súlad týchto súborov s pravidlami zabezpečenia vašej organizácie…}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">Centrum pomoci</translation> @@ -1507,6 +1510,7 @@ <translation id="2140902257485550046">Výberom tejto možnosti zablokujete všetky rozšírenia na tomto webe</translation> <translation id="2142328300403846845">Otvoriť odkaz ako</translation> <translation id="2142582065325732898">Ak chcete zobraziť nedávne karty Chromu, zapnite <ph name="LINK1_BEGIN" />synchronizáciu Chromu<ph name="LINK1_END" />. <ph name="LINK2_BEGIN" />Ďalšie informácie<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Viditeľné pre niektoré kontakty</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome bude dnes súbory cookie znova blokovať}=1{Chrome bude zajtra súbory cookie znova blokovať}few{Do opätovného blokovania súborov cookie zostávajú # dni}many{Do opätovného blokovania súborov cookie zostáva # dňa}other{Do opätovného blokovania súborov cookie zostáva # dní}}</translation> <translation id="2143765403545170146">Vždy zobrazovať panel s nástrojmi na celú obrazovku</translation> <translation id="2143778271340628265">Ručná konfigurácia servera proxy</translation> @@ -1691,6 +1695,7 @@ <translation id="2291452790265535215">Skúste použiť bočný panel pre záložky, cesty a ďalšie položky</translation> <translation id="229182044471402145">Nebolo nájdené žiadne zodpovedajúce písmo.</translation> <translation id="2292848386125228270">Spustite <ph name="PRODUCT_NAME" /> ako normálny používateľ. Ak to potrebujete urobiť ako používateľ root na účely vývoja, spustite ho znova pomocou príznaku --no-sandbox.</translation> +<translation id="2292862094862078674">Skontrolujte internetové pripojenie a skúste to znova. Stále si môžete vybrať jeden z motívov nižšie vygenerovaných v minulosti.</translation> <translation id="2294081976975808113">Ochrana súkromia pri používaní obrazovky</translation> <translation id="2294358108254308676">Chcete nainštalovať aplikáciu <ph name="PRODUCT_NAME" />?</translation> <translation id="229477815107578534">Skontrolujte svoje nastavenia</translation> @@ -2628,6 +2633,7 @@ <translation id="2990313168615879645">Pridať účet Google</translation> <translation id="2990375978470734995">Externé príslušenstvo odpojte a pripojte, aby sa táto zmena prejavila.</translation> <translation id="2990583317361835189">Nepovoliť webom používať senzory pohybu</translation> +<translation id="2991182900092497283">Zadajte dôvod prilepenia týchto údajov:</translation> <translation id="2992931425024192067">Zobrazovať všetok obsah upozornení</translation> <translation id="2993517869960930405">Informácie o aplikácii</translation> <translation id="2996108796702395498">Sériové číslo zariadenia je <ph name="SERIAL_NUMBER" />. Pomocou tohto čísla je možné aktivovať službu.</translation> @@ -3030,6 +3036,7 @@ <translation id="3325804108816646710">Hľadajú sa dostupné profily...</translation> <translation id="3325910708063135066">Kamera a mikrofón sú vypnuté v predvoľbách systému Mac</translation> <translation id="3325930488268995856">Služba Microsoft OneDrive je pripojená</translation> +<translation id="3325995804968971809">Štýl</translation> <translation id="3327050066667856415">Účelom Chromebookov je zabezpečenie. Vaše zariadenie je pred malvérom chránené automaticky – nevyžaduje sa žiadny ďalší softvér.</translation> <translation id="3328489342742826322">Obnova zo zálohy odstráni všetky existujúce aplikácie pre Linux, ako aj údaje v priečinku súborov Linux.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3141,6 +3148,7 @@ <translation id="3432762828853624962">Zdieľaní pracovníci</translation> <translation id="3433507769937235446">Uzamknúť, keď odídete</translation> <translation id="3433621910545056227">Ojoj! Systému sa nepodarilo nastaviť zámku pre inštaláciu atribútov v zariadení.</translation> +<translation id="3434025015623587566">Správca hesiel Google potrebuje rozsiahlejší prístup</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" /> %</translation> <translation id="3434272557872943250">Ak pre dieťa zapnete nastavenie ďalšej aktivity na internete a v aplikáciách, tieto údaje sa môžu uložiť do jeho účtu Google. Viac o týchto nastaveniach a o tom, ako ich upraviť, sa dozviete na families.google.com.</translation> <translation id="3434475275396485144">Toto nastavenie ovláda správca vášho telefónu</translation> @@ -3214,6 +3222,7 @@ <translation id="3481268647794498892">O <ph name="COUNTDOWN_SECONDS" /> s sa otvorí v prehliadači <ph name="ALTERNATIVE_BROWSER_NAME" /></translation> <translation id="348268549820508141">Rozpoznávanie reči</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> uvidí nasledujúce súbory</translation> +<translation id="3484595034894304035">Prispôsobiť tapetu, šetrič obrazovky, tmavý motív a ďalšie položky</translation> <translation id="3484869148456018791">Získať nový certifikát</translation> <translation id="3486950712960783074">Vaša cesta</translation> <translation id="3487007233252413104">anonymná funkcia</translation> @@ -3306,6 +3315,7 @@ <translation id="3561201631376780358">Ak chcete zobraziť všetky záložky, otvorte bočný panel</translation> <translation id="3562423906127931518">Tento proces môže trvať niekoľko minút. Nastavuje sa kontajner systému Linux.</translation> <translation id="3562655211539199254">Zobrazte si nedávne karty Chromu z telefónu</translation> +<translation id="3563392617245068355">Nálada</translation> <translation id="3563432852173030730">Aplikáciu Kiosk sa nepodarilo stiahnuť</translation> <translation id="3563558822383875692">Konfiguruje sa DLC.</translation> <translation id="3564334271939054422">Sieť Wi‑Fi, ktorú používate (<ph name="NETWORK_ID" />), môže vyžadovať, aby ste navštívili jej prihlasovaciu stránku.</translation> @@ -3353,6 +3363,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{{COUNT} účet používa rovnaké heslo}few{{COUNT} účty používajú rovnaké heslo}many{{COUNT} accounts using same password}other{{COUNT} účtov používa rovnaké heslo}}</translation> <translation id="3605780360466892872">Manažér</translation> <translation id="3607671391978830431">Pre dieťa</translation> +<translation id="3608460311600621471">Zadajte dôvod tlače týchto údajov:</translation> <translation id="3608730769702025110">3. krok zo 4: skontrolujte údaje umožňujúce zistenie totožnosti</translation> <translation id="3609277884604412258">Rýchle vyhľadávanie</translation> <translation id="3610241585790874201">Nemôžu ukladať dáta v zariadení</translation> @@ -4189,6 +4200,7 @@ <translation id="4250229828105606438">Snímka obrazovky</translation> <translation id="4250680216510889253">Nie</translation> <translation id="4251377547188244181">Registrácia zariadenia pomocou verejného terminálu a značenia</translation> +<translation id="4252141040239557279"><ph name="INDEX" />. z <ph name="A" /> obrázkov</translation> <translation id="4252899949534773101">Rozhranie Bluetooth je zakázané</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – Bol zdieľaný obsah karty</translation> <translation id="4253168017788158739">Poznámka</translation> @@ -4567,6 +4579,7 @@ <translation id="4548858987594081919">Ak chcete pomôcť Správcovi hesiel Google ukladať vaše prihlasovacie údaje, pridajte si používateľské meno pre tento web</translation> <translation id="4549791035683739768">V bezpečnostnom kľúči nie sú uložené žiadne odtlačky prstov</translation> <translation id="4550926046134589611">Niektoré podporované odkazy sa budú stále otvárať v aplikácii <ph name="APP_NAME" />.</translation> +<translation id="4551379727767354516">Vaše nedávne motívy vytvorené umelou inteligenciou</translation> <translation id="4551763574344810652">Stlačením skratky <ph name="MODIFIER_KEY_DESCRIPTION" /> vrátite akciu späť</translation> <translation id="4553526521109675518">Ak chcete zmeniť jazyk zariadenia, musíte svoj Chromebook reštartovať. <ph name="BEGIN_LINK_LEARN_MORE" />Ďalšie informácie<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">Verzia externého rozšírenia je rovnaká alebo nižšia ako existujúca verzia</translation> @@ -5888,6 +5901,7 @@ <translation id="5620568081365989559">Nástroj DevTools požaduje úplný prístup k priečinku <ph name="FOLDER_PATH" />. Dajte pozor, aby ste mu nesprístupnili žiadne citlivé informácie.</translation> <translation id="5620612546311710611">štatistiky používania</translation> <translation id="5621272825308610394">Žiadny zobrazovaný názov</translation> +<translation id="5621350029086078628">Toto je experimentálna funkcia umelej inteligencie.</translation> <translation id="562250930904332809">&Vypnúť živý prepis</translation> <translation id="5623282979409330487">Tento web má prístup k senzorom pohybu.</translation> <translation id="5623842676595125836">Denník</translation> @@ -6005,6 +6019,7 @@ <translation id="572328651809341494">Nedávne karty</translation> <translation id="5723508132121499792">Na pozadí nie sú spustené žiadne aplikácie</translation> <translation id="5723967018671998714">Súbory cookie tretích strán sú v anonymnom režime blokované</translation> +<translation id="5725112283692663422">Odoslanie spätnej väzby k vytváraniu motívu pomocou umelej inteligencie</translation> <translation id="5727728807527375859">Rozšírenia, aplikácie a motívy môžu poškodiť váš počítač. Naozaj chcete pokračovať?</translation> <translation id="5728290366864286776">Toto rozšírenie môže čítať a meniť informácie o webe alebo byť spustené na pozadí</translation> <translation id="5728450728039149624">Možnosti zámky obrazovky Smart Lock</translation> @@ -6481,6 +6496,7 @@ <translation id="610487644502954950">Bočný panel bol odopnutý</translation> <translation id="6104929924898022309">Klávesom vyhľadávania meniť správanie funkčných klávesov</translation> <translation id="6106167152849320869">Ak ste sa v predchádzajúcom kroku rozhodli odosielať aj diagnostické údaje a údaje o využití, tieto údaje sa budú zhromažďovať pre nainštalované aplikácie.</translation> +<translation id="6108952804512516814">Vytvorenie pomocou umelej inteligencie</translation> <translation id="6111718295497931251">Odstrániť prístup k Disku Google</translation> <translation id="6111972606040028426">Aktivovať Asistenta Google</translation> <translation id="6112294629795967147">Klepnutím zmeníte veľkosť</translation> @@ -6651,6 +6667,7 @@ <translation id="6238982280403036866">Môže používať JavaScript</translation> <translation id="6239558157302047471">Znova načítať prvok &frame</translation> <translation id="6240821072888636753">Vždy sa opýtať</translation> +<translation id="6240964651812394252">Ak chcete používať Správcu hesiel so svojím operačným systémom, znova spustite Chrome a povoľte prístup k Správcovi hesiel v počítači. Po opätovnom spustení sa karty znova otvoria.</translation> <translation id="6241530762627360640">Prístup k informáciám o zariadeniach Bluetooth spárovaných s vaším systémom a objavovanie zariadení Bluetooth v blízkosti.</translation> <translation id="6241844896329831164">Rozšírenia, ktoré nepotrebujú prístup</translation> <translation id="6242574558232861452">Kontroluje sa súlad s pravidlami zabezpečenia vašej organizácie.</translation> @@ -7276,6 +7293,7 @@ <translation id="6761623907967804682">Dáta webov v zariadení nie sú povolené</translation> <translation id="6762833852331690540">Zapnuté</translation> <translation id="6762861159308991328">V nastaveniach aplikácie môžete zmeniť, ako sa odkazy otvárajú</translation> +<translation id="6764633064754857889">Odkaz na ukážku</translation> <translation id="676560328519657314">Vaše spôsoby platby v službe Google Pay</translation> <translation id="6766488013065406604">Prejsť do Správcu hesiel Google</translation> <translation id="6767566652486411142">Vybrať iný jazyk…</translation> @@ -8246,6 +8264,7 @@ <translation id="752098910262610337">Zobraziť skratky</translation> <translation id="7521430434164837205">Súbory Microsoft 365</translation> <translation id="7522255036471229694">Povedzte „Ok Google“</translation> +<translation id="7523112275619538890">Zdieľanie súborov a ďalšieho obsahu so zariadeniami v okolí</translation> <translation id="7523117833414447032">Pri čítaní veľkých písmen</translation> <translation id="7523585675576642403">Premenovanie profilu</translation> <translation id="7525067979554623046">Vytvoriť</translation> @@ -8414,6 +8433,7 @@ <translation id="7657090467145778067">Malé úspory</translation> <translation id="7657218410916651670"><ph name="BEGIN_LINK_GOOGLE" />Iné formy aktivity<ph name="END_LINK_GOOGLE" /> sa môžu ukladať do vášho účtu Google, keď sa doň prihlásite. Môžete ich kedykoľvek odstrániť.</translation> <translation id="7658239707568436148">Zrušiť</translation> +<translation id="7658727964021657194"><ph name="TILE_INDEX" />. nedávny motív vytvorený umelou inteligenciou</translation> <translation id="7659154729610375585">Naozaj chcete ukončiť režim inkognito?</translation> <translation id="7659336857671800422">Prejsť na sprievodcu ochranou súkromia</translation> <translation id="7659584679870740384">Nemáte oprávnenie používať toto zariadenie. Ak chcete získať povolenie na prihlásenie sa, kontaktujte správcu.</translation> @@ -8435,6 +8455,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Vráťte <ph name="DEVICE_TYPE" /> do {NUM_WEEKS} týždňa}few{Vráťte <ph name="DEVICE_TYPE" /> do {NUM_WEEKS} týždňov}many{Vráťte <ph name="DEVICE_TYPE" /> do {NUM_WEEKS} týždňa}other{Vráťte <ph name="DEVICE_TYPE" /> do {NUM_WEEKS} týždňov}}</translation> <translation id="7668423670802040666">V správcovi hesiel Google pre účet <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">Funkcie dostupnosti zjednodušujú používanie zariadenia. Ak chcete získať prístup k rýchlym nastaveniam, vyberte v dolnej časti obrazovky čas.</translation> +<translation id="7669620291129890197">Viditeľné pre vaše zariadenia</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{Nesprávny PIN. Zostáva posledný pokus.}few{Nesprávny PIN. Zostávajú # pokusy.}many{Nesprávny PIN. You have # attempts remaining.}other{Nesprávny PIN. Zostáva # pokusov.}}</translation> <translation id="7670434942695515800">Najlepší výkon získate, keď inovujete na najnovšiu verziu. Zálohovanie súborov sa odporúča v prípade, že inováciu nie je možné dokončiť. Keď sa začne, Linux sa vypne. Než budete pokračovať, uložte otvorené súbory. <ph name="LINK_START" />Ďalšie informácie<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Titulky</translation> @@ -8634,6 +8655,7 @@ <translation id="7807711621188256451">Vždy povoliť stránkam <ph name="HOST" /> prístup ku kamere</translation> <translation id="7810202088502699111">Na tejto stránke boli zablokované kontextové okná.</translation> <translation id="7810367892333449285">Formát vstupu by mal byť <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ adresa<ph name="LPA_2" />$<ph name="LPA_3" />nepovinný priraďovací identifikátor<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Vyskúšajte to znova alebo vyberte jeden z motívov nižšie vygenerovaných v minulosti.</translation> <translation id="7814458197256864873">&Kopírovať</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">Upraviť odkaz <ph name="SHORTCUT" /> na rozšírenie <ph name="EXTENSION_NAME" /></translation> @@ -8738,6 +8760,7 @@ <translation id="789722939441020330">Nepovoliť webom automaticky sťahovať viacero súborov</translation> <translation id="7897900149154324287">V budúcnosti nezabudnite v aplikácii Súbory vysunúť odnímateľné zariadenie skôr, ako ho odpojíte. Inak by ste mohli prísť o údaje.</translation> <translation id="7898725031477653577">Vždy prekladať</translation> +<translation id="7899324822972399722"><ph name="INDEX" />. z <ph name="A" /> obrázkov v štýle <ph name="B" /></translation> <translation id="7901405293566323524">Telefónne centrum</translation> <translation id="7903290522161827520">Hľadáte komponenty prehliadača? Prejdite na</translation> <translation id="7903429136755645827">Kliknutím prispôsobte ovládanie hry</translation> @@ -8999,6 +9022,7 @@ <translation id="8089547136368562137">Je chránené najlepšími technológiami Googlu</translation> <translation id="8090234456044969073">Čítať zoznam najčastejšie navštevovaných webov</translation> <translation id="8090513782447872344">Môžete sa sem kedykoľvek vrátiť a znova si to prečítať</translation> +<translation id="8090686009202681725">Vytvorenie motívu pomocou umelej inteligencie</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> nereaguje</translation> <translation id="8094536695728193970">Marhuľa</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Zálohujte na Disk Google. Jednoducho kedykoľvek obnovte svoje dáta alebo prejdite na iné zariadenie. Záloha obsahuje dáta aplikácií.<ph name="END_PARAGRAPH1" /> @@ -9015,6 +9039,7 @@ <translation id="8098616321286360457">Vyžaduje sa pripojenie k sieti</translation> <translation id="8100230553590752325">Používajte uložené heslá v ľubovoľnom zariadení</translation> <translation id="810068641062493918">Bol vybraný jazyk <ph name="LANGUAGE" /> Výber zrušte stlačením klávesa Hľadať a medzerníka.</translation> +<translation id="8100725874569949614"><ph name="INDEX" />. z <ph name="A" /> obrázkov s náladou <ph name="C" />.</translation> <translation id="8101409298456377967">Vytvárajte, ukladajte a spravujte svoje heslá, aby ste sa mohli jednoducho prihlasovať na weboch a v aplikáciách. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="810185532889603849">Vlastná farba</translation> <translation id="8101987792947961127">Pri ďalšom spustení sa bude vyžadovať funkcia Powerwash</translation> @@ -9024,6 +9049,7 @@ <translation id="8107015733319732394">Inštaluje sa Obchod Google Play na zariadení <ph name="DEVICE_TYPE" />. Môžete to chvíľu trvať.</translation> <translation id="810728361871746125">Rozlíšenie obrazovky</translation> <translation id="8109109153262930486">Predvolený avatar</translation> +<translation id="8109991406044913868">Motív vytvorený umelou inteligenciou</translation> <translation id="8110393529211831722">Odber je nainštalovaný iba v tomto zariadení a nesynchronizuje sa s inými zariadeniami vo vašom účte. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Sťahuje sa zoznam kontaktov…</translation> <translation id="8115139559594092084">Z vášho Disku Google</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 9aa88f16..28ca3e1f 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -71,7 +71,7 @@ <translation id="1056898198331236512">Ilani</translation> <translation id="1056980582064308040">Hatua ya kubadilisha mipangilio itazima kisha kuwasha mtandao pepe. Vifaa vinavyotumia mtandao pepe vitatenganishwa.</translation> <translation id="1058262162121953039">PUK</translation> -<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Weka PIN yako mpya. PIN lazima iwe angalau herufi moja na inaweza kujumuisha herufi za alfabeti, nambari na herufi zingine.}other{Weka PIN yako mpya. PIN lazima iwe angalau herufi # na inaweza kujumuisha herufi za alfabeti, nambari na herufi zingine.}}</translation> +<translation id="1059065096897445832">{MIN_PIN_LENGTH,plural, =1{Weka PIN yako mpya. PIN lazima iwe angalau herufi moja na inaweza kujumuisha herufi za alfabeti, namba na herufi zingine.}other{Weka PIN yako mpya. PIN lazima iwe angalau herufi # na inaweza kujumuisha herufi za alfabeti, namba na herufi zingine.}}</translation> <translation id="1059484610606223931">Itifaki ya Uhamishaji wa Maandishi yenye Viungo (HTTPS)</translation> <translation id="1059944192885972544">Imepata Vichupo <ph name="NUM" /> Vya '<ph name="SEARCH_TEXT" />'</translation> <translation id="1060292118287751956">Hubaini kasi ya kusasisha skrini</translation> @@ -154,7 +154,7 @@ <translation id="1116694919640316211">Kuhusu</translation> <translation id="1116779635164066733">Mipangilio hii inatekelezwa na kiendelezi cha "<ph name="NAME" />".</translation> <translation id="1118428905044642028">Manenosiri na Kujaza kiotomatiki</translation> -<translation id="1118738876271697201">Mfumo umeshindwa kutambua muundo wa kifaa wala nambari ya ufuatiliaji.</translation> +<translation id="1118738876271697201">Mfumo umeshindwa kutambua muundo wa kifaa wala namba ya ufuatiliaji.</translation> <translation id="1119447706177454957">Hitilafu ya ndani</translation> <translation id="1122068467107743258">Kazini</translation> <translation id="1122198203221319518">Zana</translation> @@ -1241,7 +1241,7 @@ <translation id="1935303383381416800">Zinazoruhusiwa kuona mahali ulipo</translation> <translation id="193565226207940518">Zana ya Usaidizi</translation> <translation id="1936157145127842922">Onyesha katika Folda</translation> -<translation id="1936931585862840749">Tumia nambari kuonyesha idadi ya nakala za kuchapisha (moja hadi <ph name="MAX_COPIES" />).</translation> +<translation id="1936931585862840749">Tumia namba kuonyesha idadi ya nakala za kuchapisha (moja hadi <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Haiwezi kupakia metadata ya aina ya usanifu wa<ph name="ARCHITECTURE_CONTAINER" /> kwa kutumia kifaa hiki ambacho ni <ph name="ARCHITECTURE_DEVICE" />. Unaweza kujaribu kurejesha metadata hii kwenye kifaa tofauti, au unaweza kufikia faili zilizo ndani ya picha ya metadata hii kwa kuzifungua katika programu ya Faili.</translation> <translation id="1938320257168860255">Hitilafu fulani imetokea. Hakikisha simu yako ipo karibu, imefunguliwa na umewasha Bluetooth pamoja na Wi-Fi.</translation> <translation id="1938351510777341717">Amri ya Nje</translation> @@ -1594,7 +1594,7 @@ <translation id="2199298570273670671">Hitilafu</translation> <translation id="2200094388063410062">Barua pepe</translation> <translation id="2200781749203116929">Kumbukumbu za Mfumo wa ChromeOS</translation> -<translation id="2203088913459920044">Jina linaweza kuwa na herufi, nambari na herufi maalum</translation> +<translation id="2203088913459920044">Jina linaweza kuwa na herufi, namba na herufi maalum</translation> <translation id="220321590587754225">Imeshindwa kuunganisha. Jaribu tena.</translation> <translation id="2203903197029773650"><ph name="BRAND" /> kinaweza kukagua manenosiri yako unapoingia katika akaunti ukitumia Akaunti yako ya Google</translation> <translation id="2204020417499639567">Sehemu ya barua pepe imejazwa.</translation> @@ -1784,7 +1784,7 @@ <translation id="2336228925368920074">Alamisha Vichupo Vyote...</translation> <translation id="2336381494582898602">Powerwash</translation> <translation id="2340239562261172947"><ph name="FILE_NAME" /> haiwezi kupakuliwa kwa usalama</translation> -<translation id="2342180549977909852">Mtoto wako anaweza kutumia nambari (PIN) badala ya nenosiri kufungua kifaa hiki. Ili uweze kuweka PIN baadaye, nenda kwenye Mipangilio.</translation> +<translation id="2342180549977909852">Mtoto wako anaweza kutumia namba (PIN) badala ya nenosiri kufungua kifaa hiki. Ili uweze kuweka PIN baadaye, nenda kwenye Mipangilio.</translation> <translation id="2342740338116612727">Imeongeza alamisho</translation> <translation id="2343747224442182863">Lenga Kichupo Hiki</translation> <translation id="2344032937402519675">Imeshindwa kuunganisha kwenye seva. Kagua muunganisho wako wa mtandao kisha ujaribu tena. Iwapo bado unatatizika, jaribu kuzima kisha uwashe Chromebook yako.</translation> @@ -2017,7 +2017,7 @@ <translation id="250704661983564564">Mpangilio wa skrini</translation> <translation id="2507253002925770350">Tiketi imeondolewa</translation> <translation id="2507491234071975894">Spika</translation> -<translation id="2509495747794740764">Lazima kiwango kiwe nambari kati ya 10 na 200.</translation> +<translation id="2509495747794740764">Lazima kiwango kiwe namba kati ya 10 na 200.</translation> <translation id="2509566264613697683">8x</translation> <translation id="2512065992892294946"><ph name="LANGUAGE" /> (umechagua)</translation> <translation id="2513396635448525189">Picha ya kuingia kwenye akaunti</translation> @@ -2929,7 +2929,7 @@ <translation id="3241680850019875542">Chagua saraka msingi ya kiendelezi ya kuweka kwenye furushi. Kusasisha kiendelezi, chagua pia ufunguo wa kibinafsi wa kutumia tena.</translation> <translation id="3242289508736283383">Programu iliyo na kipengee cha maelezo ya 'kiosk_only' lazima isakinishwe kwenye skrini nzima ya Mfumo wa Uendeshaji wa Chrome</translation> <translation id="3242665648857227438">Wasifu huu unatumia mipangilio ya seva mbadala ya Mfumo wa Uendeshaji wa Chrome.</translation> -<translation id="3243017971870859287">Kusoma nambari za ufuatiliaji wa kifaa na vipengele vya ChromeOS Flex</translation> +<translation id="3243017971870859287">Kusoma namba za ufuatiliaji wa kifaa na vipengele vya ChromeOS Flex</translation> <translation id="324366796737464147">Udhibiti wa kelele</translation> <translation id="3244294424315804309">Endelea kuzima sauti</translation> <translation id="3247649647204519958">Kutoka hapa, unaweza kuona na kudhibiti ruhusa za viendelezi katika tovuti uliyopo</translation> @@ -3358,7 +3358,7 @@ <translation id="360180734785106144">Kutoa vipengele vipya kadri vinavyopatikana</translation> <translation id="3602290021589620013">Hakiki</translation> <translation id="3602495161941872610">Rekebisha na usawazishe tatizo</translation> -<translation id="3602894439067790744">Soma nambari katika muundo wa</translation> +<translation id="3602894439067790744">Soma namba katika muundo wa</translation> <translation id="3603622770190368340">Pata cheti cha mtandao</translation> <translation id="3605156246402033687">{COUNT,plural, =1{Akaunti {COUNT} inatumia nenosiri moja}other{Akaunti {COUNT} zinatumia nenosiri moja}}</translation> <translation id="3605780360466892872">Kitufechini</translation> @@ -3485,8 +3485,8 @@ <translation id="3700888195348409686">Inawasilisha (<ph name="PAGE_ORIGIN" />)</translation> <translation id="3700993174159313525">Usiruhusu tovuti zifuatilie mkao wa kamera yako</translation> <translation id="3701515417135397388">Hukuonya endapo nenosiri limeathiriwa katika ufichuzi haramu wa data</translation> -<translation id="3702797829026927713"><ph name="BEGIN_PARAGRAPH1" />Weka jina la muuzaji wa rejareja na nambari ya duka ambayo inatumika kuweka mipangilio katika kifaa hiki cha toleo la kujaribu*. <ph name="END_PARAGRAPH1" /> - <ph name="BEGIN_PARAGRAPH2" />Iwapo hujui nambari ya duka, unaweza kuweka "0000" ili uendelee na hatua ya kuweka Hali ya Onyesho. <ph name="END_PARAGRAPH2" /> +<translation id="3702797829026927713"><ph name="BEGIN_PARAGRAPH1" />Weka jina la muuzaji wa rejareja na namba ya duka ambayo inatumika kuweka mipangilio katika kifaa hiki cha toleo la kujaribu*. <ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Iwapo hujui namba ya duka, unaweza kuweka "0000" ili uendelee na hatua ya kuweka Hali ya Onyesho. <ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />*Kumbuka: Google hutumia maelezo haya ili kutambua aina ya toleo la Hali ya Onyesho ambalo kifaa kinapaswa kupokea na kupima matumizi ya Hali ya Onyesho.<ph name="END_PARAGRAPH3" /></translation> <translation id="3703166520839776970">Iwapo hitilafu hii itaendelea kutokea, chagua "Maelezo zaidi" hapa chini ili upate maelezo zaidi kutoka <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" />.</translation> <translation id="3703699162703116302">Imeonyesha tiketi upya</translation> @@ -4432,7 +4432,7 @@ <translation id="4426508677408162512">Alamisho Zote</translation> <translation id="4426513927906544654">Pata mapendekezo ya maudhui</translation> <translation id="4427306783828095590">Kipengele cha ulinzi wa hali ya juu hufanya mengi zaidi ili kuzuia programu hasidi na wizi wa data binafsi</translation> -<translation id="4427365070557649936">Inahakikisha nambari ya kuthibitisha...</translation> +<translation id="4427365070557649936">Inahakikisha namba ya kuthibitisha...</translation> <translation id="4429163740524851942">Mpangilio wa kibodi halisi</translation> <translation id="4430019312045809116">Kiwango cha sauti</translation> <translation id="443031431654216610">Tumia tarakimu pekee</translation> @@ -4720,7 +4720,7 @@ <translation id="4660476621274971848">Ilitarajia toleo la "<ph name="EXPECTED_VERSION" />", lakini ilipata toleo la "<ph name="NEW_ID" />"</translation> <translation id="4660540330091848931">Inabadilisha ukubwa</translation> <translation id="4661407454952063730">Data ya programu inaweza kuwa data yoyote ambayo imehifadhiwa na programu (kulingana na mipangilio ya msanidi programu), ikiwa ni pamoja na data kama vile anwani, ujumbe na picha.</translation> -<translation id="4662373422909645029">Jina la kuwakilisha halipaswi kuwa na nambari</translation> +<translation id="4662373422909645029">Jina la kuwakilisha halipaswi kuwa na namba</translation> <translation id="4662788913887017617">Shiriki alamisho hii na iPhone yako</translation> <translation id="4663373278480897665">Kamera imeruhusiwa</translation> <translation id="4664482161435122549">Hitilafu ya Kuhamisha ya PKCS #12</translation> @@ -4975,7 +4975,7 @@ <translation id="4870758487381879312">Weka nenosiri lililotolewa na msimamizi ili upate maelezo ya mipangilio</translation> <translation id="4870995365819149457">Baadhi ya viungo vinavyotumika bado vitafunguka kwenye <ph name="APP_NAME" />, <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" /> na programu nyingine moja.</translation> <translation id="4871308555310586478">Haijatoka kwenye Duka la Wavutini la Chrome.</translation> -<translation id="4871322859485617074">PIN ina nambari zisizo sahihi</translation> +<translation id="4871322859485617074">PIN ina namba zisizo sahihi</translation> <translation id="4871370605780490696">Ongeza alamisho</translation> <translation id="4871568871368204250">Zima usawazishaji</translation> <translation id="4871719318659334896">Funga kikundi</translation> @@ -5182,7 +5182,7 @@ <translation id="5040262127954254034">Faragha</translation> <translation id="5040823038948176460">Mipangilio ya ziada ya maudhui</translation> <translation id="5041509233170835229">Programu ya Chrome</translation> -<translation id="5043440033854483429">Jina linaweza kuwa na herufi, nambari na vistariungio (-) na ni lazima liwe na kati na herufi 1 na 15 kwa jumla.</translation> +<translation id="5043440033854483429">Jina linaweza kuwa na herufi, namba na vistariungio (-) na ni lazima liwe na kati na herufi 1 na 15 kwa jumla.</translation> <translation id="5043807571255634689"><ph name="SUBSCRIPTION_NAME" /> utaondolewa kwenye kifaa hiki tu. Ili ufanye mabadiliko ya usajili wako, wasiliana na mtoa huduma ya usajili. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation> <translation id="5045367873597907704">Kuhusu vifaa vya HID</translation> <translation id="5045550434625856497">Nenosiri lisilo sahihi</translation> @@ -5478,7 +5478,7 @@ <translation id="5280426389926346830">Ungependa Kuweka Njia ya Mkato?</translation> <translation id="5281013262333731149">Hufunguka katika: <ph name="OPEN_BROWSER" /></translation> <translation id="528208740344463258">Ili upakue na utumie programu za Android, unatakiwa kwanza usakinishe sasisho hili linalohitajika. Wakati unasasisha <ph name="DEVICE_TYPE" /> yako, huwezi kuitumia. Baada ya kumaliza kuisakinisha, <ph name="DEVICE_TYPE" /> yako itazima kisha iwake upya.</translation> -<translation id="5283677936944177147">Lo! Mfumo haukuweza kutambua muundo wa kifaa wala nambari ya ufuatiliaji.</translation> +<translation id="5283677936944177147">Lo! Mfumo haukuweza kutambua muundo wa kifaa wala namba ya ufuatiliaji.</translation> <translation id="5284445933715251131">Endelea Kupakua</translation> <translation id="5285635972691565180">Onyesho <ph name="DISPLAY_ID" /></translation> <translation id="5286194356314741248">Inachanganua</translation> @@ -5744,7 +5744,7 @@ <translation id="5496730470963166430">Zisizoruhusiwa kutuma madirisha ibukizi wala kukuelekeza kwingine</translation> <translation id="5497251278400702716">Faili hii</translation> <translation id="5497739595514726398">Chrome imeshindwa kuthibitisha kifurushi hiki cha usakinishaji</translation> -<translation id="5498967291577176373">Andika haraka ukitumia mapendekezo yanayolingana na maandishi ya anwani, nambari ya simu au jina lako</translation> +<translation id="5498967291577176373">Andika haraka ukitumia mapendekezo yanayolingana na maandishi ya anwani, namba ya simu au jina lako</translation> <translation id="5499211612787418966">Kidirisha hiki hakijaangaziwa kwa sasa. Bonyeza Alt-Shift na herufi A ili uangazie kidirisha hiki.</translation> <translation id="5499313591153584299">Faili hii inaweza kudhuru kompyuta yako.</translation> <translation id="5499453227627332024">Toleo jipya la Metadata yako ya Linux linapatikana. Unaweza pia kusasisha baadaye kwenye programu ya Mipangilio.</translation> @@ -5780,7 +5780,7 @@ <translation id="5522403133543437426">Mtambo wa kutafuta uliotumiwa kwenye sehemu ya anwani.</translation> <translation id="5523149538118225875">{NUM_EXTENSIONS,plural, =1{Kiendelezi kimesakinishwa na msimamizi wako}other{Viendelezi # vimesakinishwa na msimamizi wako}}</translation> <translation id="5523532775593636291">Tovuti unazoweka zitaendelea kutumika kila wakati na hifadhi haitarejeshwa kutoka katika tovuti hizo</translation> -<translation id="5523558474028191231">Jina linaweza kuwa na herufi, nambari na herufi maalum na ni lazima liwe na herufi <ph name="MAX_CHARACTER_COUNT" /> au chache</translation> +<translation id="5523558474028191231">Jina linaweza kuwa na herufi, namba na herufi maalum na ni lazima liwe na herufi <ph name="MAX_CHARACTER_COUNT" /> au chache</translation> <translation id="5526701598901867718">Zote (si salama)</translation> <translation id="5526745900034778153">Ingia tena katika akaunti ili uendelee kusawazisha</translation> <translation id="5527463195266282916">Alijaribu kushusha kiwango cha kiendelezi.</translation> @@ -5792,7 +5792,7 @@ <translation id="5533001281916885985"><ph name="SITE_NAME" /> inataka</translation> <translation id="5537725057119320332">Tuma</translation> <translation id="5539070192556911367">Imeshindwa kuifikia Google</translation> -<translation id="5539221284352502426">Nenosiri uliloweka limekataliwa na seva. Hali hii inaweza kusababishwa na: Nenosiri kuwa fupi mno. Nenosiri lazima lijumuishe nambari na ishara. Nenosiri lazima liwe tofauti na manenosiri ya awali.</translation> +<translation id="5539221284352502426">Nenosiri uliloweka limekataliwa na seva. Hali hii inaweza kusababishwa na: Nenosiri kuwa fupi mno. Nenosiri lazima lijumuishe namba na ishara. Nenosiri lazima liwe tofauti na manenosiri ya awali.</translation> <translation id="5541694225089836610">Kitendo kimezimwa na msimamizi wako</translation> <translation id="5542132724887566711">Wasifu</translation> <translation id="5542750926112347543">Vidakuzi kutoka <ph name="DOMAIN" /> vimezuiwa</translation> @@ -6442,7 +6442,7 @@ <translation id="6073292342939316679">kupunguza mwangaza wa kibodi</translation> <translation id="6073451960410192870">Acha kurekodi</translation> <translation id="6073903501322152803">Ongeza vipengele vya zana za walio na matatizo ya kuona au kusikia</translation> -<translation id="6075075631258766703">Thibitisha nambari ya simu</translation> +<translation id="6075075631258766703">Thibitisha namba ya simu</translation> <translation id="6075731018162044558">Lo! Mfumo umeshindwa kupata tokeni ya ufikiaji wa API ya muda mrefu kwa kifaa hiki.</translation> <translation id="6075907793831890935">Badilisha data kwa kifaa kiitwacho <ph name="HOSTNAME" /></translation> <translation id="6076175485108489240">Tumia huduma za mahali. Ruhusu programu na huduma zenye ruhusa ya mahali zitumie data ya mahali kilipo kifaa chako. Google inaweza kukusanya data ya mahali mara moja moja na kutumia data hii kwa njia ambayo haikutambulishi ili kuboresha usahihi wa mahali na huduma zinazohusiana na mahali. <ph name="BEGIN_LINK1" />Pata Maelezo Zaidi<ph name="END_LINK1" /></translation> @@ -6849,7 +6849,7 @@ <translation id="6399675241776343019">Imekataliwa</translation> <translation id="6399774419735315745">Jasusi</translation> <translation id="6400360390396538896">Kila wakati kwenye <ph name="ORIGIN" /></translation> -<translation id="6401118106417399952">Nambari ya EID ya kifaa chako ni <ph name="EID_NUMBER" /> na nambari ya ufuatiliaji ya kifaa ni <ph name="SERIAL_NUMBER" />. Nambari hizi zinaweza kutumika ili kusaidia kuanzisha huduma.</translation> +<translation id="6401118106417399952">Nambari ya EID ya kifaa chako ni <ph name="EID_NUMBER" /> na namba ya ufuatiliaji ya kifaa ni <ph name="SERIAL_NUMBER" />. Nambari hizi zinaweza kutumika ili kusaidia kuanzisha huduma.</translation> <translation id="6401458660421980302">Ili utume kichupo hiki kwenda kwenye kifaa kingine, ingia katika Chrome kwenye kifaa hicho</translation> <translation id="6401597285454423070">Kompyuta yako ina kifaa cha usalama cha Sehemu ya Mfumo Unaoaminika (TPM), ambacho kinatumiwa kutekeleza vipengele vingi muhimu vya usalama kwenye Mfumo wa Uendeshaji wa Chrome. Tembelea Kituo cha Usaidizi cha Chromebook ili upate malezo zaidi: https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404511346730675251">Badilisha alamisho</translation> @@ -6860,7 +6860,7 @@ <translation id="6408118934673775994">Kusoma na kubadilisha data yako kwenye <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> na <ph name="WEBSITE_3" /></translation> <translation id="6410257289063177456">Faili za Picha</translation> <translation id="6410328738210026208">Badilisha kituo na Powerwash</translation> -<translation id="6410390304316730527">Kipengele cha Kuvinjari Salama hukulinda dhidi ya washambulizi ambao wanaweza kukulaghai ufanye kitu hatari kama vile kusakinisha programu hasidi au kufichua taarifa binafsi kama vile manenosiri, nambari za simu au kadi za mikopo. Ukikizima, kuwa makini unapovinjari tovuti zisizo za kawaida au zisizo na sifa nzuri.</translation> +<translation id="6410390304316730527">Kipengele cha Kuvinjari Salama hukulinda dhidi ya washambulizi ambao wanaweza kukulaghai ufanye kitu hatari kama vile kusakinisha programu hasidi au kufichua taarifa binafsi kama vile manenosiri, namba za simu au kadi za mikopo. Ukikizima, kuwa makini unapovinjari tovuti zisizo za kawaida au zisizo na sifa nzuri.</translation> <translation id="6410668567036790476">Ongeza mtambo wa kutafuta</translation> <translation id="6411135999030237579">Bonyeza na ushikilie ili urudie kitufe kiotomatiki</translation> <translation id="6414618057231176439">Chagua toleo la <ph name="VM_NAME" /> la kusakinisha.</translation> @@ -7013,7 +7013,7 @@ <translation id="65334502113648172">Bonyeza vitufe vya vishale ili upunguze au upanue eneo la skrini. Ili uhamishe eneo la skrini, bonyeza "shift" na +, kisha utumie vitufe vya vishale.</translation> <translation id="6535331821390304775">Ruhusu <ph name="ORIGIN" /> ifungue viungo vya aina hii kwenye programu inayohusiana kila wakati</translation> <translation id="653659894138286600">Changanua hati na picha</translation> -<translation id="6537613839935722475">Jina linaweza kuwa na herufi, nambari na vistariungio. (-)</translation> +<translation id="6537613839935722475">Jina linaweza kuwa na herufi, namba na vistariungio. (-)</translation> <translation id="6538098297809675636">Hitilafu imetokea wakati wa kutambua msimbo</translation> <translation id="653920215766444089">Inatafuta vifaa vinavyosogeza kishale</translation> <translation id="6539674013849300372">Kuwa salama mtandaoni kwa kutumia nenosiri thabiti. Litahifadhiwa kwenye <ph name="GOOGLE_PASSWORD_MANAGER" /> kwa ajili ya <ph name="EMAIL" />.</translation> @@ -7896,7 +7896,7 @@ <translation id="7250616558727237648">Kifaa unachoshiriki nacho hakijakubali. Tafadhali jaribu tena.</translation> <translation id="725109152065019550">Samahani, msimamizi wako amelemaza hifadhi ya nje kwenye akaunti yako.</translation> <translation id="7251635775446614726">Msimamizi wako anasema: "<ph name="CUSTOM_MESSAGE" />"</translation> -<translation id="7251979364707973467"><ph name="WEBSITE" /> ilikupa ufunguo wako wa usalama na ingependa kujua nambari yake ya kitambulisho. Tovuti hii itajua ufunguo halisi wa usalama unaotumia.</translation> +<translation id="7251979364707973467"><ph name="WEBSITE" /> ilikupa ufunguo wako wa usalama na ingependa kujua namba yake ya kitambulisho. Tovuti hii itajua ufunguo halisi wa usalama unaotumia.</translation> <translation id="7252023374029588426">Mfululizo wa viputo vya mafunzo vyenye maagizo vitaonyeshwa. Bonyeza |<ph name="ACCELERATOR" />| ili uangazie kiputo, kisha bonyeza tena ili kuangazia kipengee kinacholengwa na kiputo hiki.</translation> <translation id="7253521419891527137">&Pata Maelezo Zaidi</translation> @@ -8216,7 +8216,7 @@ <translation id="7490683549040131791">Kagua Manenosiri Yaliyosalia</translation> <translation id="7491962110804786152">kichupo</translation> <translation id="7491963308094506985">{NUM_COOKIES,plural, =1{Kidakuzi kimoja}other{Vidakuzi {NUM_COOKIES}}}</translation> -<translation id="7493386493263658176">Huenda kiendelezi cha <ph name="EXTENSION_NAME" /> kikahifadhi maandishi yote unayocharaza, ikiwemo data ya kibinafsi kama vile manenosiri na nambari za kadi za mikopo. Je, ungependa kutumia kiendelezi hiki?</translation> +<translation id="7493386493263658176">Huenda kiendelezi cha <ph name="EXTENSION_NAME" /> kikahifadhi maandishi yote unayocharaza, ikiwemo data ya kibinafsi kama vile manenosiri na namba za kadi za mikopo. Je, ungependa kutumia kiendelezi hiki?</translation> <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495149565104413027">Programu ya Android</translation> <translation id="7495778526395737099">Umesahau nenosiri lako la zamani?</translation> @@ -8318,7 +8318,7 @@ <translation id="7576690715254076113">Kusanya</translation> <translation id="7576976045740938453">Hitilafu imetokea kwenye akaunti ya hali ya onyesho.</translation> <translation id="7578137152457315135">Mipangilio ya alama ya kidole</translation> -<translation id="7578692661782707876">Tafadhali weka nambari yako ya kuthibitisha.</translation> +<translation id="7578692661782707876">Tafadhali weka namba yako ya kuthibitisha.</translation> <translation id="7581007437437492586">Mipangilio ya sera iliyowekwa kwa usahihi</translation> <translation id="7581462281756524039">Zana ya kusafisha</translation> <translation id="7582582252461552277">Pendelea mtandao huu</translation> @@ -8333,7 +8333,7 @@ <translation id="7593653750169415785">Imezuiwa kiotomatiki kwa sababu ulikataa arifa mara kadhaa.</translation> <translation id="7594725637786616550">Tumia Powerwash ili uweke upya <ph name="DEVICE_TYPE" /> yako.</translation> <translation id="7595453277607160340">Ili utumie programu za Android na uendelee kutumia <ph name="DEVICE_TYPE" /> yako bila matatizo, ingia tena katika akaunti na usasishe.</translation> -<translation id="7595547011743502844"><ph name="ERROR" /> (hitilafu ya nambari ya kuthibitisha <ph name="ERROR_CODE" />).</translation> +<translation id="7595547011743502844"><ph name="ERROR" /> (hitilafu ya namba ya kuthibitisha <ph name="ERROR_CODE" />).</translation> <translation id="7599527631045201165">Jina la kifaa ni ndefu mno. Weka jina fupi ili ujaribu tena.</translation> <translation id="7600054753482800821">&Dhibiti mitambo ya kutafuta na utafutaji kwenye tovuti</translation> <translation id="7600965453749440009">Kamwe usitafsiri <ph name="LANGUAGE" /></translation> @@ -8392,7 +8392,7 @@ <translation id="7637272932128132922">Kichupo hiki kilipokuwa hakitumiki, Kiokoa Hifadhi kilirejesha hifadhi kwa ajili ya shughuli nyingine. Unaweza kubadilisha hali hii wakati wowote katika <ph name="SETTINGS_LINK" />.</translation> <translation id="7637593984496473097">Nafasi ya hifadhi kwenye diski haitoshi</translation> <translation id="7639914187072011620">Imeshindwa kuleta kiungo kinachoelekeza kwingine cha SAML kutoka kwenye seva</translation> -<translation id="7640256527901510478">IMEI ya kifaa chako ni <ph name="IMEI_NUMBER" /> na nambari ya ufuatiliaji ya kifaa ni <ph name="SERIAL_NUMBER" />. Nambari hizi zinaweza kutumika ili kusaidia kuanzisha huduma.</translation> +<translation id="7640256527901510478">IMEI ya kifaa chako ni <ph name="IMEI_NUMBER" /> na namba ya ufuatiliaji ya kifaa ni <ph name="SERIAL_NUMBER" />. Nambari hizi zinaweza kutumika ili kusaidia kuanzisha huduma.</translation> <translation id="7640308610547854367">Umerejesha toleo la awali la ChromeOS. Ili upate masasisho, subiri hadi toleo linalofuata litakapopatikana.</translation> <translation id="7641513591566880111">Jina jipya la wasifu</translation> <translation id="764178579712141045">Umeongeza <ph name="USER_EMAIL" /></translation> @@ -8831,7 +8831,7 @@ <translation id="7955105108888461311">Omba idhini mwenyewe</translation> <translation id="7955177647836564772">Huhitaji kuweka nenosiri au PIN, ikiwa kipengele cha Smart Lock kimewashwa na simu yako imefunguliwa</translation> <translation id="7956373551960864128">Printa ulizohifadhi</translation> -<translation id="7957074856830851026">Kuona maelezo ya kifaa, kama vile nambari ya ufuatiliaji au kitambulisho cha kipengee</translation> +<translation id="7957074856830851026">Kuona maelezo ya kifaa, kama vile namba ya ufuatiliaji au kitambulisho cha kipengee</translation> <translation id="7958157896921135832">Ongeza ukubwa wa fonti</translation> <translation id="7958828865373988933">Iwapo unataka kubuni ufunguo wa siri wa <ph name="APP_NAME" /> kwenye ufunguo wa usalama wa USB, uweke na uuguse sasa</translation> <translation id="7959074893852789871">Faili ina vyeti anuwai, badhii ya vingine ambavyo havikuletwa:</translation> @@ -9099,7 +9099,7 @@ <translation id="8163152278172770963">Usiruhusu tovuti kutumia kipengele cha kupachika picha ndani ya picha nyingine kiotomatiki</translation> <translation id="8163708146810922598">za zamani zaidi</translation> <translation id="8165997195302308593">Kusambaza mlango kwingine kwenye Crostini</translation> -<translation id="816704878106051517">{COUNT,plural, =1{nambari ya simu}other{Nambari # za simu}}</translation> +<translation id="816704878106051517">{COUNT,plural, =1{namba ya simu}other{Nambari # za simu}}</translation> <translation id="8168435359814927499">Maudhui</translation> <translation id="8169165065843881617">{NUM_TABS,plural, =1{Ongeza Kichupo kwenye Orodha ya Kusoma}other{Ongeza Vichupo kwenye Orodha ya Kusoma}}</translation> <translation id="8171334254070436367">Ficha kadi zote</translation> @@ -9121,7 +9121,7 @@ <translation id="8184288427634747179">Badilisha utumie <ph name="AVATAR_NAME" /></translation> <translation id="8184318863960255706">Maelezo zaidi</translation> <translation id="8184472985242519288">Kingo sawa</translation> -<translation id="8186047833733689201">Menyu ya alama za kiinitoni imefunguliwa. Bonyeza kushoto, kulia, au vitufe vya nambari ili usogeze na enter ili kuweka.</translation> +<translation id="8186047833733689201">Menyu ya alama za kiinitoni imefunguliwa. Bonyeza kushoto, kulia, au vitufe vya namba ili usogeze na enter ili kuweka.</translation> <translation id="8186609076106987817">Seva hii haikuweza kupata faili.</translation> <translation id="8188389033983459049">Angalia mipangilio ya kifaa chako na uiwashe ili uendelee</translation> <translation id="8188742492803591566">Weka msimbo wa kufikia uliooneshwa katika Chromecast au Televisheni ili uanze kutuma maudhui ya kwenye skrini yako.</translation> @@ -9394,7 +9394,7 @@ <translation id="8393511274964623038">Simamisha programu jalizi</translation> <translation id="839363317075970734">Maelezo ya kifaa chenye Bluetooth</translation> <translation id="8393700583063109961">Tuma ujumbe</translation> -<translation id="8394212467245680403">Inayojumuisha herufi na nambari</translation> +<translation id="8394212467245680403">Inayojumuisha herufi na namba</translation> <translation id="8394908167088220973">Cheza Media/Sitisha</translation> <translation id="8396098434728053815">Pia shiriki sauti ya kichupo</translation> <translation id="8397825320644530257">Tenganisha simu iliyounganishwa</translation> @@ -9655,7 +9655,7 @@ <translation id="8624315169751085215">Nakili kwenye Ubao wa Kunakili</translation> <translation id="8624354461147303341">Pata punguzo</translation> <translation id="8624944202475729958"><ph name="PROFILE_NAME" />: <ph name="ERROR_DESCRIPTION" /></translation> -<translation id="8625124982056504555">Kusoma nambari za ufuatiliaji za kifaa na vipengele vinavyotumia Mfumo wa Uendeshaji wa Chrome</translation> +<translation id="8625124982056504555">Kusoma namba za ufuatiliaji za kifaa na vipengele vinavyotumia Mfumo wa Uendeshaji wa Chrome</translation> <translation id="862542460444371744">Vi&endelezi</translation> <translation id="8625663000550647058">Zisizoruhusiwa kutumia maikrofoni yako</translation> <translation id="8625916342247441948">Usiruhusu tovuti ziunganishe kwenye vifaa vya HID</translation> @@ -9920,11 +9920,11 @@ <translation id="8814190375133053267">Wi-Fi</translation> <translation id="8814319344131658221">Lugha zinazoweza kutumia kikagua maendelezo zinategemea mapendeleo yako ya lugha</translation> <translation id="8814644416678422095">Diski Kuu</translation> -<translation id="881782782501875829">Weka nambari ya mlango</translation> +<translation id="881782782501875829">Weka namba ya mlango</translation> <translation id="881799181680267069">Ficha Zinginezo</translation> <translation id="8818152010000655963">Mandhari</translation> <translation id="8818958672113348984">Thibitisha kupitia simu yako ya mkononi</translation> -<translation id="8819510664278523111">Nambari ya EID ya kifaa chako ni <ph name="EID_NUMBER" /> , IMEI ya kifaa ni <ph name="IMEI_NUMBER" /> na nambari ya ufuatiliaji ya kifaa ni <ph name="SERIAL_NUMBER" />. Nambari hizi zinaweza kutumika ili kusaidia kuanzisha huduma.</translation> +<translation id="8819510664278523111">Nambari ya EID ya kifaa chako ni <ph name="EID_NUMBER" /> , IMEI ya kifaa ni <ph name="IMEI_NUMBER" /> na namba ya ufuatiliaji ya kifaa ni <ph name="SERIAL_NUMBER" />. Nambari hizi zinaweza kutumika ili kusaidia kuanzisha huduma.</translation> <translation id="8820817407110198400">Alamisho</translation> <translation id="8821045908425223359">Weka mipagilio ya anwani ya IP kiotomatiki</translation> <translation id="8821268776955756404"><ph name="APP_NAME" /> iko tayari kutumika.</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 7b9c9fd..d705d54 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -277,6 +277,7 @@ <translation id="1203559206734265703">ప్రొటెక్టెడ్ ఆడియన్స్ డీబగ్గింగ్ ఫీచర్ ఆన్ చేయబడింది.</translation> <translation id="120368089816228251">సంగీత స్వరం</translation> <translation id="1203942045716040624">షేర్ చేయబడిన వర్కర్: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">ప్రివ్యూ లింక్</translation> <translation id="1206832039833782423">మీ సెక్యూరిటీ కోడ్ మీ కార్డ్ వెనుక భాగంలో ఉంది</translation> <translation id="1210678701920254279">ప్రింటర్లను చూడటం లేదా జోడించడంతో పాటు యాక్టివ్ ప్రింట్ టాస్క్లను చూడండి</translation> <translation id="1211769675100312947">షార్ట్కట్లు మీ సందర్శనల ఆధారంగా నిర్వహించబడతాయి</translation> @@ -616,6 +617,7 @@ <translation id="1478340334823509079">వివరాలు: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">ఇన్స్టాలేషన్ ప్రారంభించబడలేదు</translation> <translation id="1480663089572535854">"తర్వాత" కోసం అసైన్ చేసిన స్విచ్ను మార్చడానికి మీరు వెనుకకు వెళ్లచ్చు. మీరు సెట్టింగ్లలో ఎప్పుడైనా ఆటో-స్కాన్ను ఆఫ్ చేయవచ్చు.</translation> +<translation id="1481001611315487791">AIతో రూపాలను క్రియేట్ చేయడం గురించి మరింత తెలుసుకోండి.</translation> <translation id="1481537595330271162">డిస్క్ పరిమాణాన్ని మార్చడంలో ఎర్రర్ ఏర్పడింది</translation> <translation id="1482626744466814421">ఈ ట్యాబ్ను బుక్మార్క్ చేయండి...</translation> <translation id="1482772681918035149">పాస్వర్డ్లను ఎడిట్ చేయండి</translation> @@ -810,6 +812,7 @@ <translation id="1615433306336820465">మీ సెక్యూరిటీ కీలో స్టోర్ చేసి ఉన్న సైన్-ఇన్ డేటాను మేనేజ్ చేయండి</translation> <translation id="1616206807336925449">ఈ ఎక్స్టెన్షన్కు ప్రత్యేక అనుమతులు ఏవీ అవసరం లేదు.</translation> <translation id="1616298854599875024">ఇది షేర్ చేసిన మాడ్యూల్ కానందున ఎక్స్టెన్షన్ "<ph name="IMPORT_NAME" />"ను దిగుమతి చేయడం సాధ్యపడలేదు</translation> +<translation id="161654560322394775"><ph name="B" /> స్టయిల్లో, <ph name="C" /> మూడ్తో <ph name="A" />లో <ph name="INDEX" />వ ఇమేజ్.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ డేటాను చెక్ చేస్తోంది...}=1{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ ఫైల్ను చెక్ చేస్తోంది...}other{మీ సంస్థకు చెందిన భద్రతా పాలసీలతో ఈ ఫైల్స్ను చెక్ చేస్తోంది...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">స&హాయ కేంద్రం</translation> @@ -1515,6 +1518,7 @@ <translation id="2140902257485550046">ఈ సైట్లోని అన్ని ఎక్స్టెన్షన్లను బ్లాక్ చేయడానికి ఎంచుకోండి</translation> <translation id="2142328300403846845">లింక్ను దీని తరపున తెరువు</translation> <translation id="2142582065325732898">ఇటీవలి Chrome ట్యాబ్లను చూడటానికి, <ph name="LINK1_BEGIN" />Chrome సింక్<ph name="LINK1_END" />ను ఆన్ చేయండి. <ph name="LINK2_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">కొన్ని కాంటాక్ట్లకు కనిపిస్తుంది</translation> <translation id="2143667386128949432">{COUNT,plural, =0{మళ్లీ ఇవాళ Chrome, కుక్కీలను బ్లాక్ చేస్తుంది}=1{మళ్లీ రేపు Chrome, కుక్కీలను బ్లాక్ చేస్తుంది}other{కుక్కీలు # రోజులలో మళ్లీ బ్లాక్ చేయబడతాయి}}</translation> <translation id="2143765403545170146">ఫుల్-స్క్రీన్లో ఎల్లప్పుడూ సాధన బార్ను చూపు</translation> <translation id="2143778271340628265">మాన్యువల్ ప్రాక్సీ కాన్ఫిగరేషన్</translation> @@ -1702,6 +1706,7 @@ <translation id="2291452790265535215">బుక్మార్క్లు, బ్రౌజింగ్ జర్నీ, ఇంకా మరిన్నింటి కోసం సైడ్ ప్యానెల్ను ఉపయోగించడానికి ట్రై చేయండి</translation> <translation id="229182044471402145">మ్యాచ్ అయ్యే ఫాంట్ ఏదీ కనుగొనబడలేదు.</translation> <translation id="2292848386125228270">దయచేసి సాధారణ వినియోగదారుగా <ph name="PRODUCT_NAME" />ను ప్రారంభించండి. డెవలపర్గా వాడటానికి మీరు రూట్ లాగా అమలు చేయాలనుకుంటే, --no-sandbox ఫ్లాగ్తో మళ్లీ అమలు చేయండి.</translation> +<translation id="2292862094862078674">మీ ఇంటర్నెట్ను చెక్ చేసి, మళ్లీ ట్రై చేయండి. మీరు ఇప్పటికీ గతంలో రూపొందించిన రూపాలలో ఒక దాని నుండి దిగువున ఎంచుకోవచ్చు.</translation> <translation id="2294081976975808113">స్క్రీన్ గోప్యత</translation> <translation id="2294358108254308676">మీరు <ph name="PRODUCT_NAME" />ను ఇన్స్టాల్ చేయాలనుకుంటున్నారా?</translation> <translation id="229477815107578534">మీ సెట్టింగ్లను రివ్యూ చేయండి</translation> @@ -3041,6 +3046,7 @@ <translation id="3325804108816646710">అందుబాటులో ఉన్న ప్రొఫైళ్ల కోసం వెతుకుతోంది...</translation> <translation id="3325910708063135066">Mac సిస్టమ్ ప్రాధాన్యతలలో కెమెరా మరియు మైక్రోఫోన్ ఆపివేయబడతాయి</translation> <translation id="3325930488268995856">Microsoft OneDrive కనెక్ట్ అయింది</translation> +<translation id="3325995804968971809">స్టయిల్</translation> <translation id="3327050066667856415">Chromebooks భద్రత కోసం రూపొందించబడ్డాయి. మీ పరికరం ఆటోమేటిక్గా మాల్వేర్ నుండి రక్షించబడుతుంది - అదనపు సాఫ్ట్వేర్ అవసరం లేదు.</translation> <translation id="3328489342742826322">బ్యాకప్ నుండి పునరుద్ధరించడం వలన మీ Linux ఫైళ్ల ఫోల్డర్లో ప్రస్తుతం ఉన్న Linux అప్లికేషన్లు, డేటా తొలగించబడతాయి.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3225,6 +3231,7 @@ <translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> క్షణాలలో <ph name="ALTERNATIVE_BROWSER_NAME" />లో తెరవబోతోంది</translation> <translation id="348268549820508141">స్పీచ్ రికగ్నిషన్</translation> <translation id="3482719661246593752"><ph name="ORIGIN" />, కింద ఉన్న ఫైళ్లను చూడగలదు</translation> +<translation id="3484595034894304035">వాల్పేపర్, స్క్రీన్ సేవర్, ముదురు రంగు రూపం, ఇంకా మరిన్నింటిని వ్యక్తిగతీకరించండి</translation> <translation id="3484869148456018791">కొత్త ప్రమాణపత్రాన్ని పొందండి</translation> <translation id="3486950712960783074">మీ ట్రిప్</translation> <translation id="3487007233252413104">అజ్ఞాత కార్యాచరణ</translation> @@ -3317,6 +3324,7 @@ <translation id="3561201631376780358">అన్ని బుక్మార్క్లను చూడటానికి సైడ్ ప్యానెల్ను తెరవండి</translation> <translation id="3562423906127931518">ఈ ప్రక్రియకు కొద్ది నిమిషాలు పట్టవచ్చు. Linux కంటెయినర్ని సెటప్ చేస్తోంది.</translation> <translation id="3562655211539199254">మీ ఫోన్ నుండి ఇటీవలి Chrome ట్యాబ్లను చూడండి</translation> +<translation id="3563392617245068355">మూడ్</translation> <translation id="3563432852173030730">కియోస్క్ అప్లికేషన్ను డౌన్లోడ్ చేయడం సాధ్యపడలేదు.</translation> <translation id="3563558822383875692">DLCని కాన్ఫిగర్ చేస్తోంది.</translation> <translation id="3564334271939054422">మీరు ఉపయోగిస్తున్న Wi-Fi నెట్వర్క్కు (<ph name="NETWORK_ID" />) మీరు దాని లాగిన్ పేజీని సందర్శించడం అవసరం.</translation> @@ -4200,6 +4208,7 @@ <translation id="4250229828105606438">స్క్రీన్షాట్</translation> <translation id="4250680216510889253">లేదు</translation> <translation id="4251377547188244181">కియోస్క్, సంకేత చిహ్నాల పరికరంలో ఎన్రోల్మెంట్</translation> +<translation id="4252141040239557279"><ph name="A" />లో <ph name="INDEX" />వ ఇమేజ్</translation> <translation id="4252899949534773101">బ్లూటూత్ నిలిపివేయబడింది</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - ట్యాబ్ కంటెంట్ షేర్ చేయబడింది</translation> <translation id="4253168017788158739">గమనిక</translation> @@ -4579,6 +4588,7 @@ <translation id="4548858987594081919">మీ సైన్-ఇన్ సమాచారాన్ని సేవ్ చేయడంలో Google Password Managerకు సహాయపడటం కోసం, ఈ సైట్లో మీ యూజర్నేమ్ను జోడించండి</translation> <translation id="4549791035683739768">మీ సెక్యూరిటీ కీలో వేలిముద్రలు సేవ్ చేయబడలేదు</translation> <translation id="4550926046134589611">కొన్ని సపోర్ట్ లింక్లు ఇప్పటికీ <ph name="APP_NAME" />లో తెరవబడతాయి.</translation> +<translation id="4551379727767354516">మీ ఇటీవలి AI రూపాలు</translation> <translation id="4551763574344810652">చర్యరద్దు చేయడానికి <ph name="MODIFIER_KEY_DESCRIPTION" />ను నొక్కండి</translation> <translation id="4553526521109675518">పరికర భాషను మార్చడానికి మీరు Chromebookను రీస్టార్ట్ చేయవలసి ఉంటుంది. <ph name="BEGIN_LINK_LEARN_MORE" />మరింత తెలుసుకోండి<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">ప్రస్తుతం ఉన్న వెర్షన్తో పోలిస్తే, బాహ్య ఎక్స్టెన్షన్ అదే వెర్షన్కు చెందినది లేదా తక్కువ వెర్షన్కు చెందినది.</translation> @@ -5900,6 +5910,7 @@ <translation id="5620568081365989559">DevTools <ph name="FOLDER_PATH" />కు పూర్తి యాక్సెస్ను అభ్యర్థిస్తున్నాయి. మీరు ఎటువంటి ముఖ్యమైన సమాచారాన్ని బహిర్గతం చేయలేదని నిర్ధారించుకోండి.</translation> <translation id="5620612546311710611">వినియోగ గణాంకాలు</translation> <translation id="5621272825308610394">డిస్ప్లే పేరు ఏదీ సెట్ చేయబడలేదు</translation> +<translation id="5621350029086078628">ఇది ప్రయోగంగా లాంచ్ చేయబడిన AI ఫీచర్.</translation> <translation id="562250930904332809">&లైవ్ క్యాప్షన్ను డిజేబుల్ చేయండి</translation> <translation id="5623282979409330487">ఈ సైట్ మీ మోషన్ సెన్సార్లను యాక్సెస్ చేస్తోంది.</translation> <translation id="5623842676595125836">లాగ్</translation> @@ -6017,6 +6028,7 @@ <translation id="572328651809341494">ఇటీవలి ట్యాబ్లు</translation> <translation id="5723508132121499792">నేపథ్య యాప్లు ఏవీ అమలులోలేవు</translation> <translation id="5723967018671998714">అజ్ఞాత మోడ్లో థర్డ్-పార్టీ కుక్కీలు బ్లాక్ చేయబడతాయి</translation> +<translation id="5725112283692663422">AIతో రూపాన్ని క్రియేట్ చేయండి అనే ఫీచర్కు ఫీడ్బ్యాక్ పంపండి</translation> <translation id="5727728807527375859">ఎక్స్టెన్షన్లు, యాప్లు మరియు థీమ్లు మీ కంప్యూటర్కు హాని కలిగించవచ్చు. మీరు కొనసాగించాలనుకుంటున్నారా?</translation> <translation id="5728290366864286776">ఈ ఎక్స్టెన్షన్ సైట్ సమాచారాన్ని రీడ్ చేసి, మార్చవచ్చు లేదా బ్యాక్గ్రౌండ్లో రన్ చేయవచ్చు</translation> <translation id="5728450728039149624">స్మార్ట్ లాక్ స్క్రీన్ యొక్క లాక్ ఆప్షన్లు</translation> @@ -6493,6 +6505,7 @@ <translation id="610487644502954950">సైడ్ ప్యానెల్ పిన్ తీసివేయబడింది</translation> <translation id="6104929924898022309">సెర్చ్ కీని ఉపయోగించి ఫంక్షన్ కీల ప్రవర్తనను మార్చండి</translation> <translation id="6106167152849320869">మునుపటి దశలో సమస్య విశ్లేషణ, వినియోగ డేటాను పంపడానికి కూడా మీరు ఎంచుకున్నట్లయితే, ఇన్స్టాల్ చేసిన యాప్ల కోసం ఈ డేటాను సేకరించడం జరుగుతుంది.</translation> +<translation id="6108952804512516814">AIతో క్రియేట్ చేయండి</translation> <translation id="6111718295497931251">Google Drive యాక్సెస్ను తీసివేయండి</translation> <translation id="6111972606040028426">Google Assistantను ఎనేబుల్ చేయండి</translation> <translation id="6112294629795967147">సైజ్ మార్చడం కోసం తాకండి</translation> @@ -7284,6 +7297,7 @@ <translation id="6761623907967804682">పరికరంలోని సైట్ డేటా అనుమతించబడదు</translation> <translation id="6762833852331690540">ఆన్లో ఉంది</translation> <translation id="6762861159308991328">లింక్లు ఎలా తెరుచుకోవాలో మీరు యాప్ సెట్టింగ్లలో మార్చవచ్చు</translation> +<translation id="6764633064754857889">ప్రివ్యూ లింక్</translation> <translation id="676560328519657314">Google Payలో మీ పేమెంట్ ఆప్షన్లు</translation> <translation id="6766488013065406604">Google Password Managerకు వెళ్లండి</translation> <translation id="6767566652486411142">మరొక భాషను ఎంచుకోండి...</translation> @@ -8255,6 +8269,7 @@ <translation id="752098910262610337">షార్ట్కట్లను చూడండి</translation> <translation id="7521430434164837205">Microsoft 365 ఫైల్స్</translation> <translation id="7522255036471229694">"Ok Google" చెప్పండి</translation> +<translation id="7523112275619538890">సమీపంలోని పరికరాలతో ఫైల్స్, ఇంకా మరెన్నో షేర్ చేయవచ్చు</translation> <translation id="7523117833414447032">క్యాపిటల్స్ చదువుతున్నప్పుడు</translation> <translation id="7523585675576642403">ప్రొఫైల్కు పేరు మార్చండి</translation> <translation id="7525067979554623046">క్రియేట్ చేయండి</translation> @@ -8423,6 +8438,7 @@ <translation id="7657090467145778067">తక్కువ మెమరీ సేవింగ్స్</translation> <translation id="7657218410916651670">మీరు సైన్ ఇన్ చేసినప్పుడు, <ph name="BEGIN_LINK_GOOGLE" />ఇతర రకాల యాక్టివిటీ<ph name="END_LINK_GOOGLE" /> మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. మీరు వాటిని ఎప్పుడైనా తొలగించవచ్చు.</translation> <translation id="7658239707568436148">రద్దు చేయండి</translation> +<translation id="7658727964021657194">ఇటీవలి AI రూపం <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">ఏదేమైనా అజ్ఞాత మోడ్ నుండి నిష్క్రమించాలా?</translation> <translation id="7659336857671800422">గోప్యతా గైడ్ను ఉపయోగించండి</translation> <translation id="7659584679870740384">ఈ పరికరాన్ని ఉపయోగించడానికి మీకు అధికారం లేదు. దయచేసి సైన్-ఇన్ అనుమతి కోసం నిర్వాహకుడిని సంప్రదించండి.</translation> @@ -8444,6 +8460,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{<ph name="DEVICE_TYPE" />ని {NUM_WEEKS} వారంలోపు తిరిగివ్వండి}other{<ph name="DEVICE_TYPE" />ని {NUM_WEEKS} వారాలలోపు తిరిగివ్వండి}}</translation> <translation id="7668423670802040666"><ph name="ACCOUNT" /> కోసం Google Password Managerలో</translation> <translation id="7668648754769651616">యాక్సెసిబిలిటీ ఫీచర్లు మీ పరికరాన్ని సులభంగా ఉపయోగించేలా చేస్తాయి. క్విక్ సెట్టింగ్లను యాక్సెస్ చేయడానికి, మీ స్క్రీన్ దిగువున ఉన్న సమయాన్ని ఎంచుకోండి.</translation> +<translation id="7669620291129890197">మీ పరికరాలకు కనిపిస్తుంది</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{పిన్ తప్పు. మీకు 1 ప్రయత్నం మిగిలి ఉంది.}other{పిన్ తప్పు. మీకు # ప్రయత్నాలు మిగిలి ఉన్నాయి.}}</translation> <translation id="7670434942695515800">అత్యుత్తమ పనితీరు కోసం, తాజా వెర్షన్కు అప్గ్రేడ్ అవ్వండి. అప్గ్రేడ్ పూర్తి కాని సందర్భంలో, మీ ఫైల్స్ను బ్యాకప్ చేయడం అనేది సిఫార్సు చేయబడుతుంది. అప్గ్రేడ్ ప్రారంభమైయ్యాక, Linux షట్ డౌన్ అవుతుంది. కొనసాగించడానికి ముందు, తెరిచి ఉన్న ఫైల్స్ను సేవ్ చేయండి. <ph name="LINK_START" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="7670483791111801022">సబ్టైటిళ్లు</translation> @@ -8642,6 +8659,7 @@ <translation id="7807711621188256451">మీ కెమెరాను యాక్సెస్ చేయడానికి <ph name="HOST" />ని ఎల్లప్పుడూ అనుమతించండి</translation> <translation id="7810202088502699111">ఈ పేజీపై పాప్-అప్లు నిరోధించబడ్డాయి.</translation> <translation id="7810367892333449285">మీ ఎంట్రీ <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ అడ్రస్ <ph name="LPA_2" />$<ph name="LPA_3" /> ఆప్షనల్ మ్యాచింగ్ id ఫార్మాట్లో ఉండాలి<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">మళ్లీ ట్రై చేయండి లేదా గతంలో రూపొందించిన రూపాలలో ఒక దాని నుండి దిగువున ఎంచుకోండి.</translation> <translation id="7814458197256864873">&కాపీ</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531"><ph name="EXTENSION_NAME" /> కోసం <ph name="SHORTCUT" /> షార్ట్కట్ను ఎడిట్ చేయండి</translation> @@ -8746,6 +8764,7 @@ <translation id="789722939441020330">అనేక ఫైళ్లను ఆటోమేటిక్గా డౌన్లోడ్ చేయడానికి సైట్లను అనుమతించకండి</translation> <translation id="7897900149154324287">భవిష్యత్తులో, మీ తీసివేయదగిన పరికరాన్ని అన్ప్లగ్ చేయడానికి ముందు ఫైల్స్ యాప్లో దాన్ని ఎజెక్ట్ చేయడం మర్చిపోవద్దు. లేదంటే, మీరు డేటాను కోల్పోయే అవకాశం ఉంటుంది.</translation> <translation id="7898725031477653577">ఎల్లప్పుడూ అనువదించు</translation> +<translation id="7899324822972399722"><ph name="B" /> స్టయిల్లో, <ph name="A" />లో <ph name="INDEX" />వ ఇమేజ్</translation> <translation id="7901405293566323524">ఫోన్ హబ్</translation> <translation id="7903290522161827520">బ్రౌజర్ భాగాల కోసం వెతుకుతున్నారా? సందర్శించండి</translation> <translation id="7903429136755645827">మీ గేమ్ కంట్రోల్స్ను అనుకూలంగా మార్చడానికి క్లిక్ చేయండి</translation> @@ -9004,6 +9023,7 @@ <translation id="8089547136368562137">Googleలోని అత్యుత్తమ టెక్నాలజీలు దీనిని సురక్షితంగా ఉంచుతాయి</translation> <translation id="8090234456044969073">మీరు అత్యంత తరచుగా సందర్శించిన వెబ్సైట్ల లిస్ట్ను చదవడానికి అనుమతి</translation> <translation id="8090513782447872344">మళ్లీ చూడటానికి మీరు ఎప్పుడైనా తిరిగి రావచ్చు</translation> +<translation id="8090686009202681725">AIతో రూపాన్ని క్రియేట్ చేయండి</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> ప్రతిస్పందించడం లేదు</translation> <translation id="8094536695728193970">ఆప్రికాట్</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Google Driveకు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా మీ డేటాను పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. మీ బ్యాకప్లో యాప్ డేటా ఉంటుంది.<ph name="END_PARAGRAPH1" /> @@ -9020,6 +9040,7 @@ <translation id="8098616321286360457">నెట్వర్క్ కనెక్షన్ అవసరం</translation> <translation id="8100230553590752325">ఏ పరికరంలో అయినా సేవ్ చేసిన పాస్వర్డ్లను ఉపయోగించండి</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> ఎంచుకోబడింది. ఎంపిక రద్దు చేయడానికి 'Search + Space'ను నొక్కండి.</translation> +<translation id="8100725874569949614"><ph name="C" /> మూడ్తో, <ph name="A" />లో <ph name="INDEX" />వ ఇమేజ్.</translation> <translation id="8101409298456377967">మీ పాస్వర్డ్లను క్రియేట్ చేయండి, సేవ్ చేయండి, అలాగే మేనేజ్ చేయండి, తద్వారా మీరు సైట్లకు, యాప్లకు సులభంగా సైన్ ఇన్ చేయవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="810185532889603849">అనుకూల రంగు</translation> <translation id="8101987792947961127">తర్వాత రీబూట్లో పవర్వాష్ అవసరం</translation> @@ -9029,6 +9050,7 @@ <translation id="8107015733319732394">మీ <ph name="DEVICE_TYPE" />లో Google Play Storeను ఇన్స్టాల్ చేస్తోంది. ఇందుకు కొన్ని నిమిషాలు పట్టవచ్చు.</translation> <translation id="810728361871746125">డిస్ప్లే రిజల్యూషన్</translation> <translation id="8109109153262930486">ఆటోమేటిక్గా సెట్ చేసి ఉన్న అవతార్</translation> +<translation id="8109991406044913868">AI ద్వారా క్రియేట్ చేయబడిన రూపం</translation> <translation id="8110393529211831722">సబ్స్క్రిప్షన్ ఈ పరికరంలో మాత్రమే ఇన్స్టాల్ చేయబడింది, మీ ఖాతాలోని ఇతర పరికరాలతో సింక్ చేయబడదు. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="8110489095782891123">కాంటాక్ట్ లిస్ట్ను డౌన్లోడ్ చేస్తోంది...</translation> <translation id="8115139559594092084">మీ Google Drive నుండి</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 23a5da7..fb0fc23 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -280,6 +280,7 @@ <translation id="1203559206734265703">Налагодження захищених аудиторій увімкнено.</translation> <translation id="120368089816228251">Музична нота</translation> <translation id="1203942045716040624">Shared Worker: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Переглянути посилання</translation> <translation id="1206832039833782423">Код безпеки вказано на зворотній стороні картки</translation> <translation id="1210678701920254279">Переглянути або додати принтери й відкрити активні завдання друку</translation> <translation id="1211769675100312947">Ярликами керуєте ви</translation> @@ -619,6 +620,7 @@ <translation id="1478340334823509079">Деталі: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">Встановлення не підтримується</translation> <translation id="1480663089572535854">Ви можете повернутися та призначити інший перемикач для дії "Вибрати". Автосканування завжди можна вимкнути в налаштуваннях.</translation> +<translation id="1481001611315487791">Докладніше про те, як створювати теми за допомогою ШІ.</translation> <translation id="1481537595330271162">Не вдалося змінити розмір диска</translation> <translation id="1482626744466814421">Додати цю вкладку до закладок…</translation> <translation id="1482772681918035149">змінити паролі</translation> @@ -813,6 +815,7 @@ <translation id="1615433306336820465">Керувати даними для входу, які зберігаються на ключі безпеки</translation> <translation id="1616206807336925449">Для цього розширення не потрібні спеціальні дозволи.</translation> <translation id="1616298854599875024">Не вдається імпортувати розширення <ph name="IMPORT_NAME" />, оскільки воно не є спільним модулем</translation> +<translation id="161654560322394775">Зображення <ph name="INDEX" /> з <ph name="A" />. Стиль: <ph name="B" />. Настрій: <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Перевірка відповідності даних правилам безпеки вашої організації…}=1{Перевірка відповідності файлу правилам безпеки вашої організації…}one{Перевірка відповідності файлів правилам безпеки вашої організації…}few{Перевірка відповідності файлів правилам безпеки вашої організації…}many{Перевірка відповідності файлів правилам безпеки вашої організації…}other{Перевірка відповідності файлів правилам безпеки вашої організації…}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">Довідковий центр</translation> @@ -1520,6 +1523,7 @@ <translation id="2140902257485550046">Натисніть, щоб заблокувати всі розширення на цьому сайті</translation> <translation id="2142328300403846845">Відкрити посилання як</translation> <translation id="2142582065325732898">Увімкніть <ph name="LINK1_BEGIN" />Синхронізацію Chrome<ph name="LINK1_END" />, щоб переглядати вкладки, які ви нещодавно відкривали в Chrome. <ph name="LINK2_BEGIN" />Докладніше<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Відображається для деяких контактів</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome сьогодні знову заблокує файли cookie}=1{Завтра Chrome знову заблокує файли cookie}one{Через # день файли cookie буде знову заблоковано}few{Через # дні файли cookie буде знову заблоковано}many{Через # днів файли cookie буде знову заблоковано}other{Через # дня файли cookie буде знову заблоковано}}</translation> <translation id="2143765403545170146">Завжди показувати Панель інструментів у повноекранному режимі</translation> <translation id="2143778271340628265">Ручна конфігурація проксі-сервера</translation> @@ -1707,6 +1711,7 @@ <translation id="2291452790265535215">Спробуйте скористатися бічною панеллю, щоб переглянути закладки, сеанси тощо</translation> <translation id="229182044471402145">Немає шрифтів, що відповідають запиту.</translation> <translation id="2292848386125228270">Почніть роботу з <ph name="PRODUCT_NAME" /> як звичайний користувач. Щоб запустити програму для розробки з кореневого каталогу, перезапустіть її, поставивши прапорець біля опції "--не в ізольованому програмному середовищі".</translation> +<translation id="2292862094862078674">Перевірте інтернет-з’єднання й повторіть спробу. Ви також можете вибрати одну з раніше створених тем нижче.</translation> <translation id="2294081976975808113">Екран конфіденційності</translation> <translation id="2294358108254308676">Установити <ph name="PRODUCT_NAME" />?</translation> <translation id="229477815107578534">Перегляньте свої налаштування</translation> @@ -2644,6 +2649,7 @@ <translation id="2990313168615879645">Додати обліковий запис Google</translation> <translation id="2990375978470734995">Щоб ця зміна почала діяти, повторно підключіть зовнішні пристрої.</translation> <translation id="2990583317361835189">Заборонити сайтам використовувати датчики руху</translation> +<translation id="2991182900092497283">Укажіть, чому вам потрібно вставити ці дані:</translation> <translation id="2992931425024192067">Показувати весь вміст сповіщень</translation> <translation id="2993517869960930405">Про додаток</translation> <translation id="2996108796702395498">Серійний номер пристрою: <ph name="SERIAL_NUMBER" />. За допомогою цього номера можна активувати сервіс.</translation> @@ -3046,6 +3052,7 @@ <translation id="3325804108816646710">Пошук доступних профілів…</translation> <translation id="3325910708063135066">Камеру та мікрофон вимкнено в параметрах системи Mac</translation> <translation id="3325930488268995856">Microsoft OneDrive зв’язано</translation> +<translation id="3325995804968971809">Стиль</translation> <translation id="3327050066667856415">Безпека комп'ютерів Chromebook – наша основна мета. Ваш пристрій має автоматичний захист від зловмисного програмного забезпечення, тому вам не потрібно встановлювати інші додатки.</translation> <translation id="3328489342742826322">Якщо відновити резервну копію, буде видалено наявні додатки й дані Linux у папці з файлами Linux.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3157,6 +3164,7 @@ <translation id="3432762828853624962">Shared Workers</translation> <translation id="3433507769937235446">Блокувати, коли вас немає поруч</translation> <translation id="3433621910545056227">На жаль, системі не вдалося заблокувати атрибути часу встановлення на пристрої.</translation> +<translation id="3434025015623587566">Google Менеджеру паролів потрібен додатковий доступ</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="3434272557872943250">Якщо ввімкнено також запис Історії додатків і веб-пошуку, ці дані зберігаються в обліковому записі Google дитини. Докладніше про це налаштування читайте на сторінці families.google.com.</translation> <translation id="3434475275396485144">Цим налаштуванням керує адміністратор телефона</translation> @@ -3230,6 +3238,7 @@ <translation id="3481268647794498892">Відкриється в <ph name="ALTERNATIVE_BROWSER_NAME" /> через <ph name="COUNTDOWN_SECONDS" /> с</translation> <translation id="348268549820508141">Розпізнавання мовлення</translation> <translation id="3482719661246593752">Сайт <ph name="ORIGIN" /> може переглядати зазначені нижче файли</translation> +<translation id="3484595034894304035">Персоналізувати фоновий малюнок, заставку, темну тему тощо</translation> <translation id="3484869148456018791">Отримати новий сертифікат</translation> <translation id="3486950712960783074">Ваша поїздка</translation> <translation id="3487007233252413104">анонімна функція</translation> @@ -3322,6 +3331,7 @@ <translation id="3561201631376780358">Відкрити бічну панель, щоб переглянути всі закладки</translation> <translation id="3562423906127931518">Це може тривати кілька хвилин. Налаштовується контейнер Linux.</translation> <translation id="3562655211539199254">Переглядайте останні вкладки Chrome із телефона</translation> +<translation id="3563392617245068355">Настрій</translation> <translation id="3563432852173030730">Не вдалося завантажити додаток для терміналів.</translation> <translation id="3563558822383875692">Налаштування контенту для завантаження.</translation> <translation id="3564334271939054422">Можливо, щоб під’єднатися до цієї мережі Wi-Fi (<ph name="NETWORK_ID" />), потрібно перейти на її сторінку входу.</translation> @@ -3369,6 +3379,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{{COUNT} обліковий запис використовує такий самий пароль}one{{COUNT} обліковий запис використовує такий самий пароль}few{{COUNT} облікові записи використовують такий самий пароль}many{{COUNT} облікових записів використовують такий самий пароль}other{{COUNT} облікового запису використовують такий самий пароль}}</translation> <translation id="3605780360466892872">Консерватор</translation> <translation id="3607671391978830431">Для дитини</translation> +<translation id="3608460311600621471">Укажіть, чому вам потрібно надрукувати ці дані:</translation> <translation id="3608730769702025110">Крок 3 з 4. Перегляньте ідентифікаційну інформацію</translation> <translation id="3609277884604412258">Швидкий пошук</translation> <translation id="3610241585790874201">Сайту заборонено зберігати дані на вашому пристрої</translation> @@ -4205,6 +4216,7 @@ <translation id="4250229828105606438">Знімок екрана</translation> <translation id="4250680216510889253">Ні</translation> <translation id="4251377547188244181">Реєстрація термінала й вивіски на пристрої</translation> +<translation id="4252141040239557279">Зображення <ph name="INDEX" /> з <ph name="A" /></translation> <translation id="4252899949534773101">Bluetooth вимкнено</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – надано доступ до вмісту вкладки</translation> <translation id="4253168017788158739">Примітка</translation> @@ -4584,6 +4596,7 @@ <translation id="4548858987594081919">Щоб зберегти ваші облікові дані в Google Менеджері паролів, додайте ім’я користувача для цього сайту</translation> <translation id="4549791035683739768">На ключі безпеки немає збережених відбитків</translation> <translation id="4550926046134589611">Деякі підтримувані посилання все ще відкриватимуться в додатку <ph name="APP_NAME" />.</translation> +<translation id="4551379727767354516">Ваші нещодавні теми, створені за допомогою ШІ</translation> <translation id="4551763574344810652">Щоб відмінити, натисніть <ph name="MODIFIER_KEY_DESCRIPTION" /></translation> <translation id="4553526521109675518">Щоб змінити мову пристрою, потрібно перезапустити Chromebook. <ph name="BEGIN_LINK_LEARN_MORE" />Докладніше<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">Зовнішнє розширення має таку саму або нижчу версію порівняно з наявним.</translation> @@ -5903,6 +5916,7 @@ <translation id="5620568081365989559">Інструментам розробника потрібен повний доступ до папки <ph name="FOLDER_PATH" />. Переконайтеся, що ви не оприлюдните приватну інформацію.</translation> <translation id="5620612546311710611">статистика використання</translation> <translation id="5621272825308610394">Відображувану назву не налаштовано</translation> +<translation id="5621350029086078628">Це експериментальна функція ШІ.</translation> <translation id="562250930904332809">&Вимкнути живі субтитри</translation> <translation id="5623282979409330487">Цей сайт має доступ до датчиків руху.</translation> <translation id="5623842676595125836">Журнал</translation> @@ -6020,6 +6034,7 @@ <translation id="572328651809341494">Останні вкладки</translation> <translation id="5723508132121499792">Не запущено жодну фонову програму</translation> <translation id="5723967018671998714">Сторонні файли cookie блокуються в режимі анонімного перегляду</translation> +<translation id="5725112283692663422">Надіслати відгук про функцію "Створити тему за допомогою ШІ"</translation> <translation id="5727728807527375859">Розширення, служби та теми можуть зашкодити вашому комп'ютеру. Дійсно продовжити?</translation> <translation id="5728290366864286776">Це розширення може переглядати й змінювати інформацію про сайт або працювати у фоновому режимі</translation> <translation id="5728450728039149624">Параметри заблокованого екрана в Smart Lock</translation> @@ -6495,6 +6510,7 @@ <translation id="610487644502954950">Бічну панель відкріплено</translation> <translation id="6104929924898022309">Використовувати клавішу пошуку, щоб змінювати призначення функціональних клавіш</translation> <translation id="6106167152849320869">Якщо на попередньому кроці ви погодилися надсилати дані про діагностику й використання, ці дані збиратимуться для встановлених додатків.</translation> +<translation id="6108952804512516814">Створити за допомогою ШІ</translation> <translation id="6111718295497931251">Скасувати доступ до Google Диска</translation> <translation id="6111972606040028426">Увімкнути Google Асистента</translation> <translation id="6112294629795967147">Торкніться, щоб змінити розмір</translation> @@ -6665,6 +6681,7 @@ <translation id="6238982280403036866">Дозволено використовувати JavaScript</translation> <translation id="6239558157302047471">Перезавантажити фрейм</translation> <translation id="6240821072888636753">Запитувати щоразу</translation> +<translation id="6240964651812394252">Щоб використовувати Менеджер паролів у вашій операційній системі, перезапустіть Chrome і надайте доступ до додатка, що керує паролями на цьому комп’ютері. Після перезапуску поточні вкладки відкриються знову.</translation> <translation id="6241530762627360640">Переглядати інформацію про пристрої Bluetooth, підключені до вашої системи, і знаходити пристрої Bluetooth поблизу.</translation> <translation id="6241844896329831164">Доступ не потрібен</translation> <translation id="6242574558232861452">Перевірка відповідності правилам безпеки вашої організації.</translation> @@ -7292,6 +7309,7 @@ <translation id="6761623907967804682">Заборонено зберігати дані сайтів на пристрої</translation> <translation id="6762833852331690540">Увімкнено</translation> <translation id="6762861159308991328">Ви можете змінити спосіб, у який відкриваються посилання, у налаштуваннях додатка</translation> +<translation id="6764633064754857889">Переглянути посилання</translation> <translation id="676560328519657314">Ваші способи оплати в Google Pay</translation> <translation id="6766488013065406604">Відкрити Google Менеджер паролів</translation> <translation id="6767566652486411142">Вибрати іншу мову…</translation> @@ -8262,6 +8280,7 @@ <translation id="752098910262610337">Показувати ярлики</translation> <translation id="7521430434164837205">Файли Microsoft 365</translation> <translation id="7522255036471229694">Скажіть "Ok Google"</translation> +<translation id="7523112275619538890">Діліться файлами й іншими об’єктами з пристроями поблизу</translation> <translation id="7523117833414447032">Озвучення великих літер</translation> <translation id="7523585675576642403">Перейменувати профіль</translation> <translation id="7525067979554623046">Створити</translation> @@ -8430,6 +8449,7 @@ <translation id="7657090467145778067">Незначне заощадження</translation> <translation id="7657218410916651670">Коли ви входите в обліковий запис Google, у ньому можуть зберігатися <ph name="BEGIN_LINK_GOOGLE" />дані про інші дії<ph name="END_LINK_GOOGLE" />. Ви можете будь-коли видалити їх.</translation> <translation id="7658239707568436148">Скасувати</translation> +<translation id="7658727964021657194">Нещодавня тема, створена за допомогою ШІ (<ph name="TILE_INDEX" />)</translation> <translation id="7659154729610375585">Усе одно вимкнути режим анонімного перегляду?</translation> <translation id="7659336857671800422">Перегляньте посібник із конфіденційності</translation> <translation id="7659584679870740384">Вам не маєте права використовувати цей пристрій. Зверніться до адміністратора, щоб отримати дозвіл на вхід.</translation> @@ -8451,6 +8471,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Поверніть пристрій <ph name="DEVICE_TYPE" /> упродовж {NUM_WEEKS} тижня}one{Поверніть пристрій <ph name="DEVICE_TYPE" /> упродовж {NUM_WEEKS} тижня}few{Поверніть пристрій <ph name="DEVICE_TYPE" /> упродовж {NUM_WEEKS} тижнів}many{Поверніть пристрій <ph name="DEVICE_TYPE" /> упродовж {NUM_WEEKS} тижнів}other{Поверніть пристрій <ph name="DEVICE_TYPE" /> упродовж {NUM_WEEKS} тижня}}</translation> <translation id="7668423670802040666">У Менеджері паролів Google для облікового запису <ph name="ACCOUNT" /></translation> <translation id="7668648754769651616">Функції спеціальних можливостей полегшують користування пристроєм. Щоб відкрити швидкі налаштування, натисніть час унизу екрана.</translation> +<translation id="7669620291129890197">Відображається для ваших пристроїв</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{Неправильний PIN-код. У вас залишилася одна спроба.}one{Неправильний PIN-код. У вас залишилася # спроба.}few{Неправильний PIN-код. У вас залишилося # спроби.}many{Неправильний PIN-код. У вас залишилося # спроб.}other{Неправильний PIN-код. У вас залишилося # спроби.}}</translation> <translation id="7670434942695515800">Для оптимальної роботи оновіть Linux до останньої версії. Радимо створити резервну копію файлів на випадок, якщо не вдасться завершити оновлення. Коли оновлення почнеться, Linux буде вимкнено. Перш ніж продовжувати, збережіть файли. <ph name="LINK_START" />Докладніше<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Субтитри</translation> @@ -8650,6 +8671,7 @@ <translation id="7807711621188256451">Завжди дозволяти хосту <ph name="HOST" /> доступ до вашої камери</translation> <translation id="7810202088502699111">На цій сторінці спливаючі вікна заблоковано.</translation> <translation id="7810367892333449285">Введіть дані у форматі: <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ адреса<ph name="LPA_2" />$<ph name="LPA_3" />необов’язковий ідентифікатор зіставлення<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Повторіть спробу або виберіть одну з раніше створених тем нижче.</translation> <translation id="7814458197256864873">&Копіювати</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">Змінити комбінацію клавіш <ph name="SHORTCUT" /> для розширення <ph name="EXTENSION_NAME" /></translation> @@ -8754,6 +8776,7 @@ <translation id="789722939441020330">Заборонити сайтам автоматично завантажувати кілька файлів</translation> <translation id="7897900149154324287">Надалі не забувайте відключати знімний пристрій у додатку Файли, перш ніж від’єднувати його. Інакше ви можете втратити дані.</translation> <translation id="7898725031477653577">Завжди перекладати</translation> +<translation id="7899324822972399722">Зображення <ph name="INDEX" /> з <ph name="A" />. Стиль: <ph name="B" />.</translation> <translation id="7901405293566323524">Керування телефоном</translation> <translation id="7903290522161827520">Шукаєте компоненти веб-переглядача? Перейдіть на сторінку</translation> <translation id="7903429136755645827">Натисніть, щоб налаштувати елементи керування іграми</translation> @@ -9015,6 +9038,7 @@ <translation id="8089547136368562137">його буде захищено найкращими технологіями Google</translation> <translation id="8090234456044969073">Переглядати список ваших найчастіше відвідуваних веб-сайтів</translation> <translation id="8090513782447872344">Посібник із конфіденційності можна будь-коли перечитати</translation> +<translation id="8090686009202681725">Створити тему за допомогою ШІ</translation> <translation id="8093359998839330381">Плагін <ph name="PLUGIN_NAME" /> не відповідає</translation> <translation id="8094536695728193970">Абрикос</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Створення резервних копій на Google Диску. Легко відновлюйте дані та переносьте їх на інші пристрої. Резервна копія містить дані додатків.<ph name="END_PARAGRAPH1" /> @@ -9031,6 +9055,7 @@ <translation id="8098616321286360457">Потрібне з'єднання з мережею</translation> <translation id="8100230553590752325">Використовуйте збережені паролі на будь-якому пристрої</translation> <translation id="810068641062493918">Вибрана мова: <ph name="LANGUAGE" />. Щоб скасувати вибір, натисніть комбінацію клавіш Search і пробіл.</translation> +<translation id="8100725874569949614">Зображення <ph name="INDEX" /> з <ph name="A" />. Настрій: <ph name="C" />.</translation> <translation id="8101409298456377967">Створюйте та зберігайте паролі й керуйте ними, щоб було простіше входити в обліковий запис на сайтах і в додатках. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> <translation id="810185532889603849">Спеціальний колір</translation> <translation id="8101987792947961127">Під час наступного перезавантаження потрібно виконати Powerwash</translation> @@ -9040,6 +9065,7 @@ <translation id="8107015733319732394">Встановлення додатка Google Play Store на ваш <ph name="DEVICE_TYPE" />. Це може зайняти кілька хвилин.</translation> <translation id="810728361871746125">Роздільна здатність дисплея</translation> <translation id="8109109153262930486">Аватар за умовчанням</translation> +<translation id="8109991406044913868">Тема, створена за допомогою ШІ</translation> <translation id="8110393529211831722">Підписку встановлено лише на цьому пристрої. Її не синхронізовано з іншими пристроями у вашому обліковому записі. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Завантаження списку контактів…</translation> <translation id="8115139559594092084">З вашого Google Диска</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index d4867a94..ef9c6ee0 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -275,6 +275,7 @@ <translation id="1203559206734265703">Himoyalangan auditoriya debaglanishi yoniq.</translation> <translation id="120368089816228251">Musiqa notasi</translation> <translation id="1203942045716040624">Shared Worker: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Havolaga razm solish</translation> <translation id="1206832039833782423">Xavfsizlik kodi kartangizning orqa tomonida</translation> <translation id="1210678701920254279">Printerlarni koʻrish yoki kiritish hamda faol chop etish vazifalarini koʻrish</translation> <translation id="1211769675100312947">Boshqaruvingizdagi yorliqlar</translation> @@ -614,6 +615,7 @@ <translation id="1478340334823509079">Batafsil ma’lumotlar: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">O‘rnatishga ruxsat berilmagan</translation> <translation id="1480663089572535854">Ortga qaytib, “Tanlash” tayinlovini oʻzgartirish mumkin. Sozlamalar orqali istalgan vaqt avto-skanerlashni faolsizlantirish mumkin.</translation> +<translation id="1481001611315487791">Ai yordamida mavzular yaratish haqida batafsil</translation> <translation id="1481537595330271162">Disk hajmi oʻzgarmadi</translation> <translation id="1482626744466814421">Bu varaqni bukmarklash...</translation> <translation id="1482772681918035149">parollarni tahrirlash</translation> @@ -805,6 +807,7 @@ <translation id="1615433306336820465">Elektron kalitingizda saqlangan kirish maʼlumotlarini boshqarish</translation> <translation id="1616206807336925449">Bu kengaytmaga maxsus ruxsatlarni talab qilmaydi.</translation> <translation id="1616298854599875024">Umumiy modul hisoblanmagan <ph name="IMPORT_NAME" /> kengaytmasini import qilib bo‘lmadi</translation> +<translation id="161654560322394775">Rasm <ph name="INDEX" />/<ph name="A" />, uslub: <ph name="B" />, kayfiyat: <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Bu maʼlumotlar tashkilotingiz xavfsizlik siyosati asosida tekshirilmoqda...}=1{Bu fayl tashkilotingiz xavfsizlik siyosati asosida tekshirilmoqda...}other{Bu fayllar tashkilotingiz xavfsizlik siyosati asosida tekshirilmoqda...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">&Yordam markazi</translation> @@ -1504,6 +1507,7 @@ <translation id="2140902257485550046">Bu saytda barcha kengaytmalar bloklanishini tanlash</translation> <translation id="2142328300403846845">Havolani quyidagicha ochish</translation> <translation id="2142582065325732898">Oxirgi Chrome varaqlarini ochish uchun <ph name="LINK1_BEGIN" />Chrome Sync<ph name="LINK1_END" /> funksiyasini yoqing. <ph name="LINK2_BEGIN" />Batafsil<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Ayrim kontaktlarga koʻrinadi</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Chrome cookie fayllarni bugundan yana bloklaydi}=1{Chrome cookie fayllarni ertadan yana bloklaydi}other{Cookie fayllar yana bloklanishiga # kun qoldi}}</translation> <translation id="2143765403545170146">Asboblar paneli har doim to‘liq ekran rejimida ko‘rsatilsin</translation> <translation id="2143778271340628265">Proksini qo‘lda sozlash</translation> @@ -1691,6 +1695,7 @@ <translation id="2291452790265535215">Bukmarklar, sayohatlar va boshqalar uchun yon paneldan foydalaning</translation> <translation id="229182044471402145">Hech narsa topilmadi.</translation> <translation id="2292848386125228270"><ph name="PRODUCT_NAME" /> brauzerini oddiy foydalanuvchi nomidan ishga tushiring. Agar superfoydalanuvchi nomidan ishga tushirmoqchi bo‘lsangiz, brauzerni qaytadan ishga tushirib, “--no-sandbox” parametrini o‘rnating.</translation> +<translation id="2292862094862078674">Internetni tekshiring va qaytadan urining. Quyida avval yaratilgan mavzulardan birini tanlash mumkin.</translation> <translation id="2294081976975808113">Ekran maxfiyligi</translation> <translation id="2294358108254308676"><ph name="PRODUCT_NAME" />’ni o‘rnatmoqchimisiz?</translation> <translation id="229477815107578534">Sozlamalarni tekshiring</translation> @@ -3031,6 +3036,7 @@ <translation id="3325804108816646710">Mavjud profillar qidirilmoqda...</translation> <translation id="3325910708063135066">Kamera va mikrofon Mac tizim sozlamalaridan faolsizlantirilgan</translation> <translation id="3325930488268995856">Microsoft OneDrive ulandi</translation> +<translation id="3325995804968971809">Uslub</translation> <translation id="3327050066667856415">Chromebook qurilmalari yuqori xavfsizlik uchun ishlab chiqilgan. Qurilmangiz zararli dasturlarni avtomatik aniqlaydi va buning uchun qoʻshimcha dasturlarni talab qilmaydi.</translation> <translation id="3328489342742826322">Zaxiradan tiklasangiz, mavjud Linux ilovalari va Linux fayllari jildi olib tashlanadi</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3216,6 +3222,7 @@ <translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> soniyadan keyin <ph name="ALTERNATIVE_BROWSER_NAME" /> orqali ochiladi</translation> <translation id="348268549820508141">Nutqni aniqlash</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> quyidagi fayllarni koʻra oladi</translation> +<translation id="3484595034894304035">Fon rasmi, ekran lavhasi, tungi mavzu va boshqalarni moslang</translation> <translation id="3484869148456018791">Yangi sertifikat olish</translation> <translation id="3486950712960783074">Safaringiz</translation> <translation id="3487007233252413104">anonim funksiya</translation> @@ -3308,6 +3315,7 @@ <translation id="3561201631376780358">Barcha bukmarklarni koʻrish uchun yon panelni oching</translation> <translation id="3562423906127931518">Bu jarayon bir necha daqiqa olishi mumkin. Linux konteyneri sozlanmoqda.</translation> <translation id="3562655211539199254">Chromedagi oxirgi varaqlarni telefondan koʻring</translation> +<translation id="3563392617245068355">Kayfiyat</translation> <translation id="3563432852173030730">Kiosk ilovasini yuklab olishda xatolik yuz berdi.</translation> <translation id="3563558822383875692">DLC sozlanmoqda.</translation> <translation id="3564334271939054422">Siz ulangan Wi-Fi (<ph name="NETWORK_ID" />) tarmog‘i hisob sahifasida tizimga kirishingizni talab qilishi mumkin.</translation> @@ -4192,6 +4200,7 @@ <translation id="4250229828105606438">Skrinshot</translation> <translation id="4250680216510889253">Yo‘q</translation> <translation id="4251377547188244181">Kiosk va reklama paneli qurilmasini qayd qilish</translation> +<translation id="4252141040239557279">Rasm <ph name="INDEX" />/<ph name="A" /></translation> <translation id="4252899949534773101">Bluetooth yoqilmagan</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – varaqni ko‘rishga ruxsat berildi</translation> <translation id="4253168017788158739">Eslatma</translation> @@ -4571,6 +4580,7 @@ <translation id="4548858987594081919">Google Parollar menejeriga kirish maʼlumotlaringizni saqlashga yordam berish uchun ushbu sayt uchun foydalanuvchi nomini kiriting</translation> <translation id="4549791035683739768">Elektron kalitingizda barmoq izlari topilmadi</translation> <translation id="4550926046134589611">Ayrim tegishli havolalar <ph name="APP_NAME" /> ilovasida ochilaveradi.</translation> +<translation id="4551379727767354516">Oxirgi AI mavzular</translation> <translation id="4551763574344810652">Bekor qilish uchun <ph name="MODIFIER_KEY_DESCRIPTION" /> ni bosing</translation> <translation id="4553526521109675518">Qurilmadagi tilni almashtirish uchun Chromebookni qayta ishga tushiring. <ph name="BEGIN_LINK_LEARN_MORE" />Batafsil<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">Tashqi kengaytma versiyasi joriysidan yangi emas.</translation> @@ -5892,6 +5902,7 @@ <translation id="5620568081365989559">Dasturchilar asboblari <ph name="FOLDER_PATH" /> jildiga to‘liq ruxsat so‘ramoqda. U yerda maxfiy ma’lumotlar yo‘qligiga ishonch hosil qiling.</translation> <translation id="5620612546311710611">foydalanish statistikasi</translation> <translation id="5621272825308610394">Ism chiqmaydi</translation> +<translation id="5621350029086078628">Bu tajribaviy AI funksiyasi.</translation> <translation id="562250930904332809">Jonli izohni &oʻchirish</translation> <translation id="5623282979409330487">Bu saytda harakat sensorlari ishlatilyapti.</translation> <translation id="5623842676595125836">Jurnal</translation> @@ -6009,6 +6020,7 @@ <translation id="572328651809341494">Oxirgi varaqlar</translation> <translation id="5723508132121499792">Orqa fonda ishlayotgan ilovalar yo‘q</translation> <translation id="5723967018671998714">Inkognito rejimida tashqi cookie fayllariga ruxsat berilmaydi</translation> +<translation id="5725112283692663422">AI bilan mavzu yaratish yuzasidan fikr-mulohaza yuborish</translation> <translation id="5727728807527375859">Kengaytma, ilova va mavzular kompyuterngizga zararli bo‘lishi mumkin. Davom ettirilsinmi?</translation> <translation id="5728290366864286776">Bu kengaytma sayt maʼlumotlarini oʻqib, oʻzgartira oladi yoki orqa fonda ishlaydi</translation> <translation id="5728450728039149624">Smart Lock yordamida ekran qulfini sozlash</translation> @@ -6485,6 +6497,7 @@ <translation id="610487644502954950">Yon panel olib tashlandi</translation> <translation id="6104929924898022309">Funksiya tugmalari ishlashini almashtirish uchun qidiruv tugmasini bosing</translation> <translation id="6106167152849320869">Avvalgi ekranda diagnostika va foydalanish statistikasi ham yuborilishi tanlansa, bu axborotlar oʻrnatilgan ilovalar uchun ham jamlanadi.</translation> +<translation id="6108952804512516814">AI bilan yaratish</translation> <translation id="6111718295497931251">Google Drive ruxsatini olib tashlash</translation> <translation id="6111972606040028426">Google Assistentni yoqish</translation> <translation id="6112294629795967147">Hajmini moslash uchun tegining</translation> @@ -7277,6 +7290,7 @@ <translation id="6761623907967804682">Qurilmada sayt maʼlumotlarini saqlash ruxsat etilmagan</translation> <translation id="6762833852331690540">Yoniq</translation> <translation id="6762861159308991328">Havolalar qanday ochilishini ilova sozlamalari orqali oʻzgartirish mumkin.</translation> +<translation id="6764633064754857889">Havolaga razm solish</translation> <translation id="676560328519657314">Google Pay xizmatidagi toʻlov usullaringiz</translation> <translation id="6766488013065406604">Google Parollar menejerini ochish</translation> <translation id="6767566652486411142">Boshqa tilni tanlang...</translation> @@ -8247,6 +8261,7 @@ <translation id="752098910262610337">Yorliqlarni ochish</translation> <translation id="7521430434164837205">Microsoft 365 fayllari</translation> <translation id="7522255036471229694">“Ok Google” deb ayting</translation> +<translation id="7523112275619538890">Atrofdagi qurilmalarga fayl va boshqalarni ulashish</translation> <translation id="7523117833414447032">Katta harflarni oʻqish vaqtida</translation> <translation id="7523585675576642403">Profilni qayta nomlash</translation> <translation id="7525067979554623046">Yaratish</translation> @@ -8415,6 +8430,7 @@ <translation id="7657090467145778067">Kichik tejash</translation> <translation id="7657218410916651670">Google hisobingizga kirganingizda <ph name="BEGIN_LINK_GOOGLE" />boshqa shakldagi harakatlaringiz<ph name="END_LINK_GOOGLE" /> hisobingizga saqlanishi mumkin. Ularni istalgan vaqt oʻchirish mumkin.</translation> <translation id="7658239707568436148">Bekor qilish</translation> +<translation id="7658727964021657194">Oxirgi AI mavzusi <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">Inkognito rejimidan baribir chiqilsinmi?</translation> <translation id="7659336857671800422">Maxfiylik qoʻllanmasini boshlash</translation> <translation id="7659584679870740384">Bu qurilmadan foydalanishga ruxsatingiz yo‘q. Qurilma administratori bilan bog‘laning.</translation> @@ -8436,6 +8452,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{<ph name="DEVICE_TYPE" /> qurilmasini {NUM_WEEKS} hafta ichida qaytaring}other{<ph name="DEVICE_TYPE" /> qurilmasini {NUM_WEEKS} hafta ichida qaytaring}}</translation> <translation id="7668423670802040666"><ph name="ACCOUNT" /> uchun Google Parollar menejerida</translation> <translation id="7668648754769651616">Qulaylik funksiyalari qurilmadan foydalanishni osonlashtiradi. Tezkor sozlamalarni ochish uchun ekranning quyi qismidagi vaqt ustiga bosing.</translation> +<translation id="7669620291129890197">Qurilmalaringizga koʻrinadi</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{PIN kod xato. Yana bir marta urinishingiz mumkin.}other{PIN kod xato. Yana # marta urinishingiz mumkin.}}</translation> <translation id="7670434942695515800">Tizimning barcha imkoniyatlaridan foydalanish uchun uni eng oxirgi versiyaga yangilang. Yangilanish bajarilmay qolganda fayllarni zaxiralash tavsiya etiladi. Yangilanish boshlanganda Linux oʻchiriladi. Davom etishdan oldin ochiq fayllarni saqlang. <ph name="LINK_START" />Batafsil<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Taglavhalar</translation> @@ -8634,6 +8651,7 @@ <translation id="7807711621188256451"><ph name="HOST" /> saytiga kameradan foydalanishga doim ruxsat berish</translation> <translation id="7810202088502699111">Qalqib chiquvchi oynalar bloklandi.</translation> <translation id="7810367892333449285">Xatosiz formatda kiritilishi zarur <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ manzil<ph name="LPA_2" />$<ph name="LPA_3" />ixtiyoriy mos id<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Qaytadan urining yoki quyida avval yaratilgan mavzulardan birini tanlang.</translation> <translation id="7814458197256864873">&Nuxsa olish</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531"><ph name="EXTENSION_NAME" /> uchun <ph name="SHORTCUT" /> tezkor tugmasini tahrirlash</translation> @@ -8738,6 +8756,7 @@ <translation id="789722939441020330">Saytlarga bir nechta faylni avtomatik yuklashni taqiqlash</translation> <translation id="7897900149154324287">Kelgusida, olinadigan qurilmani chiqarib olishdan oldin uni Fayllar ilovasida chiqarishni unutmang. Aks holda, ma’lumotlar o‘chib ketishi mumkin.</translation> <translation id="7898725031477653577">Har doim tarjima qilinsin</translation> +<translation id="7899324822972399722">Rasm <ph name="INDEX" />/<ph name="A" />, uslub: <ph name="B" /></translation> <translation id="7901405293566323524">Phone Hub</translation> <translation id="7903290522161827520">Brauzer komponentlarini qidiryapsizmi? Bu sahifaga kiring</translation> <translation id="7903429136755645827">Oʻyin boshqaruvlarini moslashtirish uchun bosing</translation> @@ -8998,6 +9017,7 @@ <translation id="8089547136368562137">Eng ishonchli Google tizimlari himoyasida</translation> <translation id="8090234456044969073">Eng ko‘p ochilgan saytlar ro‘yhati</translation> <translation id="8090513782447872344">Nazar solish uchun istalgan vaqt qaytish mumkin</translation> +<translation id="8090686009202681725">AI bilan mavzu yaratish</translation> <translation id="8093359998839330381">“<ph name="PLUGIN_NAME" />” plagini javob bermayapti</translation> <translation id="8094536695728193970">Apricot</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Google Drive xizmatiga zaxiralash. Axborotlaringizni osongina tiklashingiz yoki qurilmangizni xohlagan vaqtda almashtirishingiz mumkin. Zaxira ichida ilova ma’lumotlari ham bor.<ph name="END_PARAGRAPH1" /> @@ -9014,6 +9034,7 @@ <translation id="8098616321286360457">Internet aloqasi kerak</translation> <translation id="8100230553590752325">Saqlangan parollardan istalgan qurilmada foydalanish</translation> <translation id="810068641062493918"><ph name="LANGUAGE" /> tanlandi. Bekor qilish uchun Qidiruv va Boʻshliq tugmalarini bosing.</translation> +<translation id="8100725874569949614">Rasm <ph name="INDEX" />/<ph name="A" />, kayfiyat: <ph name="C" />.</translation> <translation id="8101409298456377967">Sayt va ilovalarga osongina kirish uchun parollaringizni yarating, saqlang va boshqaring. <ph name="BEGIN_LINK" />Batafsil<ph name="END_LINK" /></translation> <translation id="810185532889603849">Maxsus rang</translation> <translation id="8101987792947961127">Qurilmani keyingi marta qayta ishga tushirishda Powerwash amali bajarilishi kerak</translation> @@ -9023,6 +9044,7 @@ <translation id="8107015733319732394">Google Market <ph name="DEVICE_TYPE" /> qurilmangizga o‘rnatilmoqda. Bu bir necha daqiqa oladi.</translation> <translation id="810728361871746125">Ekran oʻlchami:</translation> <translation id="8109109153262930486">Standart avatar</translation> +<translation id="8109991406044913868">AI bilan yaratilgan mavzu</translation> <translation id="8110393529211831722">Obuna faqat shu qurilmaga oʻrnatilgan va hisobingiz ostidagi boshqa qurilmalar bilan sinxronlanmaydi. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Kontaktlar roʻyxati yuklab olinmoqda...</translation> <translation id="8115139559594092084">Google Drive omboringizdan</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 66aab52..9b7e7f2 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -277,6 +277,7 @@ <translation id="1203559206734265703">Tính năng Gỡ lỗi cho đối tượng được bảo vệ đang bật.</translation> <translation id="120368089816228251">Ghi chú âm nhạc</translation> <translation id="1203942045716040624">Shared Worker: <ph name="SCRIPT_URL" /></translation> +<translation id="1205104724635486855">Xem trước đường liên kết</translation> <translation id="1206832039833782423">Mã bảo mật nằm ở mặt sau của thẻ</translation> <translation id="1210678701920254279">Xem hoặc thêm máy in và xem các lệnh in đang thực hiện</translation> <translation id="1211769675100312947">Lối tắt do bạn lựa chọn</translation> @@ -616,6 +617,7 @@ <translation id="1478340334823509079">Chi tiết: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">Cài đặt chưa được bật</translation> <translation id="1480663089572535854">Bạn có thể quay lại để thay đổi công tắc cho thao tác “Chọn”. Bạn có thể tắt tính năng tự động quét bất cứ lúc nào trong phần Cài đặt.</translation> +<translation id="1481001611315487791">Tìm hiểu thêm về cách tạo giao diện bằng AI.</translation> <translation id="1481537595330271162">Lỗi khi thay đổi dung lượng ổ đĩa</translation> <translation id="1482626744466814421">Đánh dấu thẻ này...</translation> <translation id="1482772681918035149">chỉnh sửa mật khẩu</translation> @@ -810,6 +812,7 @@ <translation id="1615433306336820465">Quản lý dữ liệu đăng nhập lưu trữ trên khoá bảo mật của bạn</translation> <translation id="1616206807336925449">Tiện ích này không yêu cầu quyền đặc biệt.</translation> <translation id="1616298854599875024">Không thể nhập tiện ích "<ph name="IMPORT_NAME" />" do tiện ích này không phải là mô-đun được chia sẻ</translation> +<translation id="161654560322394775">Hình ảnh <ph name="INDEX" /> về <ph name="A" />, theo kiểu <ph name="B" />, mang tâm trạng <ph name="C" />.</translation> <translation id="1617765145568323981">{NUM_FILES,plural, =0{Đang kiểm tra để xem dữ liệu này có tuân theo các chính sách bảo mật của tổ chức bạn hay không...}=1{Đang kiểm tra để xem tệp này có tuân theo các chính sách bảo mật của tổ chức bạn hay không...}other{Đang kiểm tra để xem những tệp này có tuân theo các chính sách bảo mật của tổ chức bạn hay không...}}</translation> <translation id="1618102204889321535"><ph name="CURRENT_CHARACTER_COUNT" />/<ph name="MAX_CHARACTER_COUNT" /></translation> <translation id="1618268899808219593">Trung tâm trợ g&iúp</translation> @@ -1517,6 +1520,7 @@ <translation id="2140902257485550046">Chọn nếu muốn chặn tất cả tiện ích trên trang web này</translation> <translation id="2142328300403846845">Mở đường liên kết dưới dạng</translation> <translation id="2142582065325732898">Bật <ph name="LINK1_BEGIN" />Chrome Sync<ph name="LINK1_END" /> để xem các thẻ Chrome mở gần đây. <ph name="LINK2_BEGIN" />Tìm hiểu thêm<ph name="LINK2_END" /></translation> +<translation id="2143089736086572103">Hiển thị với một số liên hệ</translation> <translation id="2143667386128949432">{COUNT,plural, =0{Hôm nay, Chrome sẽ chặn cookie trở lại}=1{Chrome sẽ chặn cookie trở lại vào ngày mai}other{Cookie sẽ bị chặn trở lại sau # ngày nữa}}</translation> <translation id="2143765403545170146">Luôn hiển thị thanh công cụ ở chế độ toàn màn hình</translation> <translation id="2143778271340628265">Cấu hình proxy thủ công</translation> @@ -1704,6 +1708,7 @@ <translation id="2291452790265535215">Thử sử dụng bảng điều khiển bên cho dấu trang, hành trình và các nội dung khác</translation> <translation id="229182044471402145">Không tìm thấy phông chữ phù hợp.</translation> <translation id="2292848386125228270">Vui lòng khởi động <ph name="PRODUCT_NAME" /> với tư cách người dùng bình thường. Nếu bạn cần chạy dưới dạng chương trình gốc để phát triển, hãy chạy lại bằng cờ --không có-hộp cát.</translation> +<translation id="2292862094862078674">Hãy kiểm tra kết nối Internet của bạn rồi thử lại. Ở bên dưới, bạn vẫn có thể chọn một trong các giao diện đã tạo trước đây.</translation> <translation id="2294081976975808113">Quyền riêng tư đối với nội dung trên màn hình</translation> <translation id="2294358108254308676">Bạn có muốn cài đặt không <ph name="PRODUCT_NAME" /> không?</translation> <translation id="229477815107578534">Xem lại chế độ cài đặt của bạn</translation> @@ -2641,6 +2646,7 @@ <translation id="2990313168615879645">Thêm Tài khoản Google</translation> <translation id="2990375978470734995">Để sự thay đổi này có hiệu lực, hãy kết nối lại các phụ kiện bên ngoài.</translation> <translation id="2990583317361835189">Không cho phép trang web sử dụng cảm biến chuyển động</translation> +<translation id="2991182900092497283">Vui lòng nhập lý do bạn dán dữ liệu này:</translation> <translation id="2992931425024192067">Hiện mọi nội dung thông báo</translation> <translation id="2993517869960930405">Thông tin ứng dụng</translation> <translation id="2996108796702395498">Số sê-ri thiết bị của bạn là <ph name="SERIAL_NUMBER" />. Số này có thể được dùng để giúp kích hoạt dịch vụ.</translation> @@ -3043,6 +3049,7 @@ <translation id="3325804108816646710">Đang tìm hồ sơ có sẵn...</translation> <translation id="3325910708063135066">Máy ảnh và micrô đã bị tắt trong System Preferences (Tùy chọn hệ thống) trên máy Mac</translation> <translation id="3325930488268995856">Đã kết nối với Microsoft OneDrive</translation> +<translation id="3325995804968971809">Kiểu</translation> <translation id="3327050066667856415">Chromebook có thiết kế giúp tăng cường tính bảo mật. Thiết bị của bạn tự động được bảo vệ khỏi phần mềm độc hại mà không cần phải cài đặt phần mềm bổ sung.</translation> <translation id="3328489342742826322">Nếu bạn khôi phục từ một bản sao lưu, các dữ liệu và ứng dụng Linux hiện có trong thư mục tệp Linux của bạn sẽ bị xóa.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> @@ -3154,6 +3161,7 @@ <translation id="3432762828853624962">Shared Workers</translation> <translation id="3433507769937235446">Khoá khi rời đi</translation> <translation id="3433621910545056227">Rất tiếc! Hệ thống không thể thiết lập khóa thuộc tính thời gian cài đặt thiết bị.</translation> +<translation id="3434025015623587566">Trình quản lý mật khẩu của Google cần thêm quyền truy cập</translation> <translation id="3434107140712555581"><ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="3434272557872943250">Nếu bạn bật tùy chọn cài đặt Hoạt động bổ sung trên web và ứng dụng cho con mình, thì dữ liệu này có thể được lưu vào Tài khoản Google của con. Hãy tìm hiểu thêm về các tùy chọn cài đặt này và cách điều chỉnh tại families.google.com.</translation> <translation id="3434475275396485144">Chế độ cài đặt này do quản trị viên phụ trách điện thoại của bạn quản lý</translation> @@ -3227,6 +3235,7 @@ <translation id="3481268647794498892">Sẽ mở trong <ph name="ALTERNATIVE_BROWSER_NAME" /> sau <ph name="COUNTDOWN_SECONDS" /> giây</translation> <translation id="348268549820508141">Nhận dạng lời nói</translation> <translation id="3482719661246593752"><ph name="ORIGIN" /> có thể xem các tệp sau</translation> +<translation id="3484595034894304035">Cá nhân hoá hình nền, trình bảo vệ màn hình, giao diện tối, v.v.</translation> <translation id="3484869148456018791">Nhận chứng chỉ mới</translation> <translation id="3486950712960783074">Chuyến đi của bạn</translation> <translation id="3487007233252413104">chức năng ẩn danh</translation> @@ -3319,6 +3328,7 @@ <translation id="3561201631376780358">Mở Bảng điều khiển bên để xem Tất cả dấu trang</translation> <translation id="3562423906127931518">Quá trình này có thể mất vài phút. Đang thiết lập vùng chứa Linux.</translation> <translation id="3562655211539199254">Xem các thẻ Chrome mở gần đây trên điện thoại</translation> +<translation id="3563392617245068355">Tâm trạng</translation> <translation id="3563432852173030730">Không thể tải xuống ứng dụng Kiosk.</translation> <translation id="3563558822383875692">Đang định cấu hình nội dung tải xuống được (DLC).</translation> <translation id="3564334271939054422">Mạng Wi-Fi bạn đang sử dụng (<ph name="NETWORK_ID" />) có thể yêu cầu bạn truy cập vào trang đăng nhập của mạng đó.</translation> @@ -3366,6 +3376,7 @@ <translation id="3605156246402033687">{COUNT,plural, =1{{COUNT} tài khoản sử dụng cùng một mật khẩu}other{{COUNT} tài khoản sử dụng cùng một mật khẩu}}</translation> <translation id="3605780360466892872">Doanh nhân</translation> <translation id="3607671391978830431">Dành cho trẻ em</translation> +<translation id="3608460311600621471">Vui lòng nhập lý do bạn in dữ liệu này:</translation> <translation id="3608730769702025110">Bước 3/4: Kiểm tra thông tin nhận dạng cá nhân</translation> <translation id="3609277884604412258">Tìm kiếm nhanh</translation> <translation id="3610241585790874201">Không được phép lưu dữ liệu trên thiết bị của bạn</translation> @@ -4202,6 +4213,7 @@ <translation id="4250229828105606438">Ảnh chụp màn hình</translation> <translation id="4250680216510889253">Không</translation> <translation id="4251377547188244181">Đăng ký thiết bị kiosk hoặc bảng hiệu</translation> +<translation id="4252141040239557279">Hình ảnh <ph name="INDEX" /> về <ph name="A" /></translation> <translation id="4252899949534773101">Bluetooth đã bị tắt</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - Đã chia sẻ nội dung thẻ</translation> <translation id="4253168017788158739">Lưu ý</translation> @@ -4581,6 +4593,7 @@ <translation id="4548858987594081919">Để giúp Trình quản lý mật khẩu của Google lưu thông tin đăng nhập của bạn, hãy thêm tên người dùng cho trang web này</translation> <translation id="4549791035683739768">Khóa bảo mật của bạn chưa lưu trữ vân tay nào</translation> <translation id="4550926046134589611">Một số đường liên kết được hỗ trợ vẫn sẽ mở trong <ph name="APP_NAME" />.</translation> +<translation id="4551379727767354516">Giao diện AI gần đây của bạn</translation> <translation id="4551763574344810652">Nhấn <ph name="MODIFIER_KEY_DESCRIPTION" /> để hủy thao tác</translation> <translation id="4553526521109675518">Bạn cần khởi động lại Chromebook để thay đổi ngôn ngữ của thiết bị. <ph name="BEGIN_LINK_LEARN_MORE" />Tìm hiểu thêm<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="4554591392113183336">Tiện ích bên ngoài có cùng phiên bản hoặc phiên bản thấp hơn so với tiện ích hiện có.</translation> @@ -5902,6 +5915,7 @@ <translation id="5620568081365989559">DevTools yêu cầu toàn quyền truy cập vào <ph name="FOLDER_PATH" />. Hãy đảm bảo bạn không hiển thị bất kỳ thông tin nhạy cảm nào.</translation> <translation id="5620612546311710611">thống kê sử dụng</translation> <translation id="5621272825308610394">Không có tên hiển thị</translation> +<translation id="5621350029086078628">Đây là tính năng AI thử nghiệm.</translation> <translation id="562250930904332809">&Tắt tính năng Phụ đề trực tiếp</translation> <translation id="5623282979409330487">Trang web này đang sử dụng cảm biến chuyển động.</translation> <translation id="5623842676595125836">Nhật ký</translation> @@ -6019,6 +6033,7 @@ <translation id="572328651809341494">Các thẻ gần đây</translation> <translation id="5723508132121499792">Không có ứng dụng nền nào đang chạy</translation> <translation id="5723967018671998714">Đã chặn các cookie bên thứ ba ở Chế độ ẩn danh</translation> +<translation id="5725112283692663422">Gửi ý kiến phản hồi về sự kiện Tạo giao diện bằng AI</translation> <translation id="5727728807527375859">Tiện ích, ứng dụng và chủ đề có thể gây hại cho máy tính của bạn. Bạn có chắc chắn muốn tiếp tục không?</translation> <translation id="5728290366864286776">Tiện ích này có thể đọc và thay đổi thông tin trang web hoặc chạy ở chế độ nền</translation> <translation id="5728450728039149624">Các tùy chọn phương thức khóa màn hình của Smart Lock</translation> @@ -6495,6 +6510,7 @@ <translation id="610487644502954950">Đã bỏ ghim bảng điều khiển bên</translation> <translation id="6104929924898022309">Sử dụng phím tìm kiếm để thay đổi hành vi của các phím chức năng</translation> <translation id="6106167152849320869">Nếu bạn cũng chọn gửi dữ liệu sử dụng và chẩn đoán ở bước trước, thì dữ liệu này sẽ được thu thập đối với các ứng dụng đã cài đặt.</translation> +<translation id="6108952804512516814">Tạo bằng AI</translation> <translation id="6111718295497931251">Xoá quyền truy cập vào Google Drive</translation> <translation id="6111972606040028426">Bật Trợ lý Google</translation> <translation id="6112294629795967147">Chạm để đổi kích thước</translation> @@ -6665,6 +6681,7 @@ <translation id="6238982280403036866">Được phép sử dụng JavaScript</translation> <translation id="6239558157302047471">Tải lại &khung</translation> <translation id="6240821072888636753">Luôn hỏi</translation> +<translation id="6240964651812394252">Để sử dụng Trình quản lý mật khẩu của Google trên hệ điều hành của bạn, hãy chạy lại Chrome và cho phép truy cập vào trình quản lý mật khẩu trên máy tính. Các thẻ sẽ mở lại sau khi bạn chạy lại Chrome.</translation> <translation id="6241530762627360640">Truy cập thông tin về thiết bị Bluetooth được ghép nối với hệ thống của bạn và khám phá các thiết bị Bluetooth lân cận.</translation> <translation id="6241844896329831164">Không có quyền truy cập cần thiết</translation> <translation id="6242574558232861452">Đang kiểm tra để xem tệp có tuân thủ các chính sách bảo mật của tổ chức bạn hay không.</translation> @@ -7286,6 +7303,7 @@ <translation id="6761623907967804682">Không được phép lưu dữ liệu trang web trên thiết bị</translation> <translation id="6762833852331690540">Đang bật</translation> <translation id="6762861159308991328">Bạn có thể thay đổi cách mở đường liên kết trong phần Cài đặt ứng dụng</translation> +<translation id="6764633064754857889">Xem trước đường liên kết</translation> <translation id="676560328519657314">Phương thức thanh toán của bạn trong Google Pay</translation> <translation id="6766488013065406604">Truy cập vào Trình quản lý mật khẩu của Google</translation> <translation id="6767566652486411142">Chọn ngôn ngữ khác...</translation> @@ -8257,6 +8275,7 @@ <translation id="752098910262610337">Hiện lối tắt</translation> <translation id="7521430434164837205">Các tệp Microsoft 365</translation> <translation id="7522255036471229694">Nói “Ok Google”</translation> +<translation id="7523112275619538890">Chia sẻ tệp và nhiều nội dung khác với thiết bị ở gần</translation> <translation id="7523117833414447032">Khi đọc các chữ cái viết hoa</translation> <translation id="7523585675576642403">Đổi tên hồ sơ</translation> <translation id="7525067979554623046">Tạo</translation> @@ -8425,6 +8444,7 @@ <translation id="7657090467145778067">Mức tiết kiệm nhỏ</translation> <translation id="7657218410916651670"><ph name="BEGIN_LINK_GOOGLE" />Các hình thức hoạt động khác<ph name="END_LINK_GOOGLE" /> có thể được lưu trong Tài khoản Google khi bạn đăng nhập. Bạn có thể xóa những dữ liệu này bất cứ lúc nào.</translation> <translation id="7658239707568436148">Hủy</translation> +<translation id="7658727964021657194">Giao diện AI gần đây <ph name="TILE_INDEX" /></translation> <translation id="7659154729610375585">Vẫn thoát khỏi chế độ Ẩn danh?</translation> <translation id="7659336857671800422">Xem Hướng dẫn về quyền riêng tư</translation> <translation id="7659584679870740384">Bạn không được phép sử dụng thiết bị này. Vui lòng liên hệ với quản trị viên để có quyền đăng nhập.</translation> @@ -8446,6 +8466,7 @@ <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Trả lại thiết bị <ph name="DEVICE_TYPE" /> trong vòng {NUM_WEEKS} tuần}other{Trả lại thiết bị <ph name="DEVICE_TYPE" /> trong vòng {NUM_WEEKS} tuần}}</translation> <translation id="7668423670802040666">Cập nhật mật khẩu của <ph name="ACCOUNT" /> trong Trình quản lý mật khẩu của Google</translation> <translation id="7668648754769651616">Bộ tính năng hỗ trợ tiếp cận giúp thiết bị của bạn dễ sử dụng hơn. Để truy cập phần Cài đặt nhanh, hãy chọn vùng báo thời gian ở cuối màn hình.</translation> +<translation id="7669620291129890197">Hiển thị với các thiết bị của bạn</translation> <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{Mã PIN không chính xác. Bạn còn một lần thử.}other{Mã PIN không chính xác. Bạn còn # lần thử.}}</translation> <translation id="7670434942695515800">Để có hiệu suất tốt nhất, hãy nâng cấp lên phiên bản mới nhất. Bạn nên sao lưu tệp phòng trường hợp quá trình nâng cấp không thể hoàn tất. Khi quá trình nâng cấp bắt đầu, Linux sẽ tắt. Vui lòng lưu các tệp đang mở trước khi tiếp tục. <ph name="LINK_START" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="7670483791111801022">Phụ đề</translation> @@ -8645,6 +8666,7 @@ <translation id="7807711621188256451">Luôn cho phép <ph name="HOST" /> truy cập máy ảnh của bạn</translation> <translation id="7810202088502699111">Cửa sổ bật lên đã bị chặn trên trang này.</translation> <translation id="7810367892333449285">Nội dung bạn nhập phải có định dạng <ph name="LPA_0" />$<ph name="LPA_1" />SM-DP+ địa chỉ<ph name="LPA_2" />$<ph name="LPA_3" />mã nhận dạng để so khớp (không bắt buộc)<ph name="LPA_4" /></translation> +<translation id="7811263553491007091">Hãy thử lại hoặc chọn một trong những giao diện đã tạo ở bên dưới.</translation> <translation id="7814458197256864873">Sao &chép</translation> <translation id="7814857791038398352">Microsoft OneDrive</translation> <translation id="7815583197273433531">Chỉnh sửa lối tắt <ph name="SHORTCUT" /> cho <ph name="EXTENSION_NAME" /></translation> @@ -8749,6 +8771,7 @@ <translation id="789722939441020330">Không cho phép trang web tự động tải nhiều tệp xuống</translation> <translation id="7897900149154324287">Trong tương lai, đảm bảo rằng bạn đã ngắt kết nối thiết bị di động của mình trong ứng dụng Tệp trước khi tháo thiết bị. Nếu không, bạn có thể mất dữ liệu.</translation> <translation id="7898725031477653577">Luôn dịch</translation> +<translation id="7899324822972399722">Hình ảnh <ph name="INDEX" /> về <ph name="A" />, theo kiểu <ph name="B" /></translation> <translation id="7901405293566323524">Trung tâm điều khiển điện thoại</translation> <translation id="7903290522161827520">Bạn đang tìm các thành phần trình duyệt? Hãy truy cập</translation> <translation id="7903429136755645827">Nhấp để tùy chỉnh các nút điều khiển trong trò chơi</translation> @@ -9010,6 +9033,7 @@ <translation id="8089547136368562137">Mật khẩu được bảo vệ bằng những công nghệ tốt nhất của Google</translation> <translation id="8090234456044969073">Đọc danh sách trang web được truy cập thường xuyên nhất của bạn</translation> <translation id="8090513782447872344">Bạn có thể xem lại hướng dẫn vào bất cứ lúc nào</translation> +<translation id="8090686009202681725">Tạo giao diện bằng AI</translation> <translation id="8093359998839330381"><ph name="PLUGIN_NAME" /> không phản hồi</translation> <translation id="8094536695728193970">Vàng mơ</translation> <translation id="8095105960962832018"><ph name="BEGIN_PARAGRAPH1" />Sao lưu vào Google Drive. Dễ dàng khôi phục dữ liệu hoặc chuyển đổi thiết bị bất kỳ lúc nào. Bản sao lưu của bạn bao gồm cả dữ liệu ứng dụng.<ph name="END_PARAGRAPH1" /> @@ -9026,6 +9050,7 @@ <translation id="8098616321286360457">Cần kết nối mạng</translation> <translation id="8100230553590752325">Sử dụng mật khẩu đã lưu trên mọi thiết bị</translation> <translation id="810068641062493918">Đã chọn <ph name="LANGUAGE" />. Hãy nhấn phím Tìm kiếm + Phím cách để bỏ chọn.</translation> +<translation id="8100725874569949614">Hình ảnh <ph name="INDEX" /> về <ph name="A" />, mang tâm trạng <ph name="C" />.</translation> <translation id="8101409298456377967">Tạo, lưu và quản lý mật khẩu để bạn có thể dễ dàng đăng nhập vào các trang web và ứng dụng. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="810185532889603849">Màu tùy chỉnh</translation> <translation id="8101987792947961127">Yêu cầu Powerwash trong lần khởi động lại tiếp theo</translation> @@ -9035,6 +9060,7 @@ <translation id="8107015733319732394">Đang cài đặt Cửa hàng Google Play trên <ph name="DEVICE_TYPE" /> của bạn. Quá trình này có thể mất vài phút.</translation> <translation id="810728361871746125">Độ phân giải màn hình</translation> <translation id="8109109153262930486">Hình đại diện mặc định</translation> +<translation id="8109991406044913868">Giao diện do AI tạo</translation> <translation id="8110393529211831722">Gói thuê bao chỉ được cài đặt trên thiết bị này và không được đồng bộ hoá với các thiết bị khác trong tài khoản của bạn. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="8110489095782891123">Đang tải danh bạ xuống...</translation> <translation id="8115139559594092084">Từ Google Drive của bạn</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb index efc68eb..d49dce7 100644 --- a/chrome/app/resources/google_chrome_strings_sw.xtb +++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -226,7 +226,7 @@ <translation id="4458462641685292929">Kuna shughuli nyingine zinaendelea kwenye Google Chrome. Tafadhali jaribu tena baadaye.</translation> <translation id="4459234553906210702">Upimaji wa tangazo huruhusu tovuti unazotembelea ziombe maelezo kutoka Chrome ambayo yanasaidia tovuti kupima ufanisi wa matangazo yao. Upimaji wa tangazo huzuia ufuatiliaji katika tovuti mbalimbali kwa kuhamisha maelezo machache kadiri iwezekanavyo miongoni mwa tovuti.</translation> <translation id="4501471624619070934">Imeshindwa kusakinisha kwa sababu ufikiaji umedhibitiwa katika nchi hii.</translation> -<translation id="4561051373932531560">Google Chrome inakuwezesha kubofya nambari ya simu kwenye wavuti na kuipigia simu kwa Skype!</translation> +<translation id="4561051373932531560">Google Chrome inakuwezesha kubofya namba ya simu kwenye wavuti na kuipigia simu kwa Skype!</translation> <translation id="4567424176335768812">Umeingia katika akaunti kama <ph name="USER_EMAIL_ADDRESS" />. Sasa unaweza kupata alamisho, historia, na mipangilio yako mingine kwenye vifaa vyako vyote vilivyoingia katika akaunti.</translation> <translation id="4571503333518166079">Nenda kwenye mipangilio ya arifa za Chrome</translation> <translation id="459622048091363950">Chrome itakapopata idhini, tovuti zitaweza kukuomba idhini ya kufikia.</translation> @@ -452,7 +452,7 @@ <translation id="8416347857511542594">Pata maelezo zaidi kuhusu kuweka mapendeleo ya matangazo kwenye Chrome</translation> <translation id="8418845734693287262">Mfumo wa Uendeshaji wa Chrome haukusawazisha data yako kwa sababu maelezo yako ya kuingia katika akaunti yamepitwa na wakati.</translation> <translation id="842386925677997438">Zana za usalama za Chrome</translation> -<translation id="8433638294851456451">Ili uweze kutuma nambari kwa simu yako ya Android kutoka hapa, ingia katika akaunti kwenye Chrome ukitumia vifaa vyote viwili.</translation> +<translation id="8433638294851456451">Ili uweze kutuma namba kwa simu yako ya Android kutoka hapa, ingia katika akaunti kwenye Chrome ukitumia vifaa vyote viwili.</translation> <translation id="8451192282033883849">Akaunti yako inadhibitiwa na <ph name="MANAGER_NAME" />. Msimamizi wako anaweza kuona na kubadilisha wasifu wa kivinjari hiki cha Chrome na data yake kama vile alamisho, historia na manenosiri.</translation> <translation id="8496177819998570653">Kidhibiti cha Manenosiri cha Google</translation> <translation id="8498858610309223613">Sasisho maalum la usalama wa Google Chrome limewekwa sasa hivi. Ifunge kisha uifungue sasa na tutarejesha vichupo vyako.</translation> @@ -481,7 +481,7 @@ <translation id="8834965163890861871">Google Chrome inajaribu kubadilisha manenosiri. Andika nenosiri lako la Windows ili uiruhusu.</translation> <translation id="8862326446509486874">Huna haki zifaazo ili kufanya usakinishaji wa kiwango cha mfumo. Jaribu kutumia kisakinishi kama msimamiaji kompyuta.</translation> <translation id="8914504000324227558">Zindua upya Chrome</translation> -<translation id="8922193594870374009">Ili uweze kutuma nambari kwa simu yako ya Android kutoka <ph name="ORIGIN" />, ingia katika akaunti kwenye Chrome ukitumia vifaa vyote viwili.</translation> +<translation id="8922193594870374009">Ili uweze kutuma namba kwa simu yako ya Android kutoka <ph name="ORIGIN" />, ingia katika akaunti kwenye Chrome ukitumia vifaa vyote viwili.</translation> <translation id="8986207147630327271">Unaongeza wasifu wa kazini kwenye kivinjari hiki na unampa msimamizi wako uwezo wa kudhibiti wasifu huo wa kazini pekee.</translation> <translation id="8989968390305463310">Historia yako ya kuvinjari huathiri matangazo unayoyaona na mambo yanayokuvutia kama inavyokadiriwa hapa chini. Ili kulinda faragha yako, Chrome hufuta kiotomatiki mambo yanayokuvutia kadiri unavyoendelea kutumia kila mwezi. Mambo yanayokuvutia yanaweza kuonyeshwa upya isipokuwa ukiyaondoa.</translation> <translation id="8999117580775242387">Wakati kiendelezi cha HTTPS hakipatikani, Chrome itatumia muunganisho usio salama bila kukutahadharisha</translation>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 4fb1241..f24e762 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -10705,18 +10705,6 @@ FEATURE_VALUE_TYPE(features::kSafetyCheckExtensions)}, #endif // BUILDFLAG(ENABLE_EXTENSIONS) -#if BUILDFLAG(IS_ANDROID) - {"webapk-install-failure-notification", - flag_descriptions::kWebApkInstallFailureNotificationName, - flag_descriptions::kWebApkInstallFailureNotificationDescription, - kOsAndroid, - FEATURE_VALUE_TYPE(webapps::features::kWebApkInstallFailureNotification)}, - {"webapk-install-failure-retry", - flag_descriptions::kWebApkInstallFailureRetryName, - flag_descriptions::kWebApkInstallFailureRetryDescription, kOsAndroid, - FEATURE_VALUE_TYPE(webapps::features::kWebApkInstallFailureRetry)}, -#endif // BUILDFLAG(IS_ANDROID) - {"autofill-enable-cvc-storage-and-filling", flag_descriptions::kAutofillEnableCvcStorageAndFillingName, flag_descriptions::kAutofillEnableCvcStorageAndFillingDescription, kOsAll,
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn index 8e0857bc..d39645b 100644 --- a/chrome/browser/ash/BUILD.gn +++ b/chrome/browser/ash/BUILD.gn
@@ -2459,6 +2459,8 @@ "policy/dlp/dlp_extract_io_task_observer.h", "policy/dlp/dlp_files_controller_ash.cc", "policy/dlp/dlp_files_controller_ash.h", + "policy/dlp/dlp_files_controller_ash_utils.cc", + "policy/dlp/dlp_files_controller_ash_utils.h", "policy/dlp/dlp_files_event_storage.cc", "policy/dlp/dlp_files_event_storage.h", "policy/dlp/dlp_window_observer.cc",
diff --git a/chrome/browser/ash/crosapi/dlp_ash.cc b/chrome/browser/ash/crosapi/dlp_ash.cc index 3c392eef..60348dcc 100644 --- a/chrome/browser/ash/crosapi/dlp_ash.cc +++ b/chrome/browser/ash/crosapi/dlp_ash.cc
@@ -6,14 +6,18 @@ #include "ash/shell.h" #include "base/check.h" +#include "base/files/file_path.h" #include "base/functional/bind.h" #include "chrome/browser/ash/crosapi/crosapi_ash.h" #include "chrome/browser/ash/crosapi/crosapi_manager.h" #include "chrome/browser/ash/crosapi/screen_manager_ash.h" #include "chrome/browser/ash/crosapi/window_util.h" #include "chrome/browser/ash/policy/dlp/dlp_content_manager_ash.h" +#include "chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.h" #include "chrome/browser/chromeos/policy/dlp/dlp_content_restriction_set.h" +#include "chrome/browser/chromeos/policy/dlp/dlp_files_utils.h" #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h" +#include "chrome/browser/profiles/profile_manager.h" #include "content/public/browser/browser_thread.h" namespace crosapi { @@ -58,6 +62,27 @@ return result; } +policy::dlp::FileAction ConvertMojoToDlpFileAction(mojom::FileAction action) { + switch (action) { + case crosapi::mojom::FileAction::kUnknown: + return policy::dlp::FileAction::kUnknown; + case crosapi::mojom::FileAction::kDownload: + return policy::dlp::FileAction::kDownload; + case crosapi::mojom::FileAction::kTransfer: + return policy::dlp::FileAction::kTransfer; + case crosapi::mojom::FileAction::kUpload: + return policy::dlp::FileAction::kUpload; + case crosapi::mojom::FileAction::kCopy: + return policy::dlp::FileAction::kCopy; + case crosapi::mojom::FileAction::kMove: + return policy::dlp::FileAction::kMove; + case crosapi::mojom::FileAction::kOpen: + return policy::dlp::FileAction::kOpen; + case crosapi::mojom::FileAction::kShare: + return policy::dlp::FileAction::kShare; + } +} + content::DesktopMediaID AreaToDesktopMediaID( const mojom::ScreenShareAreaPtr& area) { // Fullscreen share. @@ -166,6 +191,17 @@ dlp_content_manager->OnScreenShareStopped(label, media_id); } +void DlpAsh::ShowBlockedFiles(absl::optional<uint64_t> task_id, + const std::vector<base::FilePath>& blocked_files, + mojom::FileAction action) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + Profile* profile = ProfileManager::GetPrimaryUserProfile(); + DCHECK(profile); + ::policy::files_controller_ash_utils::ShowDlpBlockedFiles( + profile, task_id, blocked_files, ConvertMojoToDlpFileAction(action)); +} + void DlpAsh::ChangeScreenShareState( mojo::RemoteSetElementId id, const content::DesktopMediaID& media_id,
diff --git a/chrome/browser/ash/crosapi/dlp_ash.h b/chrome/browser/ash/crosapi/dlp_ash.h index aef82544..b5cfb24 100644 --- a/chrome/browser/ash/crosapi/dlp_ash.h +++ b/chrome/browser/ash/crosapi/dlp_ash.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_ASH_CROSAPI_DLP_ASH_H_ #define CHROME_BROWSER_ASH_CROSAPI_DLP_ASH_H_ +#include "base/files/file_path.h" #include "chromeos/crosapi/mojom/dlp.mojom.h" #include "content/public/browser/desktop_media_id.h" #include "content/public/browser/media_stream_request.h" @@ -40,6 +41,9 @@ ::mojo::PendingRemote<mojom::StateChangeDelegate> delegate) override; void OnScreenShareStopped(const std::string& label, mojom::ScreenShareAreaPtr area) override; + void ShowBlockedFiles(absl::optional<uint64_t> task_id, + const std::vector<base::FilePath>& blocked_files, + mojom::FileAction action) override; private: // Callback to pass request to change screen share state to remote.
diff --git a/chrome/browser/ash/crosapi/dlp_ash_unittest.cc b/chrome/browser/ash/crosapi/dlp_ash_unittest.cc index 86ca34e..ceee344 100644 --- a/chrome/browser/ash/crosapi/dlp_ash_unittest.cc +++ b/chrome/browser/ash/crosapi/dlp_ash_unittest.cc
@@ -6,9 +6,15 @@ #include "ash/test/ash_test_base.h" #include "base/test/bind.h" +#include "chrome/browser/ash/login/users/fake_chrome_user_manager.h" #include "chrome/browser/ash/policy/dlp/dlp_content_manager_ash.h" +#include "chrome/browser/ash/policy/dlp/files_policy_notification_manager_factory.h" +#include "chrome/browser/ash/policy/dlp/test/mock_files_policy_notification_manager.h" #include "chrome/browser/chromeos/policy/dlp/dlp_content_observer.h" #include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_content_manager.h" +#include "components/user_manager/scoped_user_manager.h" +#include "components/user_manager/user.h" +#include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/window.h" @@ -20,6 +26,8 @@ const std::u16string kAppId = u"app_id"; constexpr char kScreenShareLabel[] = "label"; +constexpr char kFilePath[] = "test.txt"; + class MockStateChangeDelegate : public mojom::StateChangeDelegate { public: MOCK_METHOD(void, OnPause, (), (override)); @@ -38,6 +46,11 @@ class DlpAshTest : public ash::AshTestBase { public: + explicit DlpAshTest( + std::unique_ptr<base::test::TaskEnvironment> task_environment) + : ash::AshTestBase(std::move(task_environment)) {} + DlpAshTest() {} + DlpAsh* dlp_ash() { return &dlp_ash_; } private: @@ -191,4 +204,102 @@ dlp_ash()->OnScreenShareStopped(kScreenShareLabel, std::move(area)); } +class DlpAshBlockUITest + : public DlpAshTest, + public ::testing::WithParamInterface< + std::pair<mojom::FileAction, policy::dlp::FileAction>> { + public: + DlpAshBlockUITest() + : DlpAshTest(std::unique_ptr<base::test::TaskEnvironment>( + std::make_unique<content::BrowserTaskEnvironment>( + base::test::TaskEnvironment::TimeSource::MOCK_TIME))) {} + + void SetUp() override { + DlpAshTest::SetUp(); + + auto user_manager = std::make_unique<ash::FakeChromeUserManager>(); + scoped_profile_ = std::make_unique<TestingProfile>(); + profile_ = scoped_profile_.get(); + AccountId account_id = + AccountId::FromUserEmailGaiaId("test@example.com", "12345"); + profile_->SetIsNewProfile(true); + user_manager::User* user = + user_manager->AddUserWithAffiliationAndTypeAndProfile( + account_id, + /*is_affiliated=*/false, user_manager::USER_TYPE_REGULAR, profile_); + user_manager->UserLoggedIn(account_id, user->username_hash(), + /*browser_restart=*/false, + /*is_child=*/false); + user_manager->SimulateUserProfileLoad(account_id); + scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>( + std::move(user_manager)); + + // Set FilesPolicyNotificationManager. + policy::FilesPolicyNotificationManagerFactory::GetInstance() + ->SetTestingFactory( + profile_.get(), + base::BindRepeating( + &DlpAshBlockUITest::SetFilesPolicyNotificationManager, + base::Unretained(this))); + + ASSERT_TRUE( + policy::FilesPolicyNotificationManagerFactory::GetForBrowserContext( + profile_.get())); + ASSERT_TRUE(fpnm_); + } + + protected: + raw_ptr<policy::MockFilesPolicyNotificationManager, + DisableDanglingPtrDetection | ExperimentalAsh> + fpnm_ = nullptr; + + private: + std::unique_ptr<KeyedService> SetFilesPolicyNotificationManager( + content::BrowserContext* context) { + auto fpnm = std::make_unique< + testing::StrictMock<policy::MockFilesPolicyNotificationManager>>( + profile_.get()); + fpnm_ = fpnm.get(); + + return fpnm; + } + + std::unique_ptr<TestingProfile> scoped_profile_; + std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_; + raw_ptr<TestingProfile> profile_; +}; + +INSTANTIATE_TEST_SUITE_P( + DlpAshBlockUI, + DlpAshBlockUITest, + ::testing::Values(std::make_tuple(mojom::FileAction::kUnknown, + policy::dlp::FileAction::kUnknown), + std::make_tuple(mojom::FileAction::kDownload, + policy::dlp::FileAction::kDownload), + std::make_tuple(mojom::FileAction::kTransfer, + policy::dlp::FileAction::kTransfer), + std::make_tuple(mojom::FileAction::kUpload, + policy::dlp::FileAction::kUpload), + std::make_tuple(mojom::FileAction::kCopy, + policy::dlp::FileAction::kCopy), + std::make_tuple(mojom::FileAction::kMove, + policy::dlp::FileAction::kMove), + std::make_tuple(mojom::FileAction::kOpen, + policy::dlp::FileAction::kOpen), + std::make_tuple(mojom::FileAction::kShare, + policy::dlp::FileAction::kShare))); + +TEST_P(DlpAshBlockUITest, ShowBlockedFiles) { + auto [mojo_action, dlp_action] = GetParam(); + + absl::optional<uint64_t> task_id = absl::nullopt; + base::FilePath path(kFilePath); + + EXPECT_CALL(*fpnm_, + ShowDlpBlockedFiles(task_id, std::vector<base::FilePath>{path}, + dlp_action)); + + dlp_ash()->ShowBlockedFiles(task_id, {path}, mojo_action); +} + } // namespace crosapi
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller_ash.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller_ash.cc index 947b8bfa..f3eeb60a 100644 --- a/chrome/browser/ash/policy/dlp/dlp_files_controller_ash.cc +++ b/chrome/browser/ash/policy/dlp/dlp_files_controller_ash.cc
@@ -40,6 +40,7 @@ #include "chrome/browser/ash/file_manager/volume_manager.h" #include "chrome/browser/ash/file_system_provider/service.h" #include "chrome/browser/ash/policy/dlp/dlp_extract_io_task_observer.h" +#include "chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.h" #include "chrome/browser/ash/policy/dlp/dlp_files_event_storage.h" #include "chrome/browser/ash/policy/dlp/files_policy_notification_manager.h" #include "chrome/browser/ash/policy/dlp/files_policy_notification_manager_factory.h" @@ -138,23 +139,6 @@ return file_system_urls; } -// Shows DLP block desktop notification. -void ShowDlpBlockedFiles(Profile* profile, - std::optional<file_manager::io_task::IOTaskId> task_id, - std::vector<base::FilePath> blocked_files, - dlp::FileAction action) { - auto* fpnm = - FilesPolicyNotificationManagerFactory::GetForBrowserContext(profile); - if (!fpnm) { - LOG(ERROR) << "No FilesPolicyNotificationManager instantiated," - "can't show policy block UI"; - return; - } - - fpnm->ShowDlpBlockedFiles(std::move(task_id), std::move(blocked_files), - action); -} - file_manager::VolumeManager* GetVolumeManager( content::BrowserContext* context) { CHECK(context); @@ -401,9 +385,9 @@ } } if (!is_allowed) { - ::policy::ShowDlpBlockedFiles(profile, /*task_id=*/std::nullopt, - {file_path}, - dlp::FileAction::kDownload); + ::policy::files_controller_ash_utils::ShowDlpBlockedFiles( + profile, /*task_id=*/absl::nullopt, {file_path}, + dlp::FileAction::kDownload); } std::move(result_callback).Run(is_allowed); }, @@ -760,8 +744,8 @@ std::optional<file_manager::io_task::IOTaskId> task_id, std::vector<base::FilePath> blocked_files, dlp::FileAction action) { - ::policy::ShowDlpBlockedFiles(profile_, std::move(task_id), - std::move(blocked_files), action); + ::policy::files_controller_ash_utils::ShowDlpBlockedFiles( + profile_, std::move(task_id), std::move(blocked_files), action); } void DlpFilesControllerAsh::OnDlpWarnDialogReply( @@ -820,9 +804,9 @@ if (!restricted_files_paths.empty() && base::FeatureList::IsEnabled(features::kNewFilesPolicyUX) && task_id.has_value()) { - ::policy::ShowDlpBlockedFiles(profile_, std::move(task_id), - std::move(restricted_files_paths), - file_action); + ::policy::files_controller_ash_utils::ShowDlpBlockedFiles( + profile_, std::move(task_id), std::move(restricted_files_paths), + file_action); } std::move(result_callback).Run(std::move(restricted_files_urls)); } @@ -853,9 +837,9 @@ }); }); - ::policy::ShowDlpBlockedFiles(profile_, /*task_id=*/std::nullopt, - std::move(restricted_files), - dlp::FileAction::kUpload); + ::policy::files_controller_ash_utils::ShowDlpBlockedFiles( + profile_, /*task_id=*/absl::nullopt, std::move(restricted_files), + dlp::FileAction::kUpload); } std::move(result_callback).Run(std::move(selected_files));
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.cc new file mode 100644 index 0000000..bbb00b47 --- /dev/null +++ b/chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.cc
@@ -0,0 +1,35 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.h" + +#include "base/files/file_path.h" +#include "chrome/browser/ash/file_manager/io_task.h" +#include "chrome/browser/ash/policy/dlp/files_policy_notification_manager.h" +#include "chrome/browser/ash/policy/dlp/files_policy_notification_manager_factory.h" +#include "chrome/browser/chromeos/policy/dlp/dlp_files_utils.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" + +namespace policy::files_controller_ash_utils { + +void ShowDlpBlockedFiles( + Profile* profile, + absl::optional<file_manager::io_task::IOTaskId> task_id, + std::vector<base::FilePath> blocked_files, + dlp::FileAction action) { + DCHECK(profile); + + auto* fpnm = + FilesPolicyNotificationManagerFactory::GetForBrowserContext(profile); + if (!fpnm) { + LOG(ERROR) << "No FilesPolicyNotificationManager instantiated," + "can't show policy block UI"; + return; + } + + fpnm->ShowDlpBlockedFiles(std::move(task_id), std::move(blocked_files), + action); +} +} // namespace policy::files_controller_ash_utils
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.h b/chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.h new file mode 100644 index 0000000..e620ff1f --- /dev/null +++ b/chrome/browser/ash/policy/dlp/dlp_files_controller_ash_utils.h
@@ -0,0 +1,24 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ASH_POLICY_DLP_DLP_FILES_CONTROLLER_ASH_UTILS_H_ +#define CHROME_BROWSER_ASH_POLICY_DLP_DLP_FILES_CONTROLLER_ASH_UTILS_H_ + +#include "base/files/file_path.h" +#include "chrome/browser/ash/file_manager/io_task.h" +#include "chrome/browser/chromeos/policy/dlp/dlp_files_utils.h" +#include "chrome/browser/profiles/profile.h" + +namespace policy::files_controller_ash_utils { + +// Shows a DLP block desktop notification. +void ShowDlpBlockedFiles( + Profile* profile, + absl::optional<file_manager::io_task::IOTaskId> task_id, + std::vector<base::FilePath> blocked_files, + dlp::FileAction action); + +} // namespace policy::files_controller_ash_utils + +#endif // CHROME_BROWSER_ASH_POLICY_DLP_DLP_FILES_CONTROLLER_ASH_UTILS_H_
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc index f97fdf9e..5f60f83 100644 --- a/chrome/browser/autofill/autofill_interactive_uitest.cc +++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -1164,6 +1164,10 @@ // Modify a field. ASSERT_TRUE(FocusField(GetElementById("city"), GetWebContents())); FillElementWithValue("city", "Montreal"); + + ASSERT_TRUE(AutofillFlow(GetElementById("firstname"), this)); + EXPECT_THAT(GetFormValues(), + ValuesAre(MergeValue(kDefaultAddress, {"city", "Montreal"}))); } IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ModifyTextNotifiesObserver) {
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index fbac4b0..bccd339 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -469,6 +469,8 @@ "policy/dlp/test/mock_dlp_content_manager.h", "policy/dlp/test/mock_dlp_content_observer.cc", "policy/dlp/test/mock_dlp_content_observer.h", + "policy/dlp/test/mock_dlp_crosapi.cc", + "policy/dlp/test/mock_dlp_crosapi.h", "policy/dlp/test/mock_dlp_rules_manager.cc", "policy/dlp/test/mock_dlp_rules_manager.h", ]
diff --git a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.cc b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.cc index eadce00..ce4eb8b 100644 --- a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.cc +++ b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.cc
@@ -14,6 +14,7 @@ #include "base/time/time.h" #include "base/types/optional_util.h" #include "build/chromeos_buildflags.h" +#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller.h" #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h" #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h" #include "chrome/browser/enterprise/data_controls/dlp_reporting_manager.h" @@ -27,7 +28,6 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) #include "ash/webui/file_manager/url_constants.h" -#include "chrome/browser/ash/policy/dlp/dlp_files_controller_ash.h" #endif // BUILDFLAG(IS_CHROMEOS_ASH) namespace policy { @@ -208,9 +208,7 @@ std::move(paste_cb).Run(should_proceed); } -#if BUILDFLAG(IS_CHROMEOS_ASH) -// Returns file paths from the given file infos. Currently only used in ChromeOS -// Ash. +// Returns file paths from the given file infos. std::vector<base::FilePath> GetFilePathsFromFileInfos( const std::vector<ui::FileInfo>& files) { std::vector<base::FilePath> paths; @@ -220,7 +218,6 @@ } return paths; } -#endif // BUILDFLAG(IS_CHROMEOS_ASH) } // namespace @@ -311,18 +308,14 @@ base::OnceCallback<void(bool)> paste_cb) { if (absl::holds_alternative<std::vector<base::FilePath>>(pasted_content) && !IsFilesApp(data_dst)) { -#if BUILDFLAG(IS_CHROMEOS_ASH) auto pasted_files = std::move(absl::get<std::vector<base::FilePath>>(pasted_content)); - auto* files_controller = static_cast<policy::DlpFilesControllerAsh*>( - dlp_rules_manager_->GetDlpFilesController()); + auto* files_controller = dlp_rules_manager_->GetDlpFilesController(); if (files_controller) { files_controller->CheckIfPasteOrDropIsAllowed( pasted_files, data_dst.as_ptr(), std::move(paste_cb)); } return; -#endif - // TODO(b/269610458): Check pasted files in Lacros. } if (absl::holds_alternative<size_t>(pasted_content)) { @@ -342,25 +335,23 @@ DCHECK(drag_data); if (drag_data->HasFile() && !IsFilesApp(data_dst)) { -#if BUILDFLAG(IS_CHROMEOS_ASH) - auto* files_controller = static_cast<policy::DlpFilesControllerAsh*>( - dlp_rules_manager_->GetDlpFilesController()); + auto* files_controller = dlp_rules_manager_->GetDlpFilesController(); if (files_controller) { std::vector<ui::FileInfo> dropped_files; drag_data->GetFilenames(&dropped_files); files_controller->CheckIfPasteOrDropIsAllowed( GetFilePathsFromFileInfos(dropped_files), data_dst.as_ptr(), - base::BindOnce(&DataTransferDlpController::ContinueDropIfAllowed, - weak_ptr_factory_.GetWeakPtr(), - *drag_data->GetSource(), data_dst, - std::move(drop_cb))); + base::BindOnce( + [](base::OnceClosure drop_cb, bool is_allowed) { + if (is_allowed) { + std::move(drop_cb).Run(); + } + }, + std::move(drop_cb))); return; } -#endif - // TODO(b/269610458): Check dropped files in Lacros. } - ContinueDropIfAllowed(*drag_data->GetSource(), data_dst, std::move(drop_cb), - /*is_allowed=*/true); + ContinueDropIfAllowed(*drag_data->GetSource(), data_dst, std::move(drop_cb)); } DataTransferDlpController::DataTransferDlpController( @@ -565,24 +556,16 @@ void DataTransferDlpController::ContinueDropIfAllowed( base::optional_ref<const ui::DataTransferEndpoint> data_src, base::optional_ref<const ui::DataTransferEndpoint> data_dst, - base::OnceClosure drop_cb, - bool is_allowed) { - DlpRulesManager::Level level; - if (!is_allowed) { - level = DlpRulesManager::Level::kBlock; - // TODO(b/269609831): Return here once the correct UI is implemented in - // DlpFilesController. - } else { - std::string src_pattern; - std::string dst_pattern; - DlpRulesManager::RuleMetadata rule_metadata; - level = IsDataTransferAllowed(*dlp_rules_manager_, data_src, data_dst, - absl::nullopt, &src_pattern, &dst_pattern, - &rule_metadata); + base::OnceClosure drop_cb) { + std::string src_pattern; + std::string dst_pattern; + DlpRulesManager::RuleMetadata rule_metadata; + DlpRulesManager::Level level = IsDataTransferAllowed( + *dlp_rules_manager_, data_src, data_dst, absl::nullopt, &src_pattern, + &dst_pattern, &rule_metadata); - MaybeReportEvent(data_src, data_dst, src_pattern, dst_pattern, level, - /*is_clipboard_event=*/false, rule_metadata); - } + MaybeReportEvent(data_src, data_dst, src_pattern, dst_pattern, level, + /*is_clipboard_event=*/false, rule_metadata); switch (level) { case DlpRulesManager::Level::kBlock:
diff --git a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.h b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.h index cf0b4f6..8121d72f 100644 --- a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.h +++ b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller.h
@@ -129,8 +129,7 @@ void ContinueDropIfAllowed( base::optional_ref<const ui::DataTransferEndpoint> data_src, base::optional_ref<const ui::DataTransferEndpoint> data_dst, - base::OnceClosure drop_cb, - bool is_allowed); + base::OnceClosure drop_cb); // Performs clipbpoard restriction related checks. void ContinuePasteIfClipboardRestrictionsAllow(
diff --git a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc index 1b8811c..cf5f72c 100644 --- a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc +++ b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_unittest.cc
@@ -14,6 +14,7 @@ #include "base/test/mock_callback.h" #include "base/types/optional_util.h" #include "build/chromeos_buildflags.h" +#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller.h" #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h" #include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_rules_manager.h" #include "chrome/browser/enterprise/data_controls/dlp_reporting_manager.h" @@ -41,10 +42,6 @@ #include "chromeos/lacros/lacros_service.h" #endif // BUILDFLAG(IS_CHROMEOS_LACROS) -#if BUILDFLAG(IS_CHROMEOS_ASH) -#include "chrome/browser/ash/policy/dlp/dlp_files_controller_ash.h" -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - namespace policy { namespace { @@ -336,13 +333,10 @@ EXPECT_TRUE(events_.empty()); } -#if BUILDFLAG(IS_CHROMEOS_ASH) - -class MockFilesController : public policy::DlpFilesControllerAsh { +class MockFilesController : public policy::DlpFilesController { public: - explicit MockFilesController(const policy::DlpRulesManager& rules_manager, - Profile* profile) - : DlpFilesControllerAsh(rules_manager, profile) {} + explicit MockFilesController(const policy::DlpRulesManager& rules_manager) + : DlpFilesController(rules_manager) {} ~MockFilesController() override = default; MOCK_METHOD(void, @@ -351,6 +345,23 @@ const ui::DataTransferEndpoint* data_dst, CheckIfDlpAllowedCallback result_callback), (override)); + + MOCK_METHOD(absl::optional<data_controls::Component>, + MapFilePathToPolicyComponent, + (Profile * profile, const base::FilePath& file_path), + (override)); + + MOCK_METHOD(bool, + IsInLocalFileSystem, + (const base::FilePath& file_path), + (override)); + + MOCK_METHOD(void, + ShowDlpBlockedFiles, + (absl::optional<uint64_t> task_id, + std::vector<base::FilePath> blocked_files, + dlp::FileAction action), + (override)); }; TEST_F(DataTransferDlpControllerTest, DropFile_Blocked) { @@ -363,7 +374,7 @@ extension_misc::kFilesManagerAppId})))); ui::DataTransferEndpoint data_dst((GURL(kExample1Url))); - MockFilesController files_controller(*rules_manager_, testing_profile_.get()); + MockFilesController files_controller(*rules_manager_); std::vector<ui::FileInfo> file_names; ASSERT_TRUE(drag_data.GetFilenames(&file_names)); @@ -373,15 +384,9 @@ std::vector<base::FilePath>{path}, &data_dst, base::test::IsNotNullCallback())) .WillOnce(base::test::RunOnceCallback<2>(false)); - EXPECT_CALL(*dlp_controller_, NotifyBlockedDrop); ::testing::StrictMock<base::MockOnceClosure> drop_callback; dlp_controller_->DropIfAllowed(&drag_data, &data_dst, drop_callback.Get()); - - histogram_tester_.ExpectUniqueSample( - data_controls::GetDlpHistogramPrefix() + - data_controls::dlp::kDragDropBlockedUMA, - true, 1); } TEST_F(DataTransferDlpControllerTest, DropFile_Allowed) { @@ -394,14 +399,12 @@ extension_misc::kFilesManagerAppId})))); ui::DataTransferEndpoint data_dst((GURL(kExample1Url))); - MockFilesController files_controller(*rules_manager_, testing_profile_.get()); + MockFilesController files_controller(*rules_manager_); std::vector<ui::FileInfo> file_names; ASSERT_TRUE(drag_data.GetFilenames(&file_names)); EXPECT_CALL(*rules_manager_, GetDlpFilesController) .WillOnce(testing::Return(&files_controller)); - EXPECT_CALL(*rules_manager_, IsRestrictedDestination) - .WillOnce(testing::Return(DlpRulesManager::Level::kAllow)); EXPECT_CALL(files_controller, CheckIfPasteOrDropIsAllowed( std::vector<base::FilePath>{path}, &data_dst, base::test::IsNotNullCallback())) @@ -410,11 +413,6 @@ ::testing::StrictMock<base::MockOnceClosure> drop_callback; EXPECT_CALL(drop_callback, Run); dlp_controller_->DropIfAllowed(&drag_data, &data_dst, drop_callback.Get()); - - histogram_tester_.ExpectUniqueSample( - data_controls::GetDlpHistogramPrefix() + - data_controls::dlp::kDragDropBlockedUMA, - false, 1); } TEST_F(DataTransferDlpControllerTest, PasteFile_Blocked) { @@ -423,7 +421,7 @@ auto path = base::FilePath("file1.txt"); ui::DataTransferEndpoint data_dst((GURL(kExample1Url))); - MockFilesController files_controller(*rules_manager_, testing_profile_.get()); + MockFilesController files_controller(*rules_manager_); EXPECT_CALL(*rules_manager_, GetDlpFilesController) .WillOnce(testing::Return(&files_controller)); @@ -450,7 +448,7 @@ auto path = base::FilePath("file1.txt"); ui::DataTransferEndpoint data_dst((GURL(kExample1Url))); - MockFilesController files_controller(*rules_manager_, testing_profile_.get()); + MockFilesController files_controller(*rules_manager_); EXPECT_CALL(*rules_manager_, GetDlpFilesController) .WillOnce(testing::Return(&files_controller)); @@ -471,8 +469,6 @@ paste_callback.Get()); } -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - // Create a version of the test class for parameterized testing. class DlpControllerTest : public DataTransferDlpControllerTest { protected:
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros_browsertest.cc index 8c4e5d55..7936473 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros_browsertest.cc +++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_lacros_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/test/bind.h" #include "chrome/browser/chromeos/policy/dlp/test/dlp_content_manager_test_helper.h" +#include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h" #include "chrome/test/base/in_process_browser_test.h" #include "chromeos/crosapi/mojom/dlp.mojom.h" #include "chromeos/lacros/lacros_service.h" @@ -22,34 +23,6 @@ const std::u16string kAppId = u"app_id"; constexpr char kScreenShareLabel[] = "label"; -// TODO(crbug.com/1291609): Mock Lacros side of crosapi instead when possible. -// This will allow these tests to be just unit_tests, not -// lacros_chrome_browsertests. -class MockDlpCrosapi : public crosapi::mojom::Dlp { - public: - MOCK_METHOD(void, - DlpRestrictionsUpdated, - (const std::string&, crosapi::mojom::DlpRestrictionSetPtr), - (override)); - MOCK_METHOD(void, - CheckScreenShareRestriction, - (crosapi::mojom::ScreenShareAreaPtr, - const std::u16string&, - CheckScreenShareRestrictionCallback), - (override)); - MOCK_METHOD(void, - OnScreenShareStarted, - (const std::string&, - crosapi::mojom::ScreenShareAreaPtr, - const ::std::u16string&, - ::mojo::PendingRemote<crosapi::mojom::StateChangeDelegate>), - (override)); - MOCK_METHOD(void, - OnScreenShareStopped, - (const std::string&, crosapi::mojom::ScreenShareAreaPtr), - (override)); -}; - } // namespace class DlpContentManagerLacrosBrowserTest : public InProcessBrowserTest {
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.cc b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.cc index 0363c86..26a1e31 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.cc +++ b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.cc
@@ -10,8 +10,32 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_paths_lacros.h" +#include "chromeos/crosapi/mojom/dlp.mojom.h" +#include "chromeos/lacros/lacros_service.h" namespace policy { +namespace { +crosapi::mojom::FileAction ConvertFileActionToMojo(dlp::FileAction action) { + switch (action) { + case dlp::FileAction::kUnknown: + return crosapi::mojom::FileAction::kUnknown; + case dlp::FileAction::kDownload: + return crosapi::mojom::FileAction::kDownload; + case dlp::FileAction::kTransfer: + return crosapi::mojom::FileAction::kTransfer; + case dlp::FileAction::kUpload: + return crosapi::mojom::FileAction::kUpload; + case dlp::FileAction::kCopy: + return crosapi::mojom::FileAction::kCopy; + case dlp::FileAction::kMove: + return crosapi::mojom::FileAction::kMove; + case dlp::FileAction::kOpen: + return crosapi::mojom::FileAction::kOpen; + case dlp::FileAction::kShare: + return crosapi::mojom::FileAction::kShare; + } +} +} // namespace DlpFilesControllerLacros::DlpFilesControllerLacros( const DlpRulesManager& rules_manager) @@ -62,7 +86,13 @@ absl::optional<uint64_t> task_id, std::vector<base::FilePath> blocked_files, dlp::FileAction action) { - // TODO(b/314907867): Show blocked files in Lacros. + chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get(); + if (!lacros_service->IsAvailable<crosapi::mojom::Dlp>()) { + LOG(WARNING) << "DLP mojo service not available"; + return; + } + lacros_service->GetRemote<crosapi::mojom::Dlp>()->ShowBlockedFiles( + task_id, std::move(blocked_files), ConvertFileActionToMojo(action)); } } // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h index 354c4b3..e157b4d3 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h +++ b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h
@@ -28,8 +28,12 @@ std::vector<base::FilePath> blocked_files, dlp::FileAction action) override; + // TODO(b/284122497): Cleanup friend for testing FRIEND_TEST_ALL_PREFIXES(DlpFilesControllerLacrosTest, MapFilePathToPolicyComponentTest); + + FRIEND_TEST_ALL_PREFIXES(DlpFilesControllerLacrosBlockUITest, + ShowDlpBlockedFilesTest); }; } // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_browsertest.cc new file mode 100644 index 0000000..3a96c7ff --- /dev/null +++ b/chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros_browsertest.cc
@@ -0,0 +1,142 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/policy/dlp/dlp_files_controller_lacros.h" + +#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h" +#include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h" +#include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_rules_manager.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chromeos/crosapi/mojom/dlp.mojom.h" +#include "chromeos/lacros/lacros_service.h" +#include "chromeos/startup/browser_init_params.h" +#include "content/public/test/browser_test.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace policy { + +namespace { +constexpr char kFilePath[] = "test.txt"; +} // namespace + +class DlpFilesControllerLacrosBlockUITest + : public InProcessBrowserTest, + public ::testing::WithParamInterface< + std::pair<crosapi::mojom::FileAction, policy::dlp::FileAction>> { + public: + // InProcessBrowserTest: + void SetUpOnMainThread() override { + InProcessBrowserTest::SetUpOnMainThread(); + + // If DLP interface is not available on this version of ash-chrome, this + // test suite will no-op. + if (!IsServiceAvailable()) { + return; + } + + // Replace the production DLP service with a mock for testing. + mojo::Remote<crosapi::mojom::Dlp>& remote = + chromeos::LacrosService::Get()->GetRemote<crosapi::mojom::Dlp>(); + remote.reset(); + receiver_.Bind(remote.BindNewPipeAndPassReceiver()); + + ASSERT_TRUE(browser()); + policy::DlpRulesManagerFactory::GetInstance()->SetTestingFactory( + browser()->profile(), + base::BindRepeating( + &DlpFilesControllerLacrosBlockUITest::SetDlpRulesManager, + base::Unretained(this))); + ASSERT_TRUE(policy::DlpRulesManagerFactory::GetForPrimaryProfile()); + ASSERT_TRUE(rules_manager_); + + files_controller_ = + std::make_unique<DlpFilesControllerLacros>(*rules_manager_); + } + + void TearDownOnMainThread() override { + InProcessBrowserTest::TearDownOnMainThread(); + } + + std::unique_ptr<KeyedService> SetDlpRulesManager( + content::BrowserContext* context) { + auto dlp_rules_manager = std::make_unique<MockDlpRulesManager>( + Profile::FromBrowserContext(context)); + rules_manager_ = dlp_rules_manager.get(); + return dlp_rules_manager; + } + + // Returns whether the DLP interface is available. It may + // not be available on earlier versions of ash-chrome. + bool IsServiceAvailable() const { + chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get(); + return lacros_service && lacros_service->IsAvailable<crosapi::mojom::Dlp>(); + } + + void SetDlpInterfaceVersion(int version) { + crosapi::mojom::BrowserInitParamsPtr init_params = + chromeos::BrowserInitParams::GetForTests()->Clone(); + init_params->interface_versions.value()[crosapi::mojom::Dlp::Uuid_] = + version; + chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params)); + } + + testing::StrictMock<MockDlpCrosapi>& service() { return service_; } + + protected: + testing::StrictMock<MockDlpCrosapi> service_; + mojo::Receiver<crosapi::mojom::Dlp> receiver_{&service_}; + + raw_ptr<MockDlpRulesManager, DisableDanglingPtrDetection> rules_manager_ = + nullptr; + + std::unique_ptr<DlpFilesControllerLacros> files_controller_; +}; + +INSTANTIATE_TEST_SUITE_P( + DlpFilesControllerLacrosBlockUI, + DlpFilesControllerLacrosBlockUITest, + ::testing::Values(std::make_tuple(crosapi::mojom::FileAction::kUnknown, + policy::dlp::FileAction::kUnknown), + std::make_tuple(crosapi::mojom::FileAction::kDownload, + policy::dlp::FileAction::kDownload), + std::make_tuple(crosapi::mojom::FileAction::kTransfer, + policy::dlp::FileAction::kTransfer), + std::make_tuple(crosapi::mojom::FileAction::kUpload, + policy::dlp::FileAction::kUpload), + std::make_tuple(crosapi::mojom::FileAction::kCopy, + policy::dlp::FileAction::kCopy), + std::make_tuple(crosapi::mojom::FileAction::kMove, + policy::dlp::FileAction::kMove), + std::make_tuple(crosapi::mojom::FileAction::kOpen, + policy::dlp::FileAction::kOpen), + std::make_tuple(crosapi::mojom::FileAction::kShare, + policy::dlp::FileAction::kShare))); + +IN_PROC_BROWSER_TEST_P(DlpFilesControllerLacrosBlockUITest, + ShowDlpBlockedFilesTest) { + auto [mojo_action, dlp_action] = GetParam(); + + // If DLP interface is not available on this version of ash-chrome, this test + // suite will no-op. + if (!IsServiceAvailable()) { + return; + } + + SetDlpInterfaceVersion(service().Version_); + + absl::optional<uint64_t> task_id = absl::nullopt; + base::FilePath path(kFilePath); + + EXPECT_CALL(service(), + ShowBlockedFiles(task_id, std::vector<base::FilePath>{path}, + mojo_action)); + + files_controller_->ShowDlpBlockedFiles(task_id, {path}, dlp_action); +} + +} // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.cc b/chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.cc new file mode 100644 index 0000000..d4e631c --- /dev/null +++ b/chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.cc
@@ -0,0 +1,13 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h" + +namespace policy { + +MockDlpCrosapi::MockDlpCrosapi() {} + +MockDlpCrosapi::~MockDlpCrosapi() = default; + +} // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h b/chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h new file mode 100644 index 0000000..5e63241 --- /dev/null +++ b/chrome/browser/chromeos/policy/dlp/test/mock_dlp_crosapi.h
@@ -0,0 +1,52 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_POLICY_DLP_TEST_MOCK_DLP_CROSAPI_H_ +#define CHROME_BROWSER_CHROMEOS_POLICY_DLP_TEST_MOCK_DLP_CROSAPI_H_ + +#include "chromeos/crosapi/mojom/dlp.mojom.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace policy { + +// TODO(crbug.com/1291609): Mock Lacros side of crosapi instead when possible. +// This will allow these tests to be just unit_tests, not +// lacros_chrome_browsertests. +class MockDlpCrosapi : public crosapi::mojom::Dlp { + public: + MockDlpCrosapi(); + ~MockDlpCrosapi() override; + + MOCK_METHOD(void, + DlpRestrictionsUpdated, + (const std::string&, crosapi::mojom::DlpRestrictionSetPtr), + (override)); + MOCK_METHOD(void, + CheckScreenShareRestriction, + (crosapi::mojom::ScreenShareAreaPtr, + const std::u16string&, + CheckScreenShareRestrictionCallback), + (override)); + MOCK_METHOD(void, + OnScreenShareStarted, + (const std::string&, + crosapi::mojom::ScreenShareAreaPtr, + const ::std::u16string&, + ::mojo::PendingRemote<crosapi::mojom::StateChangeDelegate>), + (override)); + MOCK_METHOD(void, + OnScreenShareStopped, + (const std::string&, crosapi::mojom::ScreenShareAreaPtr), + (override)); + MOCK_METHOD(void, + ShowBlockedFiles, + (absl::optional<uint64_t> task_id, + const std::vector<base::FilePath>& blocked_files, + crosapi::mojom::FileAction action), + (override)); +}; + +} // namespace policy + +#endif // CHROME_BROWSER_CHROMEOS_POLICY_DLP_TEST_MOCK_DLP_CROSAPI_H_
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 4be4fe3..850d297 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -4666,16 +4666,6 @@ "Use Credential Management API for passkeys. Requires Android 14 or " "higher."; -const char kWebApkInstallFailureNotificationName[] = - "Web app install failure notification"; -const char kWebApkInstallFailureNotificationDescription[] = - "Enables showing a notification when web app install failed"; - -const char kWebApkInstallFailureRetryName[] = "Web app install retry"; -const char kWebApkInstallFailureRetryDescription[] = - "Allows user to retry failed web app installs with the failure " - "notification"; - const char kWebFeedName[] = "Web Feed"; const char kWebFeedDescription[] = "Allows users to keep up with and consume web content.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index a02b4bc..6789f8c 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2691,12 +2691,6 @@ extern const char kWebAuthnAndroidCredManName[]; extern const char kWebAuthnAndroidCredManDescription[]; -extern const char kWebApkInstallFailureNotificationName[]; -extern const char kWebApkInstallFailureNotificationDescription[]; - -extern const char kWebApkInstallFailureRetryName[]; -extern const char kWebApkInstallFailureRetryDescription[]; - extern const char kWebFeedName[]; extern const char kWebFeedDescription[];
diff --git a/chrome/browser/lacros/input_method_lacros_browsertest.cc b/chrome/browser/lacros/input_method_lacros_browsertest.cc index 928b168..fe41a922 100644 --- a/chrome/browser/lacros/input_method_lacros_browsertest.cc +++ b/chrome/browser/lacros/input_method_lacros_browsertest.cc
@@ -880,8 +880,9 @@ EXPECT_FALSE(event_listener.HasMessages()); } +// TODO(crbug.com/1510768): Reenable once fixed. IN_PROC_BROWSER_TEST_P(InputMethodLacrosBrowserTest, - SetCompositionUpdatesSurroundingText) { + DISABLED_SetCompositionUpdatesSurroundingText) { mojo::Remote<InputMethodTestInterface> input_method = BindInputMethodTestInterface(GetParam()); if (!input_method.is_bound()) {
diff --git a/chrome/browser/new_tab_page/modules/v2/tab_resumption/BUILD.gn b/chrome/browser/new_tab_page/modules/v2/tab_resumption/BUILD.gn index 2d3d363..4e38725 100644 --- a/chrome/browser/new_tab_page/modules/v2/tab_resumption/BUILD.gn +++ b/chrome/browser/new_tab_page/modules/v2/tab_resumption/BUILD.gn
@@ -5,7 +5,6 @@ mojom("mojo_bindings") { sources = [ "tab_resumption.mojom" ] webui_module_path = "/" - use_typescript_sources = true public_deps = [ "//components/history/core/browser/mojom:mojo_bindings", "//mojo/public/mojom/base",
diff --git a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/tests/utils/FakePasswordCheckupClientHelperTest.java b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/tests/utils/FakePasswordCheckupClientHelperTest.java index 5c7141b..da928e1e 100644 --- a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/tests/utils/FakePasswordCheckupClientHelperTest.java +++ b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/tests/utils/FakePasswordCheckupClientHelperTest.java
@@ -7,7 +7,6 @@ import static android.os.Looper.getMainLooper; import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; import static org.robolectric.Shadows.shadowOf; import android.app.PendingIntent; @@ -15,6 +14,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import org.chromium.base.test.BaseRobolectricTestRunner; @@ -34,35 +35,55 @@ public class FakePasswordCheckupClientHelperTest { private static final String TEST_ACCOUNT = "test@example.com"; private FakePasswordCheckupClientHelper mFakeHelper; + @Mock private PendingIntent mPendingIntentForLocalCheckupMock; + @Mock private PendingIntent mPendingIntentForAccountCheckupMock; + + private final PayloadCallbackHelper<PendingIntent> mSuccessCallbackHelper = + new PayloadCallbackHelper<>(); + private final PayloadCallbackHelper<Exception> mFailureCallbackHelper = + new PayloadCallbackHelper<>(); @Before public void setUp() { + MockitoAnnotations.initMocks(this); mFakeHelper = new FakePasswordCheckupClientHelper(); - mFakeHelper.setIntent(mock(PendingIntent.class)); + mFakeHelper.setIntentForLocalCheckup(mPendingIntentForLocalCheckupMock); + mFakeHelper.setIntentForAccountCheckup(mPendingIntentForAccountCheckupMock); } @Test - public void testGetPasswordCheckupIntentSucceeds() { - final PendingIntent pendingIntentMock = mock(PendingIntent.class); - mFakeHelper.setIntent(pendingIntentMock); - - final PayloadCallbackHelper<PendingIntent> successCallbackHelper = - new PayloadCallbackHelper<>(); - final PayloadCallbackHelper<Exception> failureCallbackHelper = - new PayloadCallbackHelper<>(); - + public void testGetPasswordCheckupIntentForLocalCheckupSucceeds() { mFakeHelper.getPasswordCheckupIntent( PasswordCheckReferrer.SAFETY_CHECK, - Optional.of(TEST_ACCOUNT), - successCallbackHelper::notifyCalled, - failureCallbackHelper::notifyCalled); + Optional.empty(), + mSuccessCallbackHelper::notifyCalled, + mFailureCallbackHelper::notifyCalled); // Move the clock forward shadowOf(getMainLooper()).idle(); // Verify that success callback was called. - assertEquals(successCallbackHelper.getOnlyPayloadBlocking(), pendingIntentMock); + assertEquals( + mSuccessCallbackHelper.getOnlyPayloadBlocking(), mPendingIntentForLocalCheckupMock); // Verify that failure callback was not called. - assertEquals(failureCallbackHelper.getCallCount(), 0); + assertEquals(mFailureCallbackHelper.getCallCount(), 0); + } + + @Test + public void testGetPasswordCheckupIntentForAccountCheckupSucceeds() { + mFakeHelper.getPasswordCheckupIntent( + PasswordCheckReferrer.SAFETY_CHECK, + Optional.of(TEST_ACCOUNT), + mSuccessCallbackHelper::notifyCalled, + mFailureCallbackHelper::notifyCalled); + + // Move the clock forward + shadowOf(getMainLooper()).idle(); + // Verify that success callback was called. + assertEquals( + mSuccessCallbackHelper.getOnlyPayloadBlocking(), + mPendingIntentForAccountCheckupMock); + // Verify that failure callback was not called. + assertEquals(mFailureCallbackHelper.getCallCount(), 0); } @Test
diff --git a/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordCheckupClientHelper.java b/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordCheckupClientHelper.java index db9ce9e..3625b1f 100644 --- a/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordCheckupClientHelper.java +++ b/chrome/browser/password_manager/android/test_support/java/src/org/chromium/chrome/browser/password_manager/FakePasswordCheckupClientHelper.java
@@ -12,12 +12,17 @@ /** Fake {@link PasswordCheckupClientHelper} to be used in integration tests. */ public class FakePasswordCheckupClientHelper implements PasswordCheckupClientHelper { - private PendingIntent mPendingIntent; + private PendingIntent mPendingIntentForLocalCheckup; + private PendingIntent mPendingIntentForAccountCheckup; private Integer mBreachedCredentialsCount; private Exception mError; - public void setIntent(PendingIntent pendingIntent) { - mPendingIntent = pendingIntent; + public void setIntentForLocalCheckup(PendingIntent pendingIntent) { + mPendingIntentForLocalCheckup = pendingIntent; + } + + public void setIntentForAccountCheckup(PendingIntent pendingIntent) { + mPendingIntentForAccountCheckup = pendingIntent; } public void setBreachedCredentialsCount(Integer count) { @@ -38,7 +43,10 @@ failureCallback.onResult(mError); return; } - successCallback.onResult(mPendingIntent); + successCallback.onResult( + accountName.isPresent() + ? mPendingIntentForAccountCheckup + : mPendingIntentForLocalCheckup); } @Override
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index e6ca2f5..da3656d 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -2661,6 +2661,12 @@ // Added 11/2023. profile_prefs->ClearPref(kWebAndAppActivityEnabledForShopping); +#if !BUILDFLAG(IS_ANDROID) + // Added 12/2023. + password_manager::features_util::MigrateDeclinedSaveOptInToExplicitOptOut( + profile_prefs); +#endif // !BUILDFLAG(IS_ANDROID) + // Please don't delete the following line. It is used by PRESUBMIT.py. // END_MIGRATE_OBSOLETE_PROFILE_PREFS
diff --git a/chrome/browser/resources/chromeos/accessibility/definitions/storage_mv2.d.ts b/chrome/browser/resources/chromeos/accessibility/definitions/storage_mv2.d.ts index bf432b6..f28338c 100644 --- a/chrome/browser/resources/chromeos/accessibility/definitions/storage_mv2.d.ts +++ b/chrome/browser/resources/chromeos/accessibility/definitions/storage_mv2.d.ts
@@ -2,45 +2,78 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -/** @fileoverview Definitions for chrome.storage API in Manifest V2 */ +/** + * @fileoverview Definitions for chrome.storage API + * Generated from: extensions/common/api/storage.json + * run `tools/json_schema_compiler/compiler.py + * extensions/common/api/storage.json -g ts_definitions` to regenerate. + */ + // This file exists because MV3 supports promises and MV2 does not. // TODO(b/260590502): Delete this after MV3 migration. -// TODO(crbug.com/1203307): Auto-generate this file. import {ChromeEvent} from '../../../../../../tools/typescript/definitions/chrome_event'; declare global { export namespace chrome { + export namespace storage { - export const sync: StorageArea; - export const local: StorageArea; + + // eslint-disable-next-line @typescript-eslint/naming-convention + interface sync_StorageArea extends StorageArea { + readonly QUOTA_BYTES: number; + readonly QUOTA_BYTES_PER_ITEM: number; + readonly MAX_ITEMS: number; + readonly MAX_WRITE_OPERATIONS_PER_HOUR: number; + readonly MAX_WRITE_OPERATIONS_PER_MINUTE: number; + readonly MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE: number; + } + export const sync: sync_StorageArea; + + // eslint-disable-next-line @typescript-eslint/naming-convention + interface local_StorageArea extends StorageArea { + readonly QUOTA_BYTES: number; + } + export const local: local_StorageArea; + export const managed: StorageArea; - export const onChanged: StorageChangeEvent; - export type StorageChangeEvent = ChromeEvent< - (changes: {[x: string]: StorageChange}, areaName: string) => void>; + // eslint-disable-next-line @typescript-eslint/naming-convention + interface session_StorageArea extends StorageArea { + readonly QUOTA_BYTES: number; + } + export const session: session_StorageArea; - export type StorageAreaChangeEvent = - ChromeEvent<(changes: {[x: string]: StorageChange}) => void>; + export enum AccessLevel { + TRUSTED_CONTEXTS = 'TRUSTED_CONTEXTS', + TRUSTED_AND_UNTRUSTED_CONTEXTS = 'TRUSTED_AND_UNTRUSTED_CONTEXTS', + } export interface StorageChange { oldValue?: any; newValue?: any; } - export class StorageArea { - get(keysOrCallback?: string|string[]|object|((obj: any) => void), - callback?: (obj: any) => void): void; - + export interface StorageArea { + get(keys: string|string[]|{[key: string]: any}|undefined, + callback?: (result: {[key: string]: any}) => void): void; getBytesInUse( - keysOrCallback?: string|string[]|((obj: any) => void), - callback?: (num: number) => void): void; - - set(items: {[x: string]: any}, callback?: () => void): void; + keys: string|string[]|undefined, + callback?: (bytes: number) => void): void; + set(items: {[key: string]: any}, callback?: () => void): void; remove(keys: string|string[], callback?: () => void): void; - clear(callback?: () => void): void; - onChanged: StorageAreaChangeEvent; + clear(callback: () => void): void; + setAccessLevel( + accessOptions: { + accessLevel: AccessLevel, + }, + callback: () => void): void; + onChanged: + ChromeEvent<(changes: {[key: string]: StorageChange}) => void>; } + + export const onChanged: ChromeEvent< + (changes: {[key: string]: StorageChange}, areaName: string) => void>; } } }
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn index 0524fd52..646a340 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn
@@ -33,6 +33,7 @@ "tts_manager.ts", "input_handler.ts", "ui_manager.ts", + "prefs_manager.ts", ] # Add TS files needed from ../common/ here. @@ -59,6 +60,8 @@ "../definitions/i18n.d.ts", "../definitions/tabs.d.ts", "../definitions/accessibility_private_mv2.d.ts", + "../definitions/settings_private_mv2.d.ts", + "../definitions/storage_mv2.d.ts", "../definitions/clipboard_mv2.d.ts", "../definitions/extension_types.d.ts", "//tools/typescript/definitions/windows.d.ts", @@ -88,7 +91,6 @@ "background.html", "checked.png", "earcons/null_selection.ogg", - "prefs_manager.js", "select_to_speak-2x.svg", "select_to_speak.js", "sts-icon-128.png",
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.ts similarity index 65% rename from chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.js rename to chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.ts index 9a037ee..fb2145f 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.js +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.ts
@@ -9,87 +9,51 @@ */ export class PrefsManager { /** Please keep fields in alphabetical order. */ - constructor() { - /** @private {boolean} */ - this.backgroundShadingEnabled_ = false; - /** @const {string} */ - this.color_ = '#da36e8'; + private backgroundShadingEnabled_ = false; + private color_ = '#da36e8'; + /** + * Whether to allow enhanced network voices in Select-to-Speak. Unlike + * |this.enhancedNetworkVoicesEnabled_|, which represents the user's + * preference, |this.enhancedNetworkVoicesAllowed_| is set by admin via + * policy. |this.enhancedNetworkVoicesAllowed_| does not override + * |this.enhancedNetworkVoicesEnabled_| but changes + * this.enhancedNetworkVoicesEnabled(). + */ + private enhancedNetworkVoicesAllowed_ = true; + /** + * A pref indicating whether the user enables the network voices. The pref + * is synced to local storage as "enhancedNetworkVoices". Use + * this.enhancedNetworkVoicesEnabled() to refer whether to enable the + * network voices instead of using this pref directly. + */ + private enhancedNetworkVoicesEnabled_ = false; + private enhancedVoiceName_ = PrefsManager.DEFAULT_NETWORK_VOICE; + private enhancedVoicesDialogShown_ = false; + private extensionForVoice_: Map<string, string> = new Map(); + private highlightColor_ = '#5e9bff'; + private migrationInProgress_ = false; + private navigationControlsEnabled_ = true; + private speechRate_ = 1.0; + private validVoiceNames_: Set<string> = new Set(); + private voiceNameFromLocale_: string|null = null; + private voiceNameFromPrefs_: string|null = null; + private wordHighlight_ = true; - /** - * Whether to allow enhanced network voices in Select-to-Speak. Unlike - * |this.enhancedNetworkVoicesEnabled_|, which represents the user's - * preference, |this.enhancedNetworkVoicesAllowed_| is set by admin via - * policy. |this.enhancedNetworkVoicesAllowed_| does not override - * |this.enhancedNetworkVoicesEnabled_| but changes - * this.enhancedNetworkVoicesEnabled(). - * @private {boolean} - */ - this.enhancedNetworkVoicesAllowed_ = true; + /** TODO(crbug.com/950391): Ask UX about the default value here. */ + private voiceSwitching_ = false; - /** - * A pref indicating whether the user enables the network voices. The pref - * is synced to local storage as "enhancedNetworkVoices". Use - * this.enhancedNetworkVoicesEnabled() to refer whether to enable the - * network voices instead of using this pref directly. - * @private {boolean} - */ - this.enhancedNetworkVoicesEnabled_ = false; + /** + * Used by tests to wait for settings changes to be propagated. + */ + private updateSettingsPrefsCallbackForTest_: (() => {})|null = null; - /** @private {?string} */ - this.enhancedVoiceName_ = PrefsManager.DEFAULT_NETWORK_VOICE; - - /** @private {boolean} */ - this.enhancedVoicesDialogShown_ = false; - - /** @private {Map<string, string>} */ - this.extensionForVoice_ = new Map(); - - /** @private {string} */ - this.highlightColor_ = '#5e9bff'; - - /** @private {boolean} */ - this.migrationInProgress_ = false; - - /** @private {boolean} */ - this.navigationControlsEnabled_ = true; - - /** @private {number} */ - this.speechPitch_ = 1.0; - - /** @private {number} */ - this.speechRate_ = 1.0; - - /** @private {Set<string>} */ - this.validVoiceNames_ = new Set(); - - /** @private {?string} */ - this.voiceNameFromLocale_ = null; - - /** @private {?string} */ - this.voiceNameFromPrefs_ = null; - - /** @private {boolean} */ - this.wordHighlight_ = true; - - /** - * TODO(crbug.com/950391): Ask UX about the default value here. - * @private {boolean} - */ - this.voiceSwitching_ = false; - - /** - * Used by tests to wait for settings changes to be propagated. - * @protected {?function()} - */ - this.updateSettingsPrefsCallbackForTest_ = null; - } + constructor() {} /** * Get the list of TTS voices, and set the default voice if not already set. - * @private */ - updateDefaultVoice_() { + private updateDefaultVoice_(): void { var uiLocale = chrome.i18n.getMessage('@@ui_locale'); uiLocale = uiLocale.replace('_', '-').toLowerCase(); @@ -101,10 +65,11 @@ } voices.forEach(voice => { - if (!voice.eventTypes.includes(chrome.tts.EventType.START) || - !voice.eventTypes.includes(chrome.tts.EventType.END) || - !voice.eventTypes.includes(chrome.tts.EventType.WORD) || - !voice.eventTypes.includes(chrome.tts.EventType.CANCELLED)) { + // TODO(b/270623046): voice.eventTypes may be undefined. + if (!voice.eventTypes!.includes(chrome.tts.EventType.START) || + !voice.eventTypes!.includes(chrome.tts.EventType.END) || + !voice.eventTypes!.includes(chrome.tts.EventType.WORD) || + !voice.eventTypes!.includes(chrome.tts.EventType.CANCELLED)) { return; } @@ -119,7 +84,7 @@ }); voices.sort(function(a, b) { - function score(voice) { + function score(voice: chrome.tts.TtsVoice): number { if (voice.lang === undefined) { return -1; } @@ -147,11 +112,8 @@ * Migrates Select-to-Speak rate and pitch settings to global Text-to-Speech * settings. This is a one-time migration that happens on upgrade to M70. * See http://crbug.com/866550. - * @param {string} rateStr - * @param {string} pitchStr - * @private */ - migrateToGlobalTtsSettings_(rateStr, pitchStr) { + private migrateToGlobalTtsSettings_(rateStr: string, pitchStr: string): void { if (this.migrationInProgress_) { return; } @@ -170,7 +132,7 @@ // Get global prefs using promises so that we can receive both pitch and // rate before doing migration logic. const getPrefsPromises = []; - getPrefsPromises.push(new Promise((resolve, reject) => { + getPrefsPromises.push(new Promise<void>((resolve, reject) => { chrome.settingsPrivate.getPref('settings.tts.speech_rate', pref => { if (pref === undefined) { reject(); @@ -179,7 +141,7 @@ resolve(); }); })); - getPrefsPromises.push(new Promise((resolve, reject) => { + getPrefsPromises.push(new Promise<void>((resolve, reject) => { chrome.settingsPrivate.getPref('settings.tts.speech_pitch', pref => { if (pref === undefined) { reject(); @@ -210,7 +172,7 @@ // pitch successfully before removing the preferences from // chrome.storage.sync. const setPrefsPromises = []; - setPrefsPromises.push(new Promise((resolve, reject) => { + setPrefsPromises.push(new Promise<void>((resolve, reject) => { chrome.settingsPrivate.setPref( 'settings.tts.speech_rate', stsRate, '' /* unused, see crbug.com/866161 */, success => { @@ -221,7 +183,7 @@ } }); })); - setPrefsPromises.push(new Promise((resolve, reject) => { + setPrefsPromises.push(new Promise<void>((resolve, reject) => { chrome.settingsPrivate.setPref( 'settings.tts.speech_pitch', stsPitch, '' /* unused, see crbug.com/866161 */, success => { @@ -253,9 +215,8 @@ /** * When TTS settings are successfully migrated, removes rate and pitch from * chrome.storage.sync. - * @private */ - onTtsSettingsMigrationSuccess_() { + private onTtsSettingsMigrationSuccess_(): void { chrome.storage.sync.remove('rate'); chrome.storage.sync.remove('pitch'); this.migrationInProgress_ = false; @@ -263,9 +224,9 @@ /** * Loads prefs and policy from chrome.settingsPrivate. - * @private */ - updateSettingsPrefs_(prefs) { + private updateSettingsPrefs_(prefs: chrome.settingsPrivate.PrefObject[]): + void { for (const pref of prefs) { switch (pref.key) { case PrefsManager.VOICE_NAME_KEY: @@ -313,10 +274,9 @@ * enable us to move Select-to-speak options into the Chrome OS Settings app. * This should only occur once per pref, as we remove the chrome.storage pref * after we copy it over. - * @private */ - async migrateStorageToSettingsPref_( - storagePrefName, settingsPrefName, value) { + private migrateStorageToSettingsPref_( + storagePrefName: string, settingsPrefName: string, value: any): void { chrome.settingsPrivate.setPref(settingsPrefName, value); chrome.storage.sync.remove(storagePrefName); } @@ -324,10 +284,9 @@ /** * Loads prefs from chrome.storage and sets values in settings prefs if * necessary. - * @private */ - async updateStoragePrefs_() { - const prefs = await new Promise( + private async updateStoragePrefs_(): Promise<void> { + const prefs: Record<string, any> = await new Promise( resolve => chrome.storage.sync.get( [ 'voice', @@ -410,13 +369,14 @@ * sets default values if necessary, and registers a listener to update prefs * and policy when they change. */ - async initPreferences() { + async initPreferences(): Promise<void> { // Migrate from storage prefs if necessary. await this.updateStoragePrefs_(); // Initialize prefs from settings. - const settingsPrefs = await new Promise( - resolve => chrome.settingsPrivate.getAllPrefs(resolve)); + const settingsPrefs: chrome.settingsPrivate.PrefObject[] = + await new Promise( + resolve => chrome.settingsPrivate.getAllPrefs(resolve)); this.updateSettingsPrefs_(settingsPrefs); chrome.settingsPrivate.onPrefsChanged.addListener( @@ -431,9 +391,9 @@ /** * Get the voice name of the user's preferred local voice. - * @return {string|undefined} Name of preferred local voice. + * @return Name of preferred local voice. */ - getLocalVoice() { + getLocalVoice(): string|undefined { // To use the default (system) voice: don't specify options['voiceName']. if (this.voiceNameFromPrefs_ === PrefsManager.SYSTEM_VOICE) { return undefined; @@ -459,12 +419,16 @@ /** * Generates the basic speech options for Select-to-Speak based on user * preferences. Call for each chrome.tts.speak. - * @param {?SelectToSpeakConstants.VoiceSwitchingData} voiceSwitchingData - * @return {!chrome.tts.TtsOptions} options The TTS options. */ - getSpeechOptions(voiceSwitchingData) { - const options = /** @type {!chrome.tts.TtsOptions} */ ({}); - const data = voiceSwitchingData || {}; + getSpeechOptions(voiceSwitchingData: + SelectToSpeakConstants.VoiceSwitchingData| + null): chrome.tts.TtsOptions { + const options: chrome.tts.TtsOptions = {}; + const data: SelectToSpeakConstants.VoiceSwitchingData = + voiceSwitchingData || { + language: undefined, + useVoiceSwitching: false, + }; const useEnhancedVoices = this.enhancedNetworkVoicesEnabled() && navigator.onLine; @@ -488,10 +452,10 @@ /** * Returns extension ID of the TTS engine for given voice name. - * @param {string} voiceName Voice name specified in TTS options - * @returns {string} extension ID of TTS engine + * @param voiceName Voice name specified in TTS options + * @return extension ID of TTS engine */ - ttsExtensionForVoice(voiceName) { + ttsExtensionForVoice(voiceName: string): string { return this.extensionForVoice_.get(voiceName) || ''; } @@ -499,68 +463,68 @@ * Checks if the voice is an enhanced network TTS voice. * @returns {boolean} True if the voice is an enhanced network TTS voice. */ - isNetworkVoice(voiceName) { + isNetworkVoice(voiceName: string): boolean { return this.ttsExtensionForVoice(voiceName) === PrefsManager.ENHANCED_TTS_EXTENSION_ID; } /** * Gets the user's word highlighting enabled preference. - * @return {boolean} True if word highlighting is enabled. + * @return True if word highlighting is enabled. */ - wordHighlightingEnabled() { + wordHighlightingEnabled(): boolean { return this.wordHighlight_; } /** * Gets the user's word highlighting color preference. - * @return {string} Highlight color. + * @return Highlight color. */ - highlightColor() { + highlightColor(): string { return this.highlightColor_; } /** * Gets the focus ring color. This is not currently a user preference but it * could be in the future; stored here for similarity to highlight color. - * @return {string} Highlight color. + * @return Highlight color. */ - focusRingColor() { + focusRingColor(): string { return this.color_; } /** * Gets the user's focus ring background color. If the user disabled greying * out the background, alpha will be set to fully transparent. - * @return {boolean} True if the background shade should be drawn. + * @return True if the background shade should be drawn. */ - backgroundShadingEnabled() { + backgroundShadingEnabled(): boolean { return this.backgroundShadingEnabled_; } /** * Gets the user's preference for showing navigation controls that allow them * to navigate to next/previous sentences, paragraphs, and more. - * @return {boolean} True if navigation controls should be shown when STS is + * @return True if navigation controls should be shown when STS is * active. */ - navigationControlsEnabled() { + navigationControlsEnabled(): boolean { return this.navigationControlsEnabled_; } /** * Gets the user's preference for speech rate. - * @return {number} Current TTS speech rate. + * @return Current TTS speech rate. */ - speechRate() { + speechRate(): number { return this.speechRate_; } /** * Gets the user's preference for whether enhanced network TTS voices are * enabled. Always returns false if the policy disallows the feature. - * @return {boolean} True if enhanced TTS voices are enabled. + * @return True if enhanced TTS voices are enabled. */ - enhancedNetworkVoicesEnabled() { + enhancedNetworkVoicesEnabled(): boolean { return this.enhancedNetworkVoicesAllowed_ ? this.enhancedNetworkVoicesEnabled_ : false; @@ -569,9 +533,9 @@ /** * Gets the admin's policy for whether enhanced network TTS voices are * allowed. - * @return {boolean} True if enhanced TTS voices are allowed. + * @return True if enhanced TTS voices are allowed. */ - enhancedNetworkVoicesAllowed() { + enhancedNetworkVoicesAllowed(): boolean { return this.enhancedNetworkVoicesAllowed_; } @@ -579,18 +543,18 @@ * Gets whether the initial popup authorizing enhanced network voices has been * shown to the user or not. * - * @returns {boolean} True if the initial popup dialog has been shown already. + * @returns True if the initial popup dialog has been shown already. */ - enhancedVoicesDialogShown() { + enhancedVoicesDialogShown(): boolean { return this.enhancedVoicesDialogShown_; } /** * Sets whether enhanced network voices are enabled or not from initial popup. - * @param {boolean} enabled Specifies if the user enabled enhanced voices in + * @param enabled Specifies if the user enabled enhanced voices in * the popup. */ - setEnhancedNetworkVoicesFromDialog(enabled) { + setEnhancedNetworkVoicesFromDialog(enabled: boolean): void { if (enabled === undefined) { return; } @@ -613,141 +577,128 @@ /** * Gets the user's preference for whether automatic voice switching between * languages is enabled. - * @return {boolean} */ - voiceSwitchingEnabled() { + voiceSwitchingEnabled(): boolean { return this.voiceSwitching_; } } -/** - * Constant used as the value for a menu option representing the current device - * language. - * @type {string} - */ -PrefsManager.USE_DEVICE_LANGUAGE = 'select_to_speak_device_language'; +export namespace PrefsManager { + /** + * Constant used as the value for a menu option representing the current + * device language. + */ + export const USE_DEVICE_LANGUAGE = 'select_to_speak_device_language'; -/** - * Constant representing the system TTS voice. - * @type {string} - */ -PrefsManager.SYSTEM_VOICE = 'select_to_speak_system_voice'; + /** + * Constant representing the system TTS voice. + */ + export const SYSTEM_VOICE = 'select_to_speak_system_voice'; -/** - * Constant representing the voice name for the default (server-selected) - * network TTS voice. - * @type {string} - */ -PrefsManager.DEFAULT_NETWORK_VOICE = 'default-wavenet'; + /** + * Constant representing the voice name for the default (server-selected) + * network TTS voice. + */ + export const DEFAULT_NETWORK_VOICE = 'default-wavenet'; -/** - * Extension ID of the enhanced network TTS voices extension. - * @const {string} - */ -PrefsManager.ENHANCED_TTS_EXTENSION_ID = 'jacnkoglebceckolkoapelihnglgaicd'; + /** + * Extension ID of the enhanced network TTS voices extension. + * @const {string} + */ + export const ENHANCED_TTS_EXTENSION_ID = 'jacnkoglebceckolkoapelihnglgaicd'; -/** - * Extension ID of the Google TTS voices extension. - * @const {string} - */ -PrefsManager.GOOGLE_TTS_EXTENSION_ID = 'gjjabgpgjpampikjhjpfhneeoapjbjaf'; + /** + * Extension ID of the Google TTS voices extension. + * @const {string} + */ + export const GOOGLE_TTS_EXTENSION_ID = 'gjjabgpgjpampikjhjpfhneeoapjbjaf'; -/** - * Extension ID of the eSpeak TTS voices extension. - * @const {string} - */ -PrefsManager.ESPEAK_EXTENSION_ID = 'dakbfdmgjiabojdgbiljlhgjbokobjpg'; + /** + * Extension ID of the eSpeak TTS voices extension. + * @const {string} + */ + export const ESPEAK_EXTENSION_ID = 'dakbfdmgjiabojdgbiljlhgjbokobjpg'; -/** - * Default speech rate for both Select-to-Speak and global prefs. - * @type {number} - */ -PrefsManager.DEFAULT_RATE = 1.0; + /** + * Default speech rate for both Select-to-Speak and global prefs. + * @type {number} + */ + export const DEFAULT_RATE = 1.0; -/** - * Default speech pitch for both Select-to-Speak and global prefs. - * @type {number} - */ -PrefsManager.DEFAULT_PITCH = 1.0; + /** + * Default speech pitch for both Select-to-Speak and global prefs. + * @type {number} + */ + export const DEFAULT_PITCH = 1.0; -/** - * Settings key for the pref for whether to shade the background area of the - * screen (where text isn't currently being spoken). - * @type {string} - */ -PrefsManager.BACKGROUND_SHADING_KEY = - 'settings.a11y.select_to_speak_background_shading'; + /** + * Settings key for the pref for whether to shade the background area of the + * screen (where text isn't currently being spoken). + */ + export const BACKGROUND_SHADING_KEY = + 'settings.a11y.select_to_speak_background_shading'; -/** - * Settings key for the pref for whether enhanced network TTS voices are - * enabled. - * @type {string} - */ -PrefsManager.ENHANCED_NETWORK_VOICES_KEY = - 'settings.a11y.select_to_speak_enhanced_network_voices'; + /** + * Settings key for the pref for whether enhanced network TTS voices are + * enabled. + */ + export const ENHANCED_NETWORK_VOICES_KEY = + 'settings.a11y.select_to_speak_enhanced_network_voices'; -/** - * Settings key for the pref indicating the user's enhanced voice preference. - * @type {string} - */ -PrefsManager.ENHANCED_VOICE_NAME_KEY = - 'settings.a11y.select_to_speak_enhanced_voice_name'; + /** + * Settings key for the pref indicating the user's enhanced voice preference. + */ + export const ENHANCED_VOICE_NAME_KEY = + 'settings.a11y.select_to_speak_enhanced_voice_name'; -/** - * Settings key for the pref indicating whether initial popup authorizing - * enhanced network voices has been shown to the user or not. - * @type {string} - */ -PrefsManager.ENHANCED_VOICES_DIALOG_SHOWN_KEY = - 'settings.a11y.select_to_speak_enhanced_voices_dialog_shown'; + /** + * Settings key for the pref indicating whether initial popup authorizing + * enhanced network voices has been shown to the user or not. + */ + export const ENHANCED_VOICES_DIALOG_SHOWN_KEY = + 'settings.a11y.select_to_speak_enhanced_voices_dialog_shown'; -/** - * Settings key for the policy indicating whether to allow enhanced network - * voices. - * @type {string} - */ -PrefsManager.ENHANCED_VOICES_POLICY_KEY = - 'settings.a11y.enhanced_network_voices_in_select_to_speak_allowed'; + /** + * Settings key for the policy indicating whether to allow enhanced network + * voices. + */ + export const ENHANCED_VOICES_POLICY_KEY = + 'settings.a11y.enhanced_network_voices_in_select_to_speak_allowed'; -/** - * Settings key for the pref indicating the user's word highlighting color - * preference. - * @type {string} - */ -PrefsManager.HIGHLIGHT_COLOR_KEY = - 'settings.a11y.select_to_speak_highlight_color'; + /** + * Settings key for the pref indicating the user's word highlighting color + * preference. + */ + export const HIGHLIGHT_COLOR_KEY = + 'settings.a11y.select_to_speak_highlight_color'; -/** - * Settings key for the pref for showing navigation controls. - * @type {string} - */ -PrefsManager.NAVIGATION_CONTROLS_KEY = - 'settings.a11y.select_to_speak_navigation_controls'; + /** + * Settings key for the pref for showing navigation controls. + */ + export const NAVIGATION_CONTROLS_KEY = + 'settings.a11y.select_to_speak_navigation_controls'; -/** - * Settings key for the pref indicating the user's system-wide preference TTS - * speech rate. - * @type {string} - */ -PrefsManager.SPEECH_RATE_KEY = 'settings.tts.speech_rate'; + /** + * Settings key for the pref indicating the user's system-wide preference TTS + * speech rate. + */ + export const SPEECH_RATE_KEY = 'settings.tts.speech_rate'; -/** - * Settings key for the pref indicating the user's voice preference. - * @type {string} - */ -PrefsManager.VOICE_NAME_KEY = 'settings.a11y.select_to_speak_voice_name'; + /** + * Settings key for the pref indicating the user's voice preference. + */ + export const VOICE_NAME_KEY = 'settings.a11y.select_to_speak_voice_name'; -/** - * Settings key for the pref for enabling automatic voice switching between - * languages. - * @type {string} - */ -PrefsManager.VOICE_SWITCHING_KEY = - 'settings.a11y.select_to_speak_voice_switching'; + /** + * Settings key for the pref for enabling automatic voice switching between + * languages. + */ + export const VOICE_SWITCHING_KEY = + 'settings.a11y.select_to_speak_voice_switching'; -/** - * Settings key for the pref indicating whether to enable word highlighting. - * @type {string} - */ -PrefsManager.WORD_HIGHLIGHT_KEY = - 'settings.a11y.select_to_speak_word_highlight'; + /** + * Settings key for the pref indicating whether to enable word highlighting. + */ + export const WORD_HIGHLIGHT_KEY = + 'settings.a11y.select_to_speak_word_highlight'; +}
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/tsconfig.json b/chrome/browser/resources/chromeos/accessibility/select_to_speak/tsconfig.json index 8c822bb..c699141 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/tsconfig.json +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/tsconfig.json
@@ -11,6 +11,7 @@ "../../../../../../tools/typescript/definitions" ], "exclude": [ - "../../../../../../tools/typescript/definitions/i18n.d.ts" + "../../../../../../tools/typescript/definitions/i18n.d.ts", + "../../../../../../tools/typescript/definitions/storage.d.ts" ] }
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb index 218c37e..a83de63 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
@@ -404,7 +404,7 @@ <translation id="3594207934078151302">Bizitasun ertaineko itsaso-berdea</translation> <translation id="3599054940393788245">Ez dago matematika-funtzioan</translation> <translation id="360241989769010433">Esker-emateak</translation> -<translation id="3616016838842055984">Sakatu nahi duzun elementu batera iristen bazara, sakatu bilaketa-tekla + zuriune-barra. Aurrera egiteko, saka ezazu.</translation> +<translation id="3616016838842055984">Sakatu nahi duzun elementu batera iristen bazara, sakatu Bilaketa + zuriune-barra. Aurrera egiteko, saka ezazu.</translation> <translation id="3616113530831147358">Audioa</translation> <translation id="3622350485154495700">Sakatu birritan hatz batekin</translation> <translation id="3646890046000188562">{COUNT,plural, =1{azentu kamutsa}other{# azentu kamuts}}</translation> @@ -412,7 +412,7 @@ <translation id="3655855170848725876">{COUNT,plural, =1{dolar ikur}other{# dolar ikur}}</translation> <translation id="3659787053479271466">alerta</translation> <translation id="366419593095697301">Aholkua: sakatu Ihes tekla tutorialetik irten nahi baduzu.</translation> -<translation id="3676062394766691318">Gailua konfiguratzen duzunean, hona itzul zaitezke tutorial gehiago ikusteko. Horretarako, sakatu bilaketa-tekla + O eta, gero, T.</translation> +<translation id="3676062394766691318">Gailua konfiguratzen duzunean, hona itzul zaitezke tutorial gehiago ikusteko. Horretarako, sakatu Bilaketa + O eta, gero, T.</translation> <translation id="3681531118904532409">Papaia-kolorekoa</translation> <translation id="3692274950075847560">B:<ph name="RESULT" /></translation> <translation id="370367311675896712">Marratua</translation> @@ -687,12 +687,12 @@ <translation id="5623842676595125836">Erregistroa</translation> <translation id="5628125749885014029">h4</translation> <translation id="5632083598315326067">Ikur grafikoa</translation> -<translation id="5648939288050772726">Zorionak! Lortu dituzu ChromeVox erabiltzeko oinarrizko ezagutzak. Gogoratu: ChromeVox-en agindu-menua irekitzeko, sakatu bilaketa-tekla eta puntuaren tekla. ChromeVox eta Chrome OS-ri buruzko informazio gehiago lortzeko, irakurri artikulu hauek. +<translation id="5648939288050772726">Zorionak! Lortu dituzu ChromeVox erabiltzeko oinarrizko ezagutzak. Gogoratu: ChromeVox-en agindu-menua irekitzeko, sakatu Bilaketa eta puntuaren tekla. ChromeVox eta Chrome OS-ri buruzko informazio gehiago lortzeko, irakurri artikulu hauek. Tutoriala amaitu baduzu, erabili ChromeVox Itxi botoira joateko eta hura sakatzeko.</translation> <translation id="5653397561111110475">Erabili Chromebook ukipen-pantailako erabilerraztasun-eginbideak</translation> <translation id="5655682562155942719">Saltatzeko aginduak</translation> <translation id="56637627897541303">Testu-eremua</translation> -<translation id="5669637233317991674">Ikasgai honetan nabigatzeko, sakatu bilaketa-tekla + eskuinera egiteko gezi-tekla edo bilaketa-tekla + ezkerrera egiteko gezi-tekla</translation> +<translation id="5669637233317991674">Ikasgai honetan nabigatzeko, sakatu Bilaketa + eskuinera egiteko gezi-tekla edo Bilaketa + ezkerrera egiteko gezi-tekla</translation> <translation id="5677240841070992068">Une honetako kokapena</translation> <translation id="5678161956734658133">mled</translation> <translation id="5681643281275621376">def</translation> @@ -720,11 +720,11 @@ <translation id="5850707923114094062">Atzerako panoramikoa</translation> <translation id="5851548754964597211">Fitxen zerrenda</translation> <translation id="5866042630553435010">Partzialki egiaztatuta</translation> -<translation id="5866210856231860256">Gai honi buruzko ikasgaiak arakatzeko, sakatu bilaketa-tekla + eskuinera egiteko gezi-tekla edo bilaketa-tekla + ezkerrera egiteko gezi-tekla</translation> +<translation id="5866210856231860256">Gai honi buruzko ikasgaiak arakatzeko, sakatu Bilaketa + eskuinera egiteko gezi-tekla edo Bilaketa + ezkerrera egiteko gezi-tekla</translation> <translation id="5867591286054666064">Tutorial honetan, sakatu edozein tekla haren izena entzuteko.</translation> <translation id="5869546221129391014">Sareta</translation> <translation id="5876817486144482042">Jaitsi hizketaren bolumena</translation> -<translation id="5878206664863390311">Gaiak arakatzeko, sakatu bilaketa-tekla + eskuinera egiteko gezi-tekla edo bilaketa-tekla + ezkerrera egiteko gezi-tekla.</translation> +<translation id="5878206664863390311">Gaiak arakatzeko, sakatu Bilaketa + eskuinera egiteko gezi-tekla edo Bilaketa + ezkerrera egiteko gezi-tekla.</translation> <translation id="5878908838135392163">Hauts-urdina</translation> <translation id="588108970619830498">Berrezarri testua ahots bihurtzeko eginbidearen ezarpenen balio lehenetsiak</translation> <translation id="5891934789323004067">Taula</translation> @@ -776,7 +776,7 @@ <translation id="6259464875943891919"><ph name="TYPE" /> edukitzailetik irten zara.</translation> <translation id="6280088282605782512">Sakatu birritan</translation> <translation id="6282062888058716985">nabigazioa</translation> -<translation id="6295699829709583154">Ezinbesteko teklak: bilaketa-tekla</translation> +<translation id="6295699829709583154">Ezinbesteko teklak: Bilaketa</translation> <translation id="6305702903308659374">Erreproduzitu bolumen normalean ChromeVox hitz egiten ari bada ere</translation> <translation id="6307969636681130414">Sakatuta</translation> <translation id="6315652249189065725">Ireki lasterbideen menua</translation> @@ -844,7 +844,7 @@ <translation id="6858047746862060282">Hitzaurrea</translation> <translation id="6859876496651143278">Pasatu hatz bat ezkerrerantz</translation> <translation id="6865519907510167493">Ortografia-akatsa</translation> -<translation id="6873188295213080042">Aholkua: eduki sakatuta bilaketa-tekla eta sakatu gezi-teklak nabigatzeko.</translation> +<translation id="6873188295213080042">Aholkua: eduki sakatuta Bilaketa eta sakatu gezi-teklak nabigatzeko.</translation> <translation id="6894148351896207544">Esan oraingo ordua eta data</translation> <translation id="6896758677409633944">Kopiatu</translation> <translation id="6897341342232909480">Ezkerretara</translation> @@ -915,7 +915,7 @@ <translation id="7313717760367325059">jaso laguntza</translation> <translation id="7317017974771324508">partzialki hautatuta</translation> <translation id="7322442671176251901">Arakatu sakatuta</translation> -<translation id="7344012264516629579">Esteka, botoi eta koadro bidezko jauziak dira, besteak beste, toki batetik bestera joateko beste agindu batzuk. ChromeVox-eko menuetan aurki daiteke toki batetik bestera joateko aginduen zerrenda osoa; bilaketa-tekla + puntuaren tekla sakatuta ireki daitezke menuok.</translation> +<translation id="7344012264516629579">Esteka, botoi eta koadro bidezko jauziak dira, besteak beste, toki batetik bestera joateko beste agindu batzuk. ChromeVox-eko menuetan aurki daiteke toki batetik bestera joateko aginduen zerrenda osoa; Bilaketa + puntuaren tekla sakatuta ireki daitezke menuok.</translation> <translation id="7356165926712028380">Aldatu 8 puntuko braillera</translation> <translation id="7356610683936413584">Azalpenen zerrendaren xehetasunak</translation> <translation id="7370432716629432284">{COUNT,plural, =1{et ikur}other{# et ikur}}</translation> @@ -953,7 +953,7 @@ <translation id="762020119231868829">Une honetan erreproduzitzen ari diren multimedia-widgetak pausatzen ditu</translation> <translation id="7625690649919402823">Hurrengo taula</translation> <translation id="7628927569678398026"><ph name="LOCALE" /> (<ph name="VARIANT" />), <ph name="GRADE" />. maila</translation> -<translation id="7637342083105831460">Praktikatzeko eremua aurkitzeko, sakatu bilaketa-tekla + eskuinera egiteko gezi-tekla edo "Hurrengo ikasgaia" botoia. Gero, aktibatu bilaketa-tekla + zuriune-barra praktikatzeko eremua aktibatzeko.</translation> +<translation id="7637342083105831460">Praktikatzeko eremua aurkitzeko, sakatu Bilaketa + eskuinera egiteko gezi-tekla edo "Hurrengo ikasgaia" botoia. Gero, aktibatu Bilaketa + zuriune-barra praktikatzeko eremua aktibatzeko.</translation> <translation id="7639968568612851608">Gris iluna</translation> <translation id="7663318257180412551">2. goiburua</translation> <translation id="7668307052366682650">{COUNT,plural, =1{ordu}other{ordu}}</translation> @@ -1028,7 +1028,7 @@ <translation id="8138880386467279117">Ukipena</translation> <translation id="8146613869421949343">Jarraian, bilaketa-teklari buruzko azalpenak emango dizkizugu. Bilaketa-tekla beste tekla batzuekin batera erabiltzen da aginduak sortzeko ChromeVox-en. Ezkerraldeko Maius teklaren gainean aurkituko duzu. Aurrera egiteko, saka ezazu.</translation> <translation id="8158033275290782295">hautatu guztiak</translation> -<translation id="816818801578874684">Lehenengo goiburua da hau. Sakatu bilaketa-tekla + H hurrengo goiburura joateko.</translation> +<translation id="816818801578874684">Lehenengo goiburua da hau. Sakatu Bilaketa + H hurrengo goiburura joateko.</translation> <translation id="8173092779156526980">Pasatu lau hatz ezkerrerantz</translation> <translation id="817440585505441544">{COUNT,plural, =1{azpimarra}other{# azpimarra}}</translation> <translation id="817529114347680055">Piztu pantaila</translation> @@ -1071,7 +1071,7 @@ <translation id="8473540203671727883">Irakurri ozen saguaren kurtsorearen azpiko testua</translation> <translation id="8476408756881832830">Pausatu erreprodukzioa ChromeVox hitz egiten ari bada</translation> <translation id="8476508772960940536">leihoen ikuspegi orokorra</translation> -<translation id="8480873377842220259">Nabigazioaren hastapenak ikastera zoaz. Pantailatik mugitzeko, eduki sakatuta bilaketa-tekla eta sakatu gezi-teklak. Aurrera egiteko, sakatu bilaketa-tekla + eskuinera egiteko gezi-tekla.</translation> +<translation id="8480873377842220259">Nabigazioaren hastapenak ikastera zoaz. Pantailatik mugitzeko, eduki sakatuta Bilaketa eta sakatu gezi-teklak. Aurrera egiteko, sakatu Bilaketa + eskuinera egiteko gezi-tekla.</translation> <translation id="8503360654911991865">Gutxitu nabigazio-pikortsutasuna</translation> <translation id="8520472399088452386">Biratze-botoia</translation> <translation id="8534394844575788431">Formatua</translation> @@ -1101,7 +1101,7 @@ <translation id="8693391540059827073">Gogoko dudan urte-sasoia</translation> <translation id="8696284982970258155">Ezti-ihintzaren kolorekoa</translation> <translation id="8697111817566059991">{COUNT,plural, =1{barra}other{# barra bertikal}}</translation> -<translation id="8741370088760768424">Aholkua: sakatu bilaketa-tekla eta zuriune-barra elementua aktibatzeko.</translation> +<translation id="8741370088760768424">Aholkua: sakatu Bilaketa eta zuriune-barra elementua aktibatzeko.</translation> <translation id="8743786158317878347">sartu egituratutako edukian, adibidez, tauletan</translation> <translation id="8746846427395705317">joan aurreko hitzera</translation> <translation id="8747966237988593539">Zerrenda ordenatua</translation> @@ -1109,7 +1109,7 @@ <translation id="875769700429317857">Deskargatu da <ph name="FILE_NAME" /></translation> <translation id="8767968232364267681">Hurrengo 4. mailaren goiburua</translation> <translation id="8770473310765924354">irten egituradun edukitik, adibidez, tauletatik</translation> -<translation id="8775203254697638994">Zenbaitetan, goitibeherako zerrenda bateko aukera bat hautatu beharko duzu. Horretarako, zabaldu zerrenda bilaketa-tekla + zuriune-barra sakatuta. Gero, erabili gora eta behera egiteko gezi-teklak aukera bat hautatzeko. Amaitzeko, tolestu zerrenda bilaketa-tekla + zuriune-barra sakatuta.</translation> +<translation id="8775203254697638994">Zenbaitetan, goitibeherako zerrenda bateko aukera bat hautatu beharko duzu. Horretarako, zabaldu zerrenda Bilaketa + zuriune-barra sakatuta. Gero, erabili gora eta behera egiteko gezi-teklak aukera bat hautatzeko. Amaitzeko, tolestu zerrenda Bilaketa + zuriune-barra sakatuta.</translation> <translation id="8779057862865475116">Ez dago beste estekarik honen aurretik</translation> <translation id="8796411681063377102">3. mailako hurrengo goiburua</translation> <translation id="8823311177246872527"><ph name="CURRENTPAGE" />/<ph name="TOTALPAGES" /> orria</translation> @@ -1121,7 +1121,7 @@ <translation id="8897030325301866860">Letra: <ph name="FONT_FAMILY" /></translation> <translation id="8898516272131543774">Errepikatu puntuazio-oihartzuna</translation> <translation id="8908714597367957477">colhdr</translation> -<translation id="8910180774920883033">Ekintza batzuk erabilgarri daude. Haiek ikusteko, sakatu bilaketa-tekla + Ktrl + A.</translation> +<translation id="8910180774920883033">Ekintza batzuk erabilgarri daude. Haiek ikusteko, sakatu Bilaketa + Ktrl + A.</translation> <translation id="8937112856099038376">intlnk</translation> <translation id="8940925288729953902">Tekla aldagarriak</translation> <translation id="8943282376843390568">Lima</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb index bdffea2..920f8659 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb
@@ -263,7 +263,7 @@ <translation id="2783001728278437613">{COUNT,plural, =1{+#}other{+#}}</translation> <translation id="2792200646155001340">Unaweza pia kutelezesha kidole kimoja kutoka kulia kuelekea kushoto ili uende kwenye kipengee kilichotangulia. Jaribu sasa.</translation> <translation id="280499067616661124">Tafuta ChromeVox katika ukurasa</translation> -<translation id="2811019999044652585">Ili kuruka kwenda sehemu nyingine ya skrini, kama vile upau wa vidhibiti au ubao wa aikoni, bonyeza kitufe cha Dhibiti + Mbele. Kitufe cha Sambaza kinapatikana juu ya kitufe cha nambari 2 kwenye Chromebook.</translation> +<translation id="2811019999044652585">Ili kuruka kwenda sehemu nyingine ya skrini, kama vile upau wa vidhibiti au ubao wa aikoni, bonyeza kitufe cha Dhibiti + Mbele. Kitufe cha Sambaza kinapatikana juu ya kitufe cha namba 2 kwenye Chromebook.</translation> <translation id="2811204574343810641">Safu mlalo</translation> <translation id="2816868829355607410">Sehemu ya mazoezi: Amri za kuruka</translation> <translation id="2841013758207633010">Muda</translation> @@ -324,7 +324,7 @@ <translation id="311015743332597320">Telezesha vidole vinne kuelekea kulia</translation> <translation id="3112457281078985179">Ili kuwasha au kuzima ChromeVox, tumia Control+Alt+Z.</translation> <translation id="3115800313647508384">Ungependa kuzima skrini?</translation> -<translation id="3131002934070407451">Soma nambari ukitumia muundo wa:</translation> +<translation id="3131002934070407451">Soma namba ukitumia muundo wa:</translation> <translation id="3134461040845705080">soma tu</translation> <translation id="3137663468179739624">Rangi ya zeituni</translation> <translation id="3138767756593758860">Onyesha orodha ya vivutio</translation> @@ -877,7 +877,7 @@ <translation id="7088960765736518739">Kufikia Kupitia Swichi</translation> <translation id="7090715360595433170">Inaweza pia kuwa bora zaidi kuliko kutelezesha kidole kimoja kushoto na kulia.</translation> <translation id="7091296112653361280">Rangi ya Chungwa Hafifu</translation> -<translation id="7095834689119144465">Badilisha maandishi ya nambari pekee</translation> +<translation id="7095834689119144465">Badilisha maandishi ya namba pekee</translation> <translation id="7096001299300236431">Maudhui yaliyotangulia</translation> <translation id="7116595520562830928">multln</translation> <translation id="712735679809149106">mwangwi wa neno</translation>
diff --git a/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts b/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts index 9e83979..df7931a4 100644 --- a/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts +++ b/chrome/browser/resources/chromeos/cloud_upload/file_handler_page.ts
@@ -65,11 +65,20 @@ assert(dialogArgs.args.dialogSpecificArgs); assert(dialogArgs.args.dialogSpecificArgs.fileHandlerDialogArgs); - const localTasks = - dialogArgs.args.dialogSpecificArgs.fileHandlerDialogArgs?.localTasks; + const fileHandlerDialogArgs = + dialogArgs.args.dialogSpecificArgs.fileHandlerDialogArgs; + + const localTasks = fileHandlerDialogArgs?.localTasks; + const showGoogleWorkspaceTask = + fileHandlerDialogArgs?.showGoogleWorkspaceTask; + const showMicrosoftOfficeTask = + fileHandlerDialogArgs?.showMicrosoftOfficeTask; + // Adjust the dialog's size if there are no local tasks to display. if (localTasks.length == 0) { this.$('#dialog').style.height = '315px'; + } else if (!showGoogleWorkspaceTask || !showMicrosoftOfficeTask) { + this.$('#dialog').style.height = '295px'; } const {name, icon, type} = @@ -80,21 +89,25 @@ titleElement.innerText = loadTimeData.getStringF('fileHandlerTitle', type); - const driveCard = new CloudProviderCardElement(); - driveCard.setParameters( - CloudProviderType.DRIVE, name, - loadTimeData.getString('googleDriveStorage')); - driveCard.setIconClass(icon); - driveCard.id = 'drive'; - this.addCloudProviderCard(driveCard); + if (showGoogleWorkspaceTask) { + const driveCard = new CloudProviderCardElement(); + driveCard.setParameters( + CloudProviderType.DRIVE, name, + loadTimeData.getString('googleDriveStorage')); + driveCard.setIconClass(icon); + driveCard.id = 'drive'; + this.addCloudProviderCard(driveCard); + } - const officeCard = new CloudProviderCardElement(); - officeCard.setParameters( - CloudProviderType.ONE_DRIVE, loadTimeData.getString('microsoft365'), - loadTimeData.getString('oneDriveStorage')); - officeCard.setIconClass('office'); - officeCard.id = 'onedrive'; - this.addCloudProviderCard(officeCard); + if (showMicrosoftOfficeTask) { + const officeCard = new CloudProviderCardElement(); + officeCard.setParameters( + CloudProviderType.ONE_DRIVE, loadTimeData.getString('microsoft365'), + loadTimeData.getString('oneDriveStorage')); + officeCard.setIconClass('office'); + officeCard.id = 'onedrive'; + this.addCloudProviderCard(officeCard); + } if (localTasks.length == 0) { return;
diff --git a/chrome/browser/resources/chromeos/login/test_api/test_api.js b/chrome/browser/resources/chromeos/login/test_api/test_api.js index 058e729..45923dd4 100644 --- a/chrome/browser/resources/chromeos/login/test_api/test_api.js +++ b/chrome/browser/resources/chromeos/login/test_api/test_api.js
@@ -1039,6 +1039,11 @@ this.choobeScreensList, '#cr-button-theme-selection'); } + /** @override */ + shouldSkip() { + return loadTimeData.getBoolean('testapi_shouldSkipChoobe'); + } + isReadyForTesting() { return this.isVisible(); }
diff --git a/chrome/browser/resources/password_manager/BUILD.gn b/chrome/browser/resources/password_manager/BUILD.gn index 678502e..0af5379 100644 --- a/chrome/browser/resources/password_manager/BUILD.gn +++ b/chrome/browser/resources/password_manager/BUILD.gn
@@ -21,8 +21,6 @@ "images/password_sharing_secure_lock.svg", "images/password_sharing_progress_bar.svg", "password_manager.html", - "images/relaunch_chrome_promo.svg", - "images/relaunch_chrome_promo_dark.svg", ] if (is_chrome_branded) { static_files += [ @@ -35,9 +33,15 @@ "images/password_shortcut_promo_dark.svg", "images/passwords_on_web_promo.svg", "images/passwords_on_web_promo_dark.svg", + "images/relaunch_chrome_promo.svg", + "images/relaunch_chrome_promo_dark.svg", ] } else { - static_files += [ "manifest.webmanifest" ] + static_files += [ + "manifest.webmanifest", + "images/relaunch_chrome_promo_non_branded.svg", + "images/relaunch_chrome_promo_dark_non_branded.svg", + ] } web_component_files = [
diff --git a/chrome/browser/resources/password_manager/images/relaunch_chrome_promo.svg b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo.svg index 8b5c8c6..452f3ad 100644 --- a/chrome/browser/resources/password_manager/images/relaunch_chrome_promo.svg +++ b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo.svg
@@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="316" height="112" fill="none" viewBox="0 0 316 112"><path fill="#fff" d="M0 0h316v112H0z"/><g filter="url(#a)"><circle cx="157.5" cy="55.5" r="38.5" fill="#fff"/></g><path fill="#188038" d="M184.897 52.256h-14.708v7.354h14.708v-7.354Z"/><path fill="#4285F4" d="M144.451 69.414c-7.415 0-13.482-6.067-13.482-13.483 0-7.415 6.067-13.482 13.482-13.482 7.415 0 13.482 6.067 13.482 13.482 0 7.416-6.067 13.483-13.482 13.483Zm0-19.61c-3.371 0-6.129 2.757-6.129 6.127 0 3.371 2.758 6.129 6.129 6.129 3.37 0 6.128-2.758 6.128-6.129 0-3.37-2.758-6.128-6.128-6.128Z"/><path fill="#34A853" d="M179.995 59.61h-9.806v7.353h4.903v-2.451a2.458 2.458 0 0 1 2.451-2.451 2.459 2.459 0 0 1 2.452 2.451v2.451h4.902V59.61h-4.902Z"/><path fill="#EA4335" d="M157.443 52.256h-8.09c.736 1.042 1.226 2.267 1.226 3.677 0 1.41-.49 2.635-1.226 3.677h8.09c.306-1.165.49-2.39.49-3.677a14.41 14.41 0 0 0-.49-3.677Z"/><path fill="#FBBC04" d="M170.189 52.256h-12.747c.307 1.164.491 2.39.491 3.677s-.184 2.512-.491 3.677h12.747v-7.354Z"/><circle cx="190" cy="88" r="17" fill="#FCEEEE"/><path fill="#DC362E" d="M190 102c7.732 0 14-6.268 14-14s-6.268-14-14-14-14 6.268-14 14 6.268 14 14 14Z"/><path fill="#fff" d="M192 79h-4v11h4V79ZM192 93h-4v4h4v-4Z"/><circle cx="92" cy="17" r="1" fill="#DADCE0"/><circle cx="96" cy="17" r="1" fill="#DADCE0"/><circle cx="84" cy="17" r="1" fill="#DADCE0"/><circle cx="88" cy="17" r="1" fill="#DADCE0"/><circle cx="100" cy="17" r="1" fill="#DADCE0"/><circle cx="107" cy="86" r="1" fill="#DADCE0"/><circle cx="99" cy="86" r="1" fill="#DADCE0"/><circle cx="103" cy="86" r="1" fill="#DADCE0"/><circle cx="111" cy="86" r="1" fill="#DADCE0"/><circle cx="229" cy="20" r="1" fill="#DADCE0"/><circle cx="233" cy="20" r="1" fill="#DADCE0"/><circle cx="221" cy="20" r="1" fill="#DADCE0"/><circle cx="225" cy="20" r="1" fill="#DADCE0"/><circle cx="115" cy="86" r="1" fill="#DADCE0"/><circle cx="281" cy="37" r="1" fill="#DADCE0"/><circle cx="285" cy="37" r="1" fill="#DADCE0"/><circle cx="76" cy="21" r="1" fill="#DADCE0"/><circle cx="80" cy="21" r="1" fill="#DADCE0"/><circle cx="64" cy="21" r="1" fill="#DADCE0"/><circle cx="84" cy="21" r="1" fill="#DADCE0"/><circle cx="88" cy="21" r="1" fill="#DADCE0"/><circle cx="273" cy="37" r="1" fill="#DADCE0"/><circle cx="72" cy="21" r="1" fill="#DADCE0"/><circle cx="277" cy="37" r="1" fill="#DADCE0"/><circle cx="289" cy="37" r="1" fill="#DADCE0"/><circle cx="293" cy="37" r="1" fill="#DADCE0"/><circle cx="297" cy="37" r="1" fill="#DADCE0"/><circle cx="91" cy="90" r="1" fill="#DADCE0"/><circle cx="95" cy="90" r="1" fill="#DADCE0"/><circle cx="99" cy="90" r="1" fill="#DADCE0"/><circle cx="103" cy="90" r="1" fill="#DADCE0"/><circle cx="107" cy="90" r="1" fill="#DADCE0"/><circle cx="87" cy="90" r="1" fill="#DADCE0"/><circle cx="265" cy="41" r="1" fill="#DADCE0"/><circle cx="269" cy="41" r="1" fill="#DADCE0"/><circle cx="273" cy="41" r="1" fill="#DADCE0"/><circle cx="253" cy="90" r="1" fill="#DADCE0"/><circle cx="257" cy="90" r="1" fill="#DADCE0"/><circle cx="249" cy="86" r="1" fill="#DADCE0"/><circle cx="253" cy="86" r="1" fill="#DADCE0"/><circle cx="261" cy="90" r="1" fill="#DADCE0"/><circle cx="39" cy="69" r="1" fill="#DADCE0"/><circle cx="257" cy="86" r="1" fill="#DADCE0"/><circle cx="43" cy="69" r="1" fill="#DADCE0"/><circle cx="35" cy="65" r="1" fill="#DADCE0"/><circle cx="233" cy="90" r="1" fill="#DADCE0"/><circle cx="249" cy="90" r="1" fill="#DADCE0"/><circle cx="237" cy="90" r="1" fill="#DADCE0"/><circle cx="241" cy="90" r="1" fill="#DADCE0"/><circle cx="245" cy="90" r="1" fill="#DADCE0"/><circle cx="245" cy="86" r="1" fill="#DADCE0"/><circle cx="39" cy="65" r="1" fill="#DADCE0"/><circle cx="47" cy="69" r="1" fill="#DADCE0"/><circle cx="43" cy="65" r="1" fill="#DADCE0"/><circle cx="19" cy="69" r="1" fill="#DADCE0"/><circle cx="35" cy="69" r="1" fill="#DADCE0"/><circle cx="23" cy="69" r="1" fill="#DADCE0"/><circle cx="27" cy="69" r="1" fill="#DADCE0"/><circle cx="31" cy="69" r="1" fill="#DADCE0"/><circle cx="31" cy="65" r="1" fill="#DADCE0"/><circle cx="261" cy="41" r="1" fill="#DADCE0"/><circle cx="277" cy="41" r="1" fill="#DADCE0"/><circle cx="281" cy="41" r="1" fill="#DADCE0"/><circle cx="70" cy="44" r="3" fill="#DADCE0"/><circle cx="78" cy="44" r="3" fill="#DADCE0"/><circle cx="86" cy="44" r="3" fill="#DADCE0"/><circle cx="54" cy="44" r="3" fill="#DADCE0"/><circle cx="220" cy="69" r="3" fill="#DADCE0"/><circle cx="228" cy="69" r="3" fill="#DADCE0"/><circle cx="236" cy="69" r="3" fill="#DADCE0"/><circle cx="252" cy="69" r="3" fill="#DADCE0"/><defs><filter id="a" width="94.303" height="94.303" x="110.348" y="8.348" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="4.326"/><feComposite in2="hardAlpha" operator="out"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow_22469_4450"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_22469_4450" result="shape"/></filter></defs></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="248" height="120" fill="none" viewBox="0 0 248 120"><g filter="url(#a)"><circle cx="123.5" cy="57.5" r="38.5" fill="#fff"/></g><path fill="#188038" d="M150.897 54.256h-14.708v7.354h14.708v-7.354Z"/><path fill="#4285F4" d="M110.451 71.414c-7.415 0-13.482-6.067-13.482-13.483 0-7.415 6.067-13.482 13.482-13.482 7.415 0 13.482 6.067 13.482 13.482 0 7.416-6.067 13.483-13.482 13.483Zm0-19.61c-3.371 0-6.129 2.757-6.129 6.127 0 3.371 2.758 6.129 6.129 6.129 3.37 0 6.128-2.758 6.128-6.129 0-3.37-2.758-6.128-6.128-6.128Z"/><path fill="#34A853" d="M145.995 61.61h-9.806v7.353h4.903v-2.451a2.458 2.458 0 0 1 2.451-2.451 2.459 2.459 0 0 1 2.452 2.451v2.451h4.902V61.61h-4.902Z"/><path fill="#EA4335" d="M123.443 54.256h-8.09c.736 1.042 1.226 2.267 1.226 3.677 0 1.41-.49 2.635-1.226 3.677h8.09c.306-1.165.49-2.39.49-3.677a14.41 14.41 0 0 0-.49-3.677Z"/><path fill="#FBBC04" d="M136.189 54.256h-12.747c.307 1.164.491 2.39.491 3.677s-.184 2.512-.491 3.677h12.747v-7.354Z"/><circle cx="156" cy="90" r="17" fill="#FCEEEE"/><path fill="#DC362E" d="M156 104c7.732 0 14-6.268 14-14s-6.268-14-14-14-14 6.268-14 14 6.268 14 14 14Z"/><path fill="#fff" d="M158 81h-4v11h4V81ZM158 95h-4v4h4v-4Z"/><circle cx="58" cy="23" r="1" fill="#DADCE0"/><circle cx="62" cy="23" r="1" fill="#DADCE0"/><circle cx="50" cy="23" r="1" fill="#DADCE0"/><circle cx="54" cy="23" r="1" fill="#DADCE0"/><circle cx="66" cy="23" r="1" fill="#DADCE0"/><circle cx="78" cy="99" r="1" fill="#DADCE0"/><circle cx="70" cy="99" r="1" fill="#DADCE0"/><circle cx="74" cy="99" r="1" fill="#DADCE0"/><circle cx="82" cy="99" r="1" fill="#DADCE0"/><circle cx="186" cy="22" r="1" fill="#DADCE0"/><circle cx="190" cy="22" r="1" fill="#DADCE0"/><circle cx="178" cy="22" r="1" fill="#DADCE0"/><circle cx="182" cy="22" r="1" fill="#DADCE0"/><circle cx="86" cy="99" r="1" fill="#DADCE0"/><circle cx="222" cy="36" r="1" fill="#DADCE0"/><circle cx="226" cy="36" r="1" fill="#DADCE0"/><circle cx="42" cy="27" r="1" fill="#DADCE0"/><circle cx="46" cy="27" r="1" fill="#DADCE0"/><circle cx="30" cy="27" r="1" fill="#DADCE0"/><circle cx="50" cy="27" r="1" fill="#DADCE0"/><circle cx="54" cy="27" r="1" fill="#DADCE0"/><circle cx="214" cy="36" r="1" fill="#DADCE0"/><circle cx="38" cy="27" r="1" fill="#DADCE0"/><circle cx="218" cy="36" r="1" fill="#DADCE0"/><circle cx="230" cy="36" r="1" fill="#DADCE0"/><circle cx="234" cy="36" r="1" fill="#DADCE0"/><circle cx="238" cy="36" r="1" fill="#DADCE0"/><circle cx="62" cy="103" r="1" fill="#DADCE0"/><circle cx="66" cy="103" r="1" fill="#DADCE0"/><circle cx="70" cy="103" r="1" fill="#DADCE0"/><circle cx="74" cy="103" r="1" fill="#DADCE0"/><circle cx="78" cy="103" r="1" fill="#DADCE0"/><circle cx="58" cy="103" r="1" fill="#DADCE0"/><circle cx="206" cy="40" r="1" fill="#DADCE0"/><circle cx="210" cy="40" r="1" fill="#DADCE0"/><circle cx="214" cy="40" r="1" fill="#DADCE0"/><circle cx="219" cy="96" r="1" fill="#DADCE0"/><circle cx="223" cy="96" r="1" fill="#DADCE0"/><circle cx="215" cy="92" r="1" fill="#DADCE0"/><circle cx="219" cy="92" r="1" fill="#DADCE0"/><circle cx="227" cy="96" r="1" fill="#DADCE0"/><circle cx="29" cy="81" r="1" fill="#DADCE0"/><circle cx="223" cy="92" r="1" fill="#DADCE0"/><circle cx="33" cy="81" r="1" fill="#DADCE0"/><circle cx="25" cy="77" r="1" fill="#DADCE0"/><circle cx="199" cy="96" r="1" fill="#DADCE0"/><circle cx="215" cy="96" r="1" fill="#DADCE0"/><circle cx="203" cy="96" r="1" fill="#DADCE0"/><circle cx="207" cy="96" r="1" fill="#DADCE0"/><circle cx="211" cy="96" r="1" fill="#DADCE0"/><circle cx="211" cy="92" r="1" fill="#DADCE0"/><circle cx="29" cy="77" r="1" fill="#DADCE0"/><circle cx="37" cy="81" r="1" fill="#DADCE0"/><circle cx="33" cy="77" r="1" fill="#DADCE0"/><circle cx="9" cy="81" r="1" fill="#DADCE0"/><circle cx="25" cy="81" r="1" fill="#DADCE0"/><circle cx="13" cy="81" r="1" fill="#DADCE0"/><circle cx="17" cy="81" r="1" fill="#DADCE0"/><circle cx="21" cy="81" r="1" fill="#DADCE0"/><circle cx="21" cy="77" r="1" fill="#DADCE0"/><circle cx="202" cy="40" r="1" fill="#DADCE0"/><circle cx="218" cy="40" r="1" fill="#DADCE0"/><circle cx="222" cy="40" r="1" fill="#DADCE0"/><circle cx="36" cy="50" r="3" fill="#DADCE0"/><circle cx="44" cy="50" r="3" fill="#DADCE0"/><circle cx="52" cy="50" r="3" fill="#DADCE0"/><circle cx="20" cy="50" r="3" fill="#DADCE0"/><circle cx="186" cy="75" r="3" fill="#DADCE0"/><circle cx="194" cy="75" r="3" fill="#DADCE0"/><circle cx="202" cy="75" r="3" fill="#DADCE0"/><circle cx="218" cy="75" r="3" fill="#DADCE0"/><defs><filter id="a" width="94.303" height="94.303" x="76.348" y="10.348" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="4.326"/><feComposite in2="hardAlpha" operator="out"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow_22742_4703"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_22742_4703" result="shape"/></filter></defs></svg> \ No newline at end of file
diff --git a/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_dark.svg b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_dark.svg index c309b38..ce0e58915 100644 --- a/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_dark.svg +++ b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_dark.svg
@@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="316" height="112" fill="none" viewBox="0 0 316 112"><path fill="#1F1F1F" d="M0 0h316v112H0z"/><circle cx="157.5" cy="55.5" r="38.5" fill="#3C4043"/><path fill="#188038" d="M184.897 52.256h-14.708v7.354h14.708v-7.354Z"/><path fill="#4285F4" d="M144.451 69.414c-7.415 0-13.482-6.067-13.482-13.483 0-7.415 6.067-13.482 13.482-13.482 7.415 0 13.482 6.067 13.482 13.482 0 7.416-6.067 13.483-13.482 13.483Zm0-19.61c-3.371 0-6.129 2.757-6.129 6.127 0 3.371 2.758 6.129 6.129 6.129 3.37 0 6.128-2.758 6.128-6.129 0-3.37-2.758-6.128-6.128-6.128Z"/><path fill="#34A853" d="M179.995 59.61h-9.806v7.353h4.903v-2.451a2.458 2.458 0 0 1 2.451-2.451 2.459 2.459 0 0 1 2.452 2.451v2.451h4.902V59.61h-4.902Z"/><path fill="#EA4335" d="M157.443 52.256h-8.09c.736 1.042 1.226 2.267 1.226 3.677 0 1.41-.49 2.635-1.226 3.677h8.09c.306-1.165.49-2.39.49-3.677a14.41 14.41 0 0 0-.49-3.677Z"/><path fill="#FBBC04" d="M170.189 52.256h-12.747c.307 1.164.491 2.39.491 3.677s-.184 2.512-.491 3.677h12.747v-7.354Z"/><circle cx="190" cy="88" r="17" fill="#F9DEDC"/><path fill="#F2B8B5" d="M190 102c7.732 0 14-6.268 14-14s-6.268-14-14-14-14 6.268-14 14 6.268 14 14 14Z"/><path fill="#1F1F1F" d="M192 79h-4v11h4V79ZM192 93h-4v4h4v-4Z"/><circle cx="92" cy="17" r="1" fill="#5F6368"/><circle cx="96" cy="17" r="1" fill="#5F6368"/><circle cx="84" cy="17" r="1" fill="#5F6368"/><circle cx="88" cy="17" r="1" fill="#5F6368"/><circle cx="100" cy="17" r="1" fill="#5F6368"/><circle cx="107" cy="86" r="1" fill="#5F6368"/><circle cx="99" cy="86" r="1" fill="#5F6368"/><circle cx="103" cy="86" r="1" fill="#5F6368"/><circle cx="111" cy="86" r="1" fill="#5F6368"/><circle cx="229" cy="20" r="1" fill="#5F6368"/><circle cx="233" cy="20" r="1" fill="#5F6368"/><circle cx="221" cy="20" r="1" fill="#5F6368"/><circle cx="225" cy="20" r="1" fill="#5F6368"/><circle cx="115" cy="86" r="1" fill="#5F6368"/><circle cx="281" cy="37" r="1" fill="#5F6368"/><circle cx="285" cy="37" r="1" fill="#5F6368"/><circle cx="76" cy="21" r="1" fill="#5F6368"/><circle cx="80" cy="21" r="1" fill="#5F6368"/><circle cx="64" cy="21" r="1" fill="#5F6368"/><circle cx="84" cy="21" r="1" fill="#5F6368"/><circle cx="88" cy="21" r="1" fill="#5F6368"/><circle cx="273" cy="37" r="1" fill="#5F6368"/><circle cx="72" cy="21" r="1" fill="#5F6368"/><circle cx="277" cy="37" r="1" fill="#5F6368"/><circle cx="289" cy="37" r="1" fill="#5F6368"/><circle cx="293" cy="37" r="1" fill="#5F6368"/><circle cx="297" cy="37" r="1" fill="#5F6368"/><circle cx="91" cy="90" r="1" fill="#5F6368"/><circle cx="95" cy="90" r="1" fill="#5F6368"/><circle cx="99" cy="90" r="1" fill="#5F6368"/><circle cx="103" cy="90" r="1" fill="#5F6368"/><circle cx="107" cy="90" r="1" fill="#5F6368"/><circle cx="87" cy="90" r="1" fill="#5F6368"/><circle cx="265" cy="41" r="1" fill="#5F6368"/><circle cx="269" cy="41" r="1" fill="#5F6368"/><circle cx="273" cy="41" r="1" fill="#5F6368"/><circle cx="253" cy="90" r="1" fill="#5F6368"/><circle cx="257" cy="90" r="1" fill="#5F6368"/><circle cx="249" cy="86" r="1" fill="#5F6368"/><circle cx="253" cy="86" r="1" fill="#5F6368"/><circle cx="261" cy="90" r="1" fill="#5F6368"/><circle cx="39" cy="69" r="1" fill="#5F6368"/><circle cx="257" cy="86" r="1" fill="#5F6368"/><circle cx="43" cy="69" r="1" fill="#5F6368"/><circle cx="35" cy="65" r="1" fill="#5F6368"/><circle cx="233" cy="90" r="1" fill="#5F6368"/><circle cx="249" cy="90" r="1" fill="#5F6368"/><circle cx="237" cy="90" r="1" fill="#5F6368"/><circle cx="241" cy="90" r="1" fill="#5F6368"/><circle cx="245" cy="90" r="1" fill="#5F6368"/><circle cx="245" cy="86" r="1" fill="#5F6368"/><circle cx="39" cy="65" r="1" fill="#5F6368"/><circle cx="47" cy="69" r="1" fill="#5F6368"/><circle cx="43" cy="65" r="1" fill="#5F6368"/><circle cx="19" cy="69" r="1" fill="#5F6368"/><circle cx="35" cy="69" r="1" fill="#5F6368"/><circle cx="23" cy="69" r="1" fill="#5F6368"/><circle cx="27" cy="69" r="1" fill="#5F6368"/><circle cx="31" cy="69" r="1" fill="#5F6368"/><circle cx="31" cy="65" r="1" fill="#5F6368"/><circle cx="261" cy="41" r="1" fill="#5F6368"/><circle cx="277" cy="41" r="1" fill="#5F6368"/><circle cx="281" cy="41" r="1" fill="#5F6368"/><circle cx="70" cy="44" r="3" fill="#5F6368"/><circle cx="78" cy="44" r="3" fill="#5F6368"/><circle cx="86" cy="44" r="3" fill="#5F6368"/><circle cx="54" cy="44" r="3" fill="#5F6368"/><circle cx="220" cy="69" r="3" fill="#5F6368"/><circle cx="228" cy="69" r="3" fill="#5F6368"/><circle cx="236" cy="69" r="3" fill="#5F6368"/><circle cx="252" cy="69" r="3" fill="#5F6368"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="248" height="120" fill="none" viewBox="0 0 248 120"><circle cx="123.5" cy="57.5" r="38.5" fill="#3C4043"/><path fill="#188038" d="M150.897 54.256h-14.708v7.354h14.708v-7.354Z"/><path fill="#4285F4" d="M110.451 71.414c-7.415 0-13.482-6.067-13.482-13.483 0-7.415 6.067-13.482 13.482-13.482 7.415 0 13.482 6.067 13.482 13.482 0 7.416-6.067 13.483-13.482 13.483Zm0-19.61c-3.371 0-6.129 2.757-6.129 6.127 0 3.371 2.758 6.129 6.129 6.129 3.37 0 6.128-2.758 6.128-6.129 0-3.37-2.758-6.128-6.128-6.128Z"/><path fill="#34A853" d="M145.995 61.61h-9.806v7.353h4.903v-2.451a2.458 2.458 0 0 1 2.451-2.451 2.459 2.459 0 0 1 2.452 2.451v2.451h4.902V61.61h-4.902Z"/><path fill="#EA4335" d="M123.443 54.256h-8.09c.736 1.042 1.226 2.267 1.226 3.677 0 1.41-.49 2.635-1.226 3.677h8.09c.306-1.165.49-2.39.49-3.677a14.41 14.41 0 0 0-.49-3.677Z"/><path fill="#FBBC04" d="M136.189 54.256h-12.747c.307 1.164.491 2.39.491 3.677s-.184 2.512-.491 3.677h12.747v-7.354Z"/><circle cx="156" cy="90" r="17" fill="#F9DEDC"/><path fill="#F2B8B5" d="M156 104c7.732 0 14-6.268 14-14s-6.268-14-14-14-14 6.268-14 14 6.268 14 14 14Z"/><path fill="#1F1F1F" d="M158 81h-4v11h4V81ZM158 95h-4v4h4v-4Z"/><circle cx="58" cy="23" r="1" fill="#5F6368"/><circle cx="62" cy="23" r="1" fill="#5F6368"/><circle cx="50" cy="23" r="1" fill="#5F6368"/><circle cx="54" cy="23" r="1" fill="#5F6368"/><circle cx="66" cy="23" r="1" fill="#5F6368"/><circle cx="78" cy="99" r="1" fill="#5F6368"/><circle cx="70" cy="99" r="1" fill="#5F6368"/><circle cx="74" cy="99" r="1" fill="#5F6368"/><circle cx="82" cy="99" r="1" fill="#5F6368"/><circle cx="186" cy="22" r="1" fill="#5F6368"/><circle cx="190" cy="22" r="1" fill="#5F6368"/><circle cx="178" cy="22" r="1" fill="#5F6368"/><circle cx="182" cy="22" r="1" fill="#5F6368"/><circle cx="86" cy="99" r="1" fill="#5F6368"/><circle cx="222" cy="36" r="1" fill="#5F6368"/><circle cx="226" cy="36" r="1" fill="#5F6368"/><circle cx="42" cy="27" r="1" fill="#5F6368"/><circle cx="46" cy="27" r="1" fill="#5F6368"/><circle cx="30" cy="27" r="1" fill="#5F6368"/><circle cx="50" cy="27" r="1" fill="#5F6368"/><circle cx="54" cy="27" r="1" fill="#5F6368"/><circle cx="214" cy="36" r="1" fill="#5F6368"/><circle cx="38" cy="27" r="1" fill="#5F6368"/><circle cx="218" cy="36" r="1" fill="#5F6368"/><circle cx="230" cy="36" r="1" fill="#5F6368"/><circle cx="234" cy="36" r="1" fill="#5F6368"/><circle cx="238" cy="36" r="1" fill="#5F6368"/><circle cx="62" cy="103" r="1" fill="#5F6368"/><circle cx="66" cy="103" r="1" fill="#5F6368"/><circle cx="70" cy="103" r="1" fill="#5F6368"/><circle cx="74" cy="103" r="1" fill="#5F6368"/><circle cx="78" cy="103" r="1" fill="#5F6368"/><circle cx="58" cy="103" r="1" fill="#5F6368"/><circle cx="206" cy="40" r="1" fill="#5F6368"/><circle cx="210" cy="40" r="1" fill="#5F6368"/><circle cx="214" cy="40" r="1" fill="#5F6368"/><circle cx="219" cy="96" r="1" fill="#5F6368"/><circle cx="223" cy="96" r="1" fill="#5F6368"/><circle cx="215" cy="92" r="1" fill="#5F6368"/><circle cx="219" cy="92" r="1" fill="#5F6368"/><circle cx="227" cy="96" r="1" fill="#5F6368"/><circle cx="29" cy="81" r="1" fill="#5F6368"/><circle cx="223" cy="92" r="1" fill="#5F6368"/><circle cx="33" cy="81" r="1" fill="#5F6368"/><circle cx="25" cy="77" r="1" fill="#5F6368"/><circle cx="199" cy="96" r="1" fill="#5F6368"/><circle cx="215" cy="96" r="1" fill="#5F6368"/><circle cx="203" cy="96" r="1" fill="#5F6368"/><circle cx="207" cy="96" r="1" fill="#5F6368"/><circle cx="211" cy="96" r="1" fill="#5F6368"/><circle cx="211" cy="92" r="1" fill="#5F6368"/><circle cx="29" cy="77" r="1" fill="#5F6368"/><circle cx="37" cy="81" r="1" fill="#5F6368"/><circle cx="33" cy="77" r="1" fill="#5F6368"/><circle cx="9" cy="81" r="1" fill="#5F6368"/><circle cx="25" cy="81" r="1" fill="#5F6368"/><circle cx="13" cy="81" r="1" fill="#5F6368"/><circle cx="17" cy="81" r="1" fill="#5F6368"/><circle cx="21" cy="81" r="1" fill="#5F6368"/><circle cx="21" cy="77" r="1" fill="#5F6368"/><circle cx="202" cy="40" r="1" fill="#5F6368"/><circle cx="218" cy="40" r="1" fill="#5F6368"/><circle cx="222" cy="40" r="1" fill="#5F6368"/><circle cx="36" cy="50" r="3" fill="#5F6368"/><circle cx="44" cy="50" r="3" fill="#5F6368"/><circle cx="52" cy="50" r="3" fill="#5F6368"/><circle cx="20" cy="50" r="3" fill="#5F6368"/><circle cx="186" cy="75" r="3" fill="#5F6368"/><circle cx="194" cy="75" r="3" fill="#5F6368"/><circle cx="202" cy="75" r="3" fill="#5F6368"/><circle cx="218" cy="75" r="3" fill="#5F6368"/></svg> \ No newline at end of file
diff --git a/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_dark_non_branded.svg b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_dark_non_branded.svg new file mode 100644 index 0000000..31614701 --- /dev/null +++ b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_dark_non_branded.svg
@@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="248" height="120" fill="none" viewBox="0 0 248 120"><circle cx="123.5" cy="57.5" r="38.5" fill="#3C4043"/><path fill="#4285F4" fill-rule="evenodd" d="M110.451 71.414c-7.415 0-13.482-6.067-13.482-13.483 0-7.415 6.067-13.482 13.482-13.482 6.142 0 11.359 4.163 12.969 9.807H150.897v14.707h-4.902v-2.451a2.459 2.459 0 0 0-2.452-2.451 2.458 2.458 0 0 0-2.451 2.451v2.451h-4.903V61.61H123.42c-1.611 5.642-6.828 9.804-12.969 9.804Zm5.021-16.985c.669 1.004 1.107 2.172 1.107 3.504 0 1.306-.421 2.454-1.068 3.444a6.134 6.134 0 0 1-5.06 2.683c-3.371 0-6.129-2.758-6.129-6.129 0-3.37 2.758-6.128 6.129-6.128a6.133 6.133 0 0 1 5.021 2.626Z" clip-rule="evenodd"/><circle cx="156" cy="90" r="17" fill="#F9DEDC"/><path fill="#F2B8B5" d="M156 104c7.732 0 14-6.268 14-14s-6.268-14-14-14-14 6.268-14 14 6.268 14 14 14Z"/><path fill="#1F1F1F" d="M158 81h-4v11h4V81ZM158 95h-4v4h4v-4Z"/><circle cx="58" cy="23" r="1" fill="#5F6368"/><circle cx="62" cy="23" r="1" fill="#5F6368"/><circle cx="50" cy="23" r="1" fill="#5F6368"/><circle cx="54" cy="23" r="1" fill="#5F6368"/><circle cx="66" cy="23" r="1" fill="#5F6368"/><circle cx="78" cy="99" r="1" fill="#5F6368"/><circle cx="70" cy="99" r="1" fill="#5F6368"/><circle cx="74" cy="99" r="1" fill="#5F6368"/><circle cx="82" cy="99" r="1" fill="#5F6368"/><circle cx="186" cy="22" r="1" fill="#5F6368"/><circle cx="190" cy="22" r="1" fill="#5F6368"/><circle cx="178" cy="22" r="1" fill="#5F6368"/><circle cx="182" cy="22" r="1" fill="#5F6368"/><circle cx="86" cy="99" r="1" fill="#5F6368"/><circle cx="222" cy="36" r="1" fill="#5F6368"/><circle cx="226" cy="36" r="1" fill="#5F6368"/><circle cx="42" cy="27" r="1" fill="#5F6368"/><circle cx="46" cy="27" r="1" fill="#5F6368"/><circle cx="30" cy="27" r="1" fill="#5F6368"/><circle cx="50" cy="27" r="1" fill="#5F6368"/><circle cx="54" cy="27" r="1" fill="#5F6368"/><circle cx="214" cy="36" r="1" fill="#5F6368"/><circle cx="38" cy="27" r="1" fill="#5F6368"/><circle cx="218" cy="36" r="1" fill="#5F6368"/><circle cx="230" cy="36" r="1" fill="#5F6368"/><circle cx="234" cy="36" r="1" fill="#5F6368"/><circle cx="238" cy="36" r="1" fill="#5F6368"/><circle cx="62" cy="103" r="1" fill="#5F6368"/><circle cx="66" cy="103" r="1" fill="#5F6368"/><circle cx="70" cy="103" r="1" fill="#5F6368"/><circle cx="74" cy="103" r="1" fill="#5F6368"/><circle cx="78" cy="103" r="1" fill="#5F6368"/><circle cx="58" cy="103" r="1" fill="#5F6368"/><circle cx="206" cy="40" r="1" fill="#5F6368"/><circle cx="210" cy="40" r="1" fill="#5F6368"/><circle cx="214" cy="40" r="1" fill="#5F6368"/><circle cx="219" cy="96" r="1" fill="#5F6368"/><circle cx="223" cy="96" r="1" fill="#5F6368"/><circle cx="215" cy="92" r="1" fill="#5F6368"/><circle cx="219" cy="92" r="1" fill="#5F6368"/><circle cx="227" cy="96" r="1" fill="#5F6368"/><circle cx="29" cy="81" r="1" fill="#5F6368"/><circle cx="223" cy="92" r="1" fill="#5F6368"/><circle cx="33" cy="81" r="1" fill="#5F6368"/><circle cx="25" cy="77" r="1" fill="#5F6368"/><circle cx="199" cy="96" r="1" fill="#5F6368"/><circle cx="215" cy="96" r="1" fill="#5F6368"/><circle cx="203" cy="96" r="1" fill="#5F6368"/><circle cx="207" cy="96" r="1" fill="#5F6368"/><circle cx="211" cy="96" r="1" fill="#5F6368"/><circle cx="211" cy="92" r="1" fill="#5F6368"/><circle cx="29" cy="77" r="1" fill="#5F6368"/><circle cx="37" cy="81" r="1" fill="#5F6368"/><circle cx="33" cy="77" r="1" fill="#5F6368"/><circle cx="9" cy="81" r="1" fill="#5F6368"/><circle cx="25" cy="81" r="1" fill="#5F6368"/><circle cx="13" cy="81" r="1" fill="#5F6368"/><circle cx="17" cy="81" r="1" fill="#5F6368"/><circle cx="21" cy="81" r="1" fill="#5F6368"/><circle cx="21" cy="77" r="1" fill="#5F6368"/><circle cx="202" cy="40" r="1" fill="#5F6368"/><circle cx="218" cy="40" r="1" fill="#5F6368"/><circle cx="222" cy="40" r="1" fill="#5F6368"/><circle cx="36" cy="50" r="3" fill="#5F6368"/><circle cx="44" cy="50" r="3" fill="#5F6368"/><circle cx="52" cy="50" r="3" fill="#5F6368"/><circle cx="20" cy="50" r="3" fill="#5F6368"/><circle cx="186" cy="75" r="3" fill="#5F6368"/><circle cx="194" cy="75" r="3" fill="#5F6368"/><circle cx="202" cy="75" r="3" fill="#5F6368"/><circle cx="218" cy="75" r="3" fill="#5F6368"/></svg> \ No newline at end of file
diff --git a/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_non_branded.svg b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_non_branded.svg new file mode 100644 index 0000000..a852bbf --- /dev/null +++ b/chrome/browser/resources/password_manager/images/relaunch_chrome_promo_non_branded.svg
@@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="248" height="120" fill="none" viewBox="0 0 248 120"><g filter="url(#a)"><circle cx="123.5" cy="57.5" r="38.5" fill="#fff"/></g><path fill="#4285F4" fill-rule="evenodd" d="M96.969 57.931c0 7.416 6.067 13.483 13.482 13.483 6.141 0 11.358-4.162 12.969-9.804h12.769v7.353h4.903v-2.451a2.458 2.458 0 0 1 2.451-2.451 2.459 2.459 0 0 1 2.452 2.451v2.451h4.902V54.256H123.42c-1.61-5.644-6.827-9.807-12.969-9.807-7.415 0-13.482 6.067-13.482 13.482Zm7.353 0c0-3.37 2.758-6.128 6.129-6.128 3.37 0 6.128 2.758 6.128 6.128 0 3.371-2.758 6.129-6.128 6.129-3.371 0-6.129-2.758-6.129-6.129Z" clip-rule="evenodd"/><circle cx="156" cy="90" r="17" fill="#FCEEEE"/><path fill="#DC362E" d="M156 104c7.732 0 14-6.268 14-14s-6.268-14-14-14-14 6.268-14 14 6.268 14 14 14Z"/><path fill="#fff" d="M158 81h-4v11h4V81ZM158 95h-4v4h4v-4Z"/><circle cx="58" cy="23" r="1" fill="#DADCE0"/><circle cx="62" cy="23" r="1" fill="#DADCE0"/><circle cx="50" cy="23" r="1" fill="#DADCE0"/><circle cx="54" cy="23" r="1" fill="#DADCE0"/><circle cx="66" cy="23" r="1" fill="#DADCE0"/><circle cx="78" cy="99" r="1" fill="#DADCE0"/><circle cx="70" cy="99" r="1" fill="#DADCE0"/><circle cx="74" cy="99" r="1" fill="#DADCE0"/><circle cx="82" cy="99" r="1" fill="#DADCE0"/><circle cx="186" cy="22" r="1" fill="#DADCE0"/><circle cx="190" cy="22" r="1" fill="#DADCE0"/><circle cx="178" cy="22" r="1" fill="#DADCE0"/><circle cx="182" cy="22" r="1" fill="#DADCE0"/><circle cx="86" cy="99" r="1" fill="#DADCE0"/><circle cx="222" cy="36" r="1" fill="#DADCE0"/><circle cx="226" cy="36" r="1" fill="#DADCE0"/><circle cx="42" cy="27" r="1" fill="#DADCE0"/><circle cx="46" cy="27" r="1" fill="#DADCE0"/><circle cx="30" cy="27" r="1" fill="#DADCE0"/><circle cx="50" cy="27" r="1" fill="#DADCE0"/><circle cx="54" cy="27" r="1" fill="#DADCE0"/><circle cx="214" cy="36" r="1" fill="#DADCE0"/><circle cx="38" cy="27" r="1" fill="#DADCE0"/><circle cx="218" cy="36" r="1" fill="#DADCE0"/><circle cx="230" cy="36" r="1" fill="#DADCE0"/><circle cx="234" cy="36" r="1" fill="#DADCE0"/><circle cx="238" cy="36" r="1" fill="#DADCE0"/><circle cx="62" cy="103" r="1" fill="#DADCE0"/><circle cx="66" cy="103" r="1" fill="#DADCE0"/><circle cx="70" cy="103" r="1" fill="#DADCE0"/><circle cx="74" cy="103" r="1" fill="#DADCE0"/><circle cx="78" cy="103" r="1" fill="#DADCE0"/><circle cx="58" cy="103" r="1" fill="#DADCE0"/><circle cx="206" cy="40" r="1" fill="#DADCE0"/><circle cx="210" cy="40" r="1" fill="#DADCE0"/><circle cx="214" cy="40" r="1" fill="#DADCE0"/><circle cx="219" cy="96" r="1" fill="#DADCE0"/><circle cx="223" cy="96" r="1" fill="#DADCE0"/><circle cx="215" cy="92" r="1" fill="#DADCE0"/><circle cx="219" cy="92" r="1" fill="#DADCE0"/><circle cx="227" cy="96" r="1" fill="#DADCE0"/><circle cx="29" cy="81" r="1" fill="#DADCE0"/><circle cx="223" cy="92" r="1" fill="#DADCE0"/><circle cx="33" cy="81" r="1" fill="#DADCE0"/><circle cx="25" cy="77" r="1" fill="#DADCE0"/><circle cx="199" cy="96" r="1" fill="#DADCE0"/><circle cx="215" cy="96" r="1" fill="#DADCE0"/><circle cx="203" cy="96" r="1" fill="#DADCE0"/><circle cx="207" cy="96" r="1" fill="#DADCE0"/><circle cx="211" cy="96" r="1" fill="#DADCE0"/><circle cx="211" cy="92" r="1" fill="#DADCE0"/><circle cx="29" cy="77" r="1" fill="#DADCE0"/><circle cx="37" cy="81" r="1" fill="#DADCE0"/><circle cx="33" cy="77" r="1" fill="#DADCE0"/><circle cx="9" cy="81" r="1" fill="#DADCE0"/><circle cx="25" cy="81" r="1" fill="#DADCE0"/><circle cx="13" cy="81" r="1" fill="#DADCE0"/><circle cx="17" cy="81" r="1" fill="#DADCE0"/><circle cx="21" cy="81" r="1" fill="#DADCE0"/><circle cx="21" cy="77" r="1" fill="#DADCE0"/><circle cx="202" cy="40" r="1" fill="#DADCE0"/><circle cx="218" cy="40" r="1" fill="#DADCE0"/><circle cx="222" cy="40" r="1" fill="#DADCE0"/><circle cx="36" cy="50" r="3" fill="#DADCE0"/><circle cx="44" cy="50" r="3" fill="#DADCE0"/><circle cx="52" cy="50" r="3" fill="#DADCE0"/><circle cx="20" cy="50" r="3" fill="#DADCE0"/><circle cx="186" cy="75" r="3" fill="#DADCE0"/><circle cx="194" cy="75" r="3" fill="#DADCE0"/><circle cx="202" cy="75" r="3" fill="#DADCE0"/><circle cx="218" cy="75" r="3" fill="#DADCE0"/><defs><filter id="a" width="94.303" height="94.303" x="76.348" y="10.348" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="4.326"/><feComposite in2="hardAlpha" operator="out"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow_22745_4390"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_22745_4390" result="shape"/></filter></defs></svg> \ No newline at end of file
diff --git a/chrome/browser/resources/password_manager/promo_cards/promo_card.html b/chrome/browser/resources/password_manager/promo_cards/promo_card.html index aa1e6a6..3fc59f11 100644 --- a/chrome/browser/resources/password_manager/promo_cards/promo_card.html +++ b/chrome/browser/resources/password_manager/promo_cards/promo_card.html
@@ -33,9 +33,18 @@ } </style> <picture id="image"> - <source class="banner" srcset="./images/[[promoCard.id]]_dark.svg" - media="(prefers-color-scheme: dark)"> - <img class="banner" alt="" src="./images/[[promoCard.id]].svg"> + <if expr="_google_chrome"> + <source class="banner" srcset="./images/[[promoCard.id]]_dark.svg" + media="(prefers-color-scheme: dark)"> + <img class="banner" alt="" src="./images/[[promoCard.id]].svg"> + </if> + <if expr="not _google_chrome"> + <source class="banner" + srcset="./images/[[promoCard.id]]_dark_non_branded.svg " + media="(prefers-color-scheme: dark)"> + <img class="banner" alt="" + src="./images/[[promoCard.id]]_non_branded.svg "> + </if> </picture> <div id="promoContent"> <span id="title" class="label">[[promoCard.title]]</span>
diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc index a8bde7569..21074912 100644 --- a/chrome/browser/search_engines/template_url_service_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_unittest.cc
@@ -139,6 +139,7 @@ data->SetURL(std::string("https://") + keyword + ".com/q={searchTerms}"); data->created_by_policy = TemplateURLData::CreatedByPolicy::kSiteSearch; data->enforced_by_policy = false; + data->is_active = TemplateURLData::ActiveStatus::kTrue; data->favicon_url = GURL(std::string("https://") + keyword + ".com/favicon.ico"); data->safe_for_autoreplace = false;
diff --git a/chrome/browser/smart_card/BUILD.gn b/chrome/browser/smart_card/BUILD.gn index 2cec83b..db70716 100644 --- a/chrome/browser/smart_card/BUILD.gn +++ b/chrome/browser/smart_card/BUILD.gn
@@ -11,6 +11,8 @@ "chromeos_smart_card_delegate.h", "get_smart_card_context_factory.cc", "get_smart_card_context_factory.h", + "smart_card_permission_request.cc", + "smart_card_permission_request.h", ] if (!is_chromeos_device) { @@ -27,7 +29,9 @@ deps = [ "//chrome/browser/chromeos/extensions/smart_card_provider_private", "//chrome/browser/profiles:profile", - "//content/public/browser:browser", + "//components/permissions", + "//components/strings:components_strings_grit", + "//content/public/browser", ] } # TODO(crbug.com/1386175): Add chrome_smart_card_delegate.* for Win/Mac/Linux
diff --git a/chrome/browser/smart_card/chromeos_smart_card_delegate.cc b/chrome/browser/smart_card/chromeos_smart_card_delegate.cc index c8888a7..02bdce25 100644 --- a/chrome/browser/smart_card/chromeos_smart_card_delegate.cc +++ b/chrome/browser/smart_card/chromeos_smart_card_delegate.cc
@@ -3,9 +3,15 @@ // found in the LICENSE file. #include "chrome/browser/smart_card/chromeos_smart_card_delegate.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/smart_card/get_smart_card_context_factory.h" +#include "chrome/browser/smart_card/smart_card_permission_request.h" +#include "components/permissions/permission_request_manager.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/web_contents.h" ChromeOsSmartCardDelegate::ChromeOsSmartCardDelegate() = default; +ChromeOsSmartCardDelegate::~ChromeOsSmartCardDelegate() = default; mojo::PendingRemote<device::mojom::SmartCardContextFactory> ChromeOsSmartCardDelegate::GetSmartCardContextFactory( @@ -17,14 +23,56 @@ content::RenderFrameHost& render_frame_host, const std::string& reader_name) { // TODO(crbug.com/1386175): Ask permission context. - return true; + return false; // Asks every time } void ChromeOsSmartCardDelegate::RequestReaderPermission( content::RenderFrameHost& render_frame_host, const std::string& reader_name, RequestReaderPermissionCallback callback) { - // TODO(crbug.com/1386175): Show permission prompt. Call permission context - // according to prompt response. - std::move(callback).Run(true); + const url::Origin& origin = + render_frame_host.GetMainFrame()->GetLastCommittedOrigin(); + + auto* web_contents = + content::WebContents::FromRenderFrameHost(&render_frame_host); + + permissions::PermissionRequestManager* permission_request_manager = + permissions::PermissionRequestManager::FromWebContents(web_contents); + if (!permission_request_manager) { + LOG(ERROR) << "Cannot request permission: no PermissionRequestManager"; + std::move(callback).Run(false); + return; + } + + // Regarding ownership: The request will delete itself once the request + // manager notifies that it can do so. + auto* permission_request = new SmartCardPermissionRequest( + origin, reader_name, + base::BindOnce(&ChromeOsSmartCardDelegate::OnPermissionRequestDecided, + weak_factory_.GetWeakPtr(), origin, reader_name, + std::move(callback))); + + permission_request_manager->AddRequest(&render_frame_host, + permission_request); +} + +void ChromeOsSmartCardDelegate::OnPermissionRequestDecided( + const url::Origin& origin, + const std::string& reader_name, + RequestReaderPermissionCallback callback, + SmartCardPermissionRequest::Result result) { + switch (result) { + case SmartCardPermissionRequest::Result::kAllowOnce: + // TODO(crbug.com/1386175): Set ephemeral grant in permission context. + std::move(callback).Run(true); + break; + case SmartCardPermissionRequest::Result::kAllowAlways: + // TODO(crbug.com/1386175): Set persistent grant in permission context. + std::move(callback).Run(true); + break; + case SmartCardPermissionRequest::Result::kDontAllow: + // There's no block list. Origin is free to request again. + std::move(callback).Run(false); + break; + } }
diff --git a/chrome/browser/smart_card/chromeos_smart_card_delegate.h b/chrome/browser/smart_card/chromeos_smart_card_delegate.h index c5d0bbe1..5bb1a38 100644 --- a/chrome/browser/smart_card/chromeos_smart_card_delegate.h +++ b/chrome/browser/smart_card/chromeos_smart_card_delegate.h
@@ -5,11 +5,14 @@ #ifndef CHROME_BROWSER_SMART_CARD_CHROMEOS_SMART_CARD_DELEGATE_H_ #define CHROME_BROWSER_SMART_CARD_CHROMEOS_SMART_CARD_DELEGATE_H_ +#include "base/memory/weak_ptr.h" +#include "chrome/browser/smart_card/smart_card_permission_request.h" #include "content/public/browser/smart_card_delegate.h" class ChromeOsSmartCardDelegate : public content::SmartCardDelegate { public: ChromeOsSmartCardDelegate(); + ~ChromeOsSmartCardDelegate() override; // `content::SmartCardDelegate` overrides: mojo::PendingRemote<device::mojom::SmartCardContextFactory> @@ -20,6 +23,14 @@ content::RenderFrameHost& render_frame_host, const std::string& reader_name, RequestReaderPermissionCallback callback) override; + + private: + void OnPermissionRequestDecided(const url::Origin& origin, + const std::string& reader_name, + RequestReaderPermissionCallback callback, + SmartCardPermissionRequest::Result result); + + base::WeakPtrFactory<ChromeOsSmartCardDelegate> weak_factory_{this}; }; #endif // CHROME_BROWSER_SMART_CARD_CHROMEOS_SMART_CARD_DELEGATE_H_
diff --git a/chrome/browser/smart_card/smart_card_permission_request.cc b/chrome/browser/smart_card/smart_card_permission_request.cc new file mode 100644 index 0000000..c54e3aa1 --- /dev/null +++ b/chrome/browser/smart_card/smart_card_permission_request.cc
@@ -0,0 +1,65 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/smart_card/smart_card_permission_request.h" +#include "base/strings/utf_string_conversions.h" +#include "components/strings/grit/components_strings.h" +#include "ui/base/l10n/l10n_util.h" +#include "url/origin.h" + +SmartCardPermissionRequest::SmartCardPermissionRequest( + const url::Origin& requesting_origin, + const std::string& reader_name, + ResultCallback result_callback) + : permissions::PermissionRequest( + requesting_origin.GetURL(), + permissions::RequestType::kSmartCard, + /*has_gesture=*/false, + base::BindRepeating(&SmartCardPermissionRequest::OnPermissionDecided, + base::Unretained(this)), + base::BindOnce(&SmartCardPermissionRequest::DeleteRequest, + base::Unretained(this))), + reader_name_(reader_name), + result_callback_(std::move(result_callback)) {} + +SmartCardPermissionRequest::~SmartCardPermissionRequest() = default; + +bool SmartCardPermissionRequest::IsDuplicateOf( + permissions::PermissionRequest* other_request) const { + // The downcast here is safe because PermissionRequest::IsDuplicateOf ensures + // that both requests are of type RequestType::kSmartCard. + return permissions::PermissionRequest::IsDuplicateOf(other_request) && + reader_name_ == static_cast<SmartCardPermissionRequest*>(other_request) + ->reader_name_; +} + +std::u16string SmartCardPermissionRequest::GetMessageTextFragment() const { + return l10n_util::GetStringFUTF16(IDS_SMART_CARD_PERMISSION_PROMPT, + base::ASCIIToUTF16(reader_name_)); +} + +void SmartCardPermissionRequest::OnPermissionDecided( + ContentSetting content_setting_result, + bool is_one_time, + bool is_final_decision) { + if (!is_final_decision) { + return; + } + + Result result = Result::kDontAllow; + + if (content_setting_result == ContentSetting::CONTENT_SETTING_ALLOW) { + if (is_one_time) { + result = Result::kAllowOnce; + } else { + result = Result::kAllowAlways; + } + } + + std::move(result_callback_).Run(result); +} + +void SmartCardPermissionRequest::DeleteRequest() { + delete this; +}
diff --git a/chrome/browser/smart_card/smart_card_permission_request.h b/chrome/browser/smart_card/smart_card_permission_request.h new file mode 100644 index 0000000..27d9c1e --- /dev/null +++ b/chrome/browser/smart_card/smart_card_permission_request.h
@@ -0,0 +1,45 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SMART_CARD_SMART_CARD_PERMISSION_REQUEST_H_ +#define CHROME_BROWSER_SMART_CARD_SMART_CARD_PERMISSION_REQUEST_H_ + +#include "components/permissions/permission_request.h" + +namespace url { +class Origin; +} + +class SmartCardPermissionRequest : public permissions::PermissionRequest { + public: + enum class Result { + kAllowOnce = 0, + kAllowAlways = 1, + kDontAllow = 2, + }; + + using ResultCallback = base::OnceCallback<void(Result)>; + + SmartCardPermissionRequest(const url::Origin& requesting_origin, + const std::string& reader_name, + ResultCallback result_callback); + ~SmartCardPermissionRequest() override; + + private: + // permissions::PermissionRequest: + bool IsDuplicateOf( + permissions::PermissionRequest* other_request) const override; + std::u16string GetMessageTextFragment() const override; + + void OnPermissionDecided(ContentSetting result, + bool is_one_time, + bool is_final_decision); + + void DeleteRequest(); + + std::string reader_name_; + ResultCallback result_callback_; +}; + +#endif // CHROME_BROWSER_SMART_CARD_SMART_CARD_PERMISSION_REQUEST_H_
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb index f0b14c00..cf2edaf 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -578,7 +578,7 @@ <translation id="4162867837470729563">Llista d'opcions de compartició a alçada completa.</translation> <translation id="4170011742729630528">El servei no està disponible. Torneu-ho a provar més tard.</translation> <translation id="4177222230309051052">Obtén totes les teves adreces d'interès</translation> -<translation id="4177501066905053472">Temes d'anuncis</translation> +<translation id="4177501066905053472">Temes d'anunci</translation> <translation id="4181841719683918333">Idiomes</translation> <translation id="4188221736490993796">Ordena de la Z a la A</translation> <translation id="4195643157523330669">Obre en una pestanya nova</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index a5639eb..5634235 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -243,7 +243,7 @@ <translation id="2386938421315164605">Скрывайте и показывайте темы</translation> <translation id="2390510615457643724">Снова скачать файл "<ph name="FILE_NAME" />" (<ph name="FILE_SIZE" />)?</translation> <translation id="2410754283952462441">Выберите аккаунт</translation> -<translation id="2414886740292270097">Темная</translation> +<translation id="2414886740292270097">Тёмная</translation> <translation id="2421705177906985956">Пока сайтов нет.</translation> <translation id="2426805022920575512">Сменить аккаунт</translation> <translation id="2427025860753516072">{FILE_COUNT,plural, =1{Видео, 1 видео в списке}one{Видео, # видео в списке}few{Видео, # видео в списке}many{Видео, # видео в списке}other{Видео, # видео в списке}}</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb index ddb00a5..a7c538d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -666,7 +666,7 @@ <translation id="4645146721047390964">Katika hali fiche, tovuti haziwezi kutumia vidakuzi vyako kuona shughuli zako za kuvinjari kwenye tovuti mbalimbali, kwa mfano, ili kukuonyesha matangazo yanayokufaa zaidi. Huenda vipengele kwenye baadhi ya tovuti vikaacha kufanya kazi.</translation> <translation id="4650364565596261010">Mipangilio chaguomsingi ya mfumo</translation> <translation id="465657074423018424">Kipengele cha Kuvinjari Salama hukulinda dhidi ya tovuti zinazopotosha. Ukikizima, kuwa makini zaidi unapovinjari hasa kabla ya kuweka manenosiri.</translation> -<translation id="4662373422909645029">Jina la kuwakilisha halipaswi kuwa na nambari</translation> +<translation id="4662373422909645029">Jina la kuwakilisha halipaswi kuwa na namba</translation> <translation id="4663499661119906179">Angalia tovuti na habari maarufu unazopendekezewa</translation> <translation id="4663756553811254707">Alamisho <ph name="NUMBER_OF_BOOKMARKS" /> zimefutwa</translation> <translation id="4668279686271488041">Data ya kipimo cha matangazo hufutwa mara kwa mara kwenye kifaa chako</translation>
diff --git a/chrome/browser/ui/autofill/payments/iban_bubble_controller_impl.cc b/chrome/browser/ui/autofill/payments/iban_bubble_controller_impl.cc index 87721bbb..55ef9593 100644 --- a/chrome/browser/ui/autofill/payments/iban_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/payments/iban_bubble_controller_impl.cc
@@ -200,6 +200,8 @@ return; case IbanBubbleType::kUploadSave: CHECK(!save_iban_prompt_callback_.is_null()); + autofill_metrics::LogSaveIbanBubbleResultSavedWithNicknameMetric( + !nickname.empty(), /*is_upload_save=*/true); iban_.set_nickname(nickname); std::move(save_iban_prompt_callback_) .Run(AutofillClient::SaveIbanOfferUserDecision::kAccepted, nickname); @@ -242,7 +244,8 @@ set_bubble_view(nullptr); // Log save IBAN prompt result according to the closed reason. - if (current_bubble_type_ == IbanBubbleType::kLocalSave) { + if (current_bubble_type_ == IbanBubbleType::kLocalSave || + current_bubble_type_ == IbanBubbleType::kUploadSave) { autofill_metrics::SaveIbanBubbleResult metric; switch (closed_reason) { case PaymentsBubbleClosedReason::kAccepted: @@ -265,8 +268,9 @@ NOTREACHED(); break; } - autofill_metrics::LogSaveIbanBubbleResultMetric(metric, is_reshow_, - /*is_upload_save=*/false); + autofill_metrics::LogSaveIbanBubbleResultMetric( + metric, is_reshow_, + /*is_upload_save=*/current_bubble_type_ == IbanBubbleType::kUploadSave); } // Handles `current_bubble_type_` change according to its current type and the @@ -369,8 +373,9 @@ /*is_upload_save=*/false); break; case IbanBubbleType::kUploadSave: - // TODO(b/296651786): Extend SaveIbanPromptOffer UMA to include Upload - // subhistogram. + autofill_metrics::LogSaveIbanBubbleOfferMetric( + autofill_metrics::SaveIbanPromptOffer::kShown, is_reshow_, + /*is_upload_save=*/true); break; case IbanBubbleType::kManageSavedIban: // TODO(crbug.com/1349109): Add metrics for manage saved IBAN mode. @@ -412,6 +417,10 @@ is_reshow_, /*is_upload_save=*/false); break; case IbanBubbleType::kUploadSave: + autofill_metrics::LogSaveIbanBubbleOfferMetric( + autofill_metrics::SaveIbanPromptOffer::kNotShownMaxStrikesReached, + is_reshow_, /*is_upload_save=*/true); + break; case IbanBubbleType::kManageSavedIban: break; case IbanBubbleType::kInactive:
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc index c851e823..6b6a3991 100644 --- a/chrome/browser/ui/browser_commands.cc +++ b/chrome/browser/ui/browser_commands.cc
@@ -1515,7 +1515,8 @@ void StartTabOrganizationRequest(Browser* browser) { TabOrganizationService* service = TabOrganizationServiceFactory::GetForProfile(browser->profile()); - service->StartRequest(browser); + service->ResetSessionForBrowser(browser); + service->OnUserInvokedFeature(browser); } void ShowTranslateBubble(Browser* browser) {
diff --git a/chrome/browser/ui/browser_commands_browsertest.cc b/chrome/browser/ui/browser_commands_browsertest.cc index 08c1476..cd74a175 100644 --- a/chrome/browser/ui/browser_commands_browsertest.cc +++ b/chrome/browser/ui/browser_commands_browsertest.cc
@@ -342,7 +342,7 @@ const TabOrganizationSession* session = service->GetSessionForBrowser(browser()); - EXPECT_NE(TabOrganizationRequest::State::NOT_STARTED, + EXPECT_EQ(TabOrganizationRequest::State::NOT_STARTED, session->request()->state()); }
diff --git a/chrome/browser/ui/hats/survey_config.cc b/chrome/browser/ui/hats/survey_config.cc index 9c7b046..65d01b9e 100644 --- a/chrome/browser/ui/hats/survey_config.cc +++ b/chrome/browser/ui/hats/survey_config.cc
@@ -99,6 +99,7 @@ "ts-v2-ps4-notice-settings"; constexpr char kHatsSurveyTriggerTrustSafetyV2SafeBrowsingInterstitial[] = "ts-v2-safe-browsing-interstitial"; +constexpr char kHatsSurveyTriggerWallpaperSearch[] = "wallpaper-search"; #else // BUILDFLAG(IS_ANDROID) constexpr char kHatsSurveyTriggerAndroidStartupSurvey[] = "startup_survey"; #endif // #if !BUILDFLAG(IS_ANDROID) @@ -400,6 +401,11 @@ survey_configs.emplace_back(&features::kAutofillPasswordSurvey, kHatsSurveyTriggerAutofillPassword); + // Wallpaper Search survey. + survey_configs.emplace_back( + &features::kHappinessTrackingSurveysForWallpaperSearch, + kHatsSurveyTriggerWallpaperSearch); + // What's New survey. survey_configs.emplace_back( &features::kHappinessTrackingSurveysForDesktopWhatsNew,
diff --git a/chrome/browser/ui/hats/survey_config.h b/chrome/browser/ui/hats/survey_config.h index e0885da..616efacc 100644 --- a/chrome/browser/ui/hats/survey_config.h +++ b/chrome/browser/ui/hats/survey_config.h
@@ -63,6 +63,7 @@ extern const char kHatsSurveyTriggerTrustSafetyV2PrivacySandbox4NoticeSettings[]; extern const char kHatsSurveyTriggerTrustSafetyV2SafeBrowsingInterstitial[]; +extern const char kHatsSurveyTriggerWallpaperSearch[]; extern const char kHatsSurveyTriggerWhatsNew[]; #else extern const char kHatsSurveyTriggerAndroidStartupSurvey[];
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index bf3f718..98a2662 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -1060,8 +1060,9 @@ } return; } - // If reauth wasn't successful, change to local store and reopen the bubble is - // the state didn't change. + // If reauth wasn't successful, explicitly opt out, change to local store and + // reopen the bubble if the state didn't change. + GetPasswordFeatureManager()->OptOutOfAccountStorageAndClearSettings(); GetPasswordFeatureManager()->SetDefaultPasswordStore( password_manager::PasswordForm::Store::kProfileStore); if (passwords_data_.state() != password_manager::ui::PENDING_PASSWORD_STATE) @@ -1119,6 +1120,10 @@ // locally. This is already the default value, but setting it explicitly // makes sure the user won't be asked to opt in again (since "store not set" // gets interpreted as "first-time save"). + // Similarly, opting out explicitly has special handling in + // SyncUserSettings::GetSelectedTypes(), and thus in + // IsOptedInForAccountStorage(). + GetPasswordFeatureManager()->OptOutOfAccountStorageAndClearSettings(); GetPasswordFeatureManager()->SetDefaultPasswordStore( password_manager::PasswordForm::Store::kProfileStore); }
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc index 9e2fbfd..0d66c548 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -668,10 +668,17 @@ signin_metrics::ReauthAccessPoint::kPasswordSaveBubble, _)) .WillOnce(MoveArg<1>(&reauth_callback)); - // Unsuccessful reauth should change the default store to profile store. - EXPECT_CALL(*client().GetPasswordFeatureManager(), - SetDefaultPasswordStore( - password_manager::PasswordForm::Store::kProfileStore)); + { + // Unsuccessful reauth should change the default store to profile store and + // opt out of account storage. OptOutOfAccountStorageAndClearSettings() + // clears the store pref, so SetDefaultPasswordStore() should come second. + testing::InSequence in_sequence; + EXPECT_CALL(*client().GetPasswordFeatureManager(), + OptOutOfAccountStorageAndClearSettings()); + EXPECT_CALL(*client().GetPasswordFeatureManager(), + SetDefaultPasswordStore( + password_manager::PasswordForm::Store::kProfileStore)); + } // The user clicks save which will invoke the reauth flow. controller()->AuthenticateUserForAccountStoreOptInAndSavePassword(
diff --git a/chrome/browser/ui/profiles/profile_customization_util.cc b/chrome/browser/ui/profiles/profile_customization_util.cc index 4b1297c..a11b9db 100644 --- a/chrome/browser/ui/profiles/profile_customization_util.cc +++ b/chrome/browser/ui/profiles/profile_customization_util.cc
@@ -52,6 +52,20 @@ entry->SetLocalProfileName(profile_name, is_default_name); + if (signin_util::IsForceSigninEnabled() && + base::FeatureList::IsEnabled(kForceSigninFlowInProfilePicker)) { + // Managed accounts do not need to have Sync consent set. + // TODO(https://crbug.com/1478102): Align Managed and Consumer accounts. + if (!entry->CanBeManaged()) { + signin::IdentityManager* identity_manager = + IdentityManagerFactory::GetForProfile(profile); + CHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) + << "A non syncing account should not be able to finalize the " + "profile."; + } + entry->LockForceSigninProfile(/*is_lock=*/false); + } + if (!entry->IsOmitted()) { // The profile has already been created outside of the classic "profile // creation" flow and did not start as omitted. The rest of the finalization @@ -74,20 +88,6 @@ // setup experience. profile->GetPrefs()->SetBoolean(prefs::kHasSeenWelcomePage, true); } - - if (signin_util::IsForceSigninEnabled() && - base::FeatureList::IsEnabled(kForceSigninFlowInProfilePicker)) { - // Managed accounts do not need to have Sync consent set. - // TODO(https://crbug.com/1478102): Align Managed and Consumer accounts. - if (!entry->CanBeManaged()) { - signin::IdentityManager* identity_manager = - IdentityManagerFactory::GetForProfile(profile); - CHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) - << "A non syncing account should not be able to finalize the " - "profile."; - } - entry->LockForceSigninProfile(/*is_lock=*/false); - } } // -- ProfileNameResolver ------------------------------------------------------
diff --git a/chrome/browser/ui/profiles/profile_picker.h b/chrome/browser/ui/profiles/profile_picker.h index cb4bad5..36e3067 100644 --- a/chrome/browser/ui/profiles/profile_picker.h +++ b/chrome/browser/ui/profiles/profile_picker.h
@@ -15,6 +15,7 @@ #include "build/buildflag.h" #include "build/chromeos_buildflags.h" #include "components/signin/public/base/signin_buildflags.h" +#include "third_party/abseil-cpp/absl/types/variant.h" #include "third_party/skia/include/core/SkColor.h" #include "url/gurl.h" @@ -211,15 +212,26 @@ static void Show(Params&& params); #if BUILDFLAG(ENABLE_DICE_SUPPORT) + // Helper struct to allow passing different profile information for sign in: + // - An optional color for a new profile. + // - A file path for an existing profile. + using ProfileInfo = absl::variant<std::optional<SkColor>, base::FilePath>; + // Starts the Dice sign-in flow. The layout of the window gets updated for the - // sign-in flow. At the same time, the new profile is created and the sign-in - // page is rendered using the new profile. - // The new profile uses a theme generated from `profile_color` if provided or - // the default theme. + // sign-in flow while the profiles are created/loaded. + // The sign in flow can be triggered for a new or existing profile. + // For new profiles, the expected color is expected to be given as the + // `profile_info` param. The creation of the new profile happens and then the + // sign-in page is rendered using the new profile. The new profile uses a + // theme generated from the given profile color if provided or the default + // theme. + // For an existing profile, the profile path is expected to given as the + // `profile_info` param. The profile is loaded then the sign-page will be + // rendered with the profile. // `switch_finished_callback` gets informed whether the creation of the new // profile succeeded and the sign-in page gets displayed. static void SwitchToDiceSignIn( - std::optional<SkColor> profile_color, + ProfileInfo profile_info, base::OnceCallback<void(bool)> switch_finished_callback); // Starts the reauth for the existing primary account in the given `profile`.
diff --git a/chrome/browser/ui/tabs/organization/request_factory.cc b/chrome/browser/ui/tabs/organization/request_factory.cc index 40b2af8..945def4 100644 --- a/chrome/browser/ui/tabs/organization/request_factory.cc +++ b/chrome/browser/ui/tabs/organization/request_factory.cc
@@ -94,20 +94,16 @@ std::move(response_tab_ids)); } - if (organizations.size() > 0) { - const std::string server_execution_id = log_entry->log_ai_data_request() - ->mutable_model_execution_info() - ->server_execution_id(); + const std::string server_execution_id = log_entry->log_ai_data_request() + ->mutable_model_execution_info() + ->server_execution_id(); - std::unique_ptr<TabOrganizationResponse> local_response = - std::make_unique<TabOrganizationResponse>( - std::move(organizations), base::UTF8ToUTF16(server_execution_id), - base::BindOnce(OnLogResults, profile, std::move(log_entry))); + std::unique_ptr<TabOrganizationResponse> local_response = + std::make_unique<TabOrganizationResponse>( + std::move(organizations), base::UTF8ToUTF16(server_execution_id), + base::BindOnce(OnLogResults, profile, std::move(log_entry))); - std::move(on_completion).Run(std::move(local_response)); - } else { - std::move(on_failure).Run(); - } + std::move(on_completion).Run(std::move(local_response)); } void PerformTabOrganizationExecution(
diff --git a/chrome/browser/ui/tabs/organization/tab_organization_service.cc b/chrome/browser/ui/tabs/organization/tab_organization_service.cc index 159bdf7e..a7e3973 100644 --- a/chrome/browser/ui/tabs/organization/tab_organization_service.cc +++ b/chrome/browser/ui/tabs/organization/tab_organization_service.cc
@@ -105,6 +105,12 @@ return CreateSessionForBrowser(browser, base_session_webcontents); } +void TabOrganizationService::OnUserInvokedFeature(const Browser* browser) { + for (TabOrganizationObserver& observer : observers_) { + observer.OnUserInvokedFeature(browser); + } +} + void TabOrganizationService::StartRequest(const Browser* browser) { TabOrganizationSession* session = GetSessionForBrowser(browser); if (!session || session->IsComplete()) { @@ -114,9 +120,6 @@ TabOrganizationRequest::State::NOT_STARTED) { session->StartRequest(); } - for (TabOrganizationObserver& observer : observers_) { - observer.OnUserInvokedFeature(browser); - } } void TabOrganizationService::AcceptTabOrganization( @@ -154,7 +157,7 @@ } void TabOrganizationService::OnActionUIAccepted(const Browser* browser) { - StartRequest(browser); + OnUserInvokedFeature(browser); trigger_backoff_->Decrement(); }
diff --git a/chrome/browser/ui/tabs/organization/tab_organization_service.h b/chrome/browser/ui/tabs/organization/tab_organization_service.h index 1dbbbd9d..4db47e0 100644 --- a/chrome/browser/ui/tabs/organization/tab_organization_service.h +++ b/chrome/browser/ui/tabs/organization/tab_organization_service.h
@@ -64,6 +64,9 @@ const Browser* browser, const content::WebContents* base_session_webcontents = nullptr); + // Allows for other User actions to open up the Organization UI. + void OnUserInvokedFeature(const Browser* browser); + void AcceptTabOrganization(Browser* browser, TabOrganization::ID session_id, TabOrganization::ID organization_id);
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc index bcf77eb..e627a5f 100644 --- a/chrome/browser/ui/tabs/tab_strip_model.cc +++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -1577,6 +1577,7 @@ TabOrganizationService* const service = TabOrganizationServiceFactory::GetForProfile(profile_); service->ResetSessionForBrowser(browser, GetWebContentsAt(context_index)); + service->OnUserInvokedFeature(browser); break; }
diff --git a/chrome/browser/ui/views/autofill/popup/popup_row_view.cc b/chrome/browser/ui/views/autofill/popup/popup_row_view.cc index 4215fbc..86187044 100644 --- a/chrome/browser/ui/views/autofill/popup/popup_row_view.cc +++ b/chrome/browser/ui/views/autofill/popup/popup_row_view.cc
@@ -69,8 +69,10 @@ base::RepeatingClosure exit_callback_; }; -constexpr int kExpandableControlCellInsetPadding = 16; -constexpr int kExpandableControlCellIconSize = 6; +constexpr int kExpandChildSuggestionsViewWidth = 24; +constexpr int kExpandChildSuggestionsIconWidth = 6; +constexpr int kExpandChildSuggestionsViewHorizontalPadding = + (kExpandChildSuggestionsViewWidth - kExpandChildSuggestionsIconWidth) / 2; // Computes the position and set size of the suggestion at `suggestion_index` in // `controller`'s suggestions ignoring `PopupItemId::kSeparator`s. @@ -127,9 +129,9 @@ SetNotifyEnterExitOnChild(true); SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kHorizontal, - gfx::Insets(kExpandableControlCellInsetPadding))); + gfx::Insets(kExpandChildSuggestionsViewHorizontalPadding))); AddChildView(popup_cell_utils::ImageViewFromVectorIcon( - vector_icons::kSubmenuArrowIcon, kExpandableControlCellIconSize)); + vector_icons::kSubmenuArrowIcon, kExpandChildSuggestionsIconWidth)); } void PopupRowView::ExpandChildSuggestionsView::GetAccessibleNodeData(
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc b/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc index 5d2d828b..1206f82d 100644 --- a/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc +++ b/chrome/browser/ui/views/autofill/popup/popup_view_views_browsertest.cc
@@ -148,6 +148,19 @@ } IN_PROC_BROWSER_TEST_P(PopupViewViewsBrowsertest, + InvokeUi_Autofill_MultipleLabels) { + std::vector<std::vector<Suggestion::Text>> labels = { + {Suggestion::Text( + u"Fill full address - Main Second First Third Street 123"), + Suggestion::Text(u"Alexander Joseph Ricardo Park")}, + {Suggestion::Text(u"Fill full address"), Suggestion::Text(u"Alex Park")}}; + Suggestion suggestion("Google", std::move(labels), Suggestion::Icon::kAccount, + PopupItemId::kAddressEntry); + PrepareSuggestions({suggestion}); + ShowAndVerifyUi(); +} + +IN_PROC_BROWSER_TEST_P(PopupViewViewsBrowsertest, InvokeUi_Passwords_PasswordField) { // An account store entry. std::vector<Suggestion> suggestions;
diff --git a/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.cc b/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.cc index 0dd9f15..4900403 100644 --- a/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.cc +++ b/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.cc
@@ -474,7 +474,8 @@ } SwitchToIdentityStepsFromAccountSelection( - /*step_switch_finished_callback=*/base::DoNothing()); + /*step_switch_finished_callback=*/base::DoNothing(), kAccessPoint, + profile_->GetPath()); } void FirstRunFlowControllerDice::HandleIdentityStepsCompleted( @@ -491,12 +492,6 @@ SwitchToPostIdentitySteps(); } -std::unique_ptr<ProfilePickerDiceSignInProvider> -FirstRunFlowControllerDice::CreateDiceSignInProvider() { - return std::make_unique<ProfilePickerDiceSignInProvider>(host(), kAccessPoint, - profile_->GetPath()); -} - std::unique_ptr<ProfilePickerSignedInFlowController> FirstRunFlowControllerDice::CreateSignedInFlowController( Profile* signed_in_profile,
diff --git a/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.h b/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.h index 8b766716..6ee6602 100644 --- a/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.h +++ b/chrome/browser/ui/views/profiles/first_run_flow_controller_dice.h
@@ -46,8 +46,6 @@ protected: // ProfileManagementFlowControllerImpl bool PreFinishWithBrowser() override; - std::unique_ptr<ProfilePickerDiceSignInProvider> CreateDiceSignInProvider() - override; // `account_info` may not be set as the primary account yet. std::unique_ptr<ProfilePickerSignedInFlowController> CreateSignedInFlowController(
diff --git a/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.cc b/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.cc index 50f28ab6..0d2ad384 100644 --- a/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.cc +++ b/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.cc
@@ -53,7 +53,9 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) void ProfileManagementFlowControllerImpl:: SwitchToIdentityStepsFromAccountSelection( - StepSwitchFinishedCallback step_switch_finished_callback) { + StepSwitchFinishedCallback step_switch_finished_callback, + signin_metrics::AccessPoint access_point, + base::FilePath profile_path) { DCHECK_NE(Step::kAccountSelection, current_step()); DCHECK_NE(Step::kPostSignInFlow, current_step()); @@ -62,7 +64,9 @@ RegisterStep( Step::kAccountSelection, ProfileManagementStepController::CreateForDiceSignIn( - host(), CreateDiceSignInProvider(), + host(), + std::make_unique<ProfilePickerDiceSignInProvider>( + host(), access_point, std::move(profile_path)), base::BindOnce( &ProfileManagementFlowControllerImpl::HandleSignInCompleted, // Binding as Unretained as `this`
diff --git a/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.h b/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.h index 2e97eb6..999bcf7 100644 --- a/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.h +++ b/chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.h
@@ -9,6 +9,7 @@ #include "base/containers/queue.h" #include "chrome/browser/ui/views/profiles/profile_management_flow_controller.h" #include "chrome/browser/ui/views/profiles/profile_management_types.h" +#include "components/signin/public/base/signin_metrics.h" struct CoreAccountInfo; class Profile; @@ -20,10 +21,6 @@ class WebContents; } -#if BUILDFLAG(ENABLE_DICE_SUPPORT) -class ProfilePickerDiceSignInProvider; -#endif - // Allows sharing the logic for registering and connecting together // identity-related profile management steps. class ProfileManagementFlowControllerImpl @@ -62,11 +59,11 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) // Creates, registers and switches to steps to implement the identity flow // (signing in then doing the post sign in, which are driven by `Delegate`). + // Uses an existing profile if the `profile_path` is not empty. void SwitchToIdentityStepsFromAccountSelection( - StepSwitchFinishedCallback step_switch_finished_callback); - - virtual std::unique_ptr<ProfilePickerDiceSignInProvider> - CreateDiceSignInProvider() = 0; + StepSwitchFinishedCallback step_switch_finished_callback, + signin_metrics::AccessPoint access_point, + base::FilePath profile_path); #endif private:
diff --git a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc index e644dfa..19735abf 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.cc
@@ -58,13 +58,10 @@ ProfilePickerDiceSignInProvider::ProfilePickerDiceSignInProvider( ProfilePickerWebContentsHost* host, signin_metrics::AccessPoint signin_access_point, - std::optional<base::FilePath> profile_path) + base::FilePath profile_path) : host_(host), signin_access_point_(signin_access_point), - profile_path_(profile_path) { - // If the path is provided, it must be non-empty. - DCHECK(!(profile_path.has_value() && profile_path->empty())); -} + profile_path_(profile_path) {} ProfilePickerDiceSignInProvider::~ProfilePickerDiceSignInProvider() { // Handle unfinished signed-in profile creation (i.e. when callback was not @@ -99,10 +96,9 @@ &ProfilePickerDiceSignInProvider::OnProfileInitialized, weak_ptr_factory_.GetWeakPtr(), std::move(switch_finished_callback)); ProfileManager* profile_manager = g_browser_process->profile_manager(); - if (profile_path_.has_value()) { + if (!profile_path_.empty()) { bool profile_exists = profile_manager->LoadProfileByPath( - profile_path_.value(), /*incognito=*/false, - std::move(profile_init_callback)); + profile_path_, /*incognito=*/false, std::move(profile_init_callback)); DCHECK(profile_exists); } else { size_t icon_index = profiles::GetPlaceholderAvatarIndex(); @@ -224,7 +220,7 @@ // Apply the default theme to get consistent colors for toolbars in newly // created profiles (this matters for linux where the 'system' theme is used // for new profiles). - if (!profile_path_.has_value()) { + if (profile_path_.empty()) { auto* theme_service = ThemeServiceFactory::GetForProfile(profile_); theme_service->UseDefaultTheme(); }
diff --git a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h index e255877..207cd44 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h +++ b/chrome/browser/ui/views/profiles/profile_picker_dice_sign_in_provider.h
@@ -52,7 +52,7 @@ explicit ProfilePickerDiceSignInProvider( ProfilePickerWebContentsHost* host, signin_metrics::AccessPoint signin_access_point, - std::optional<base::FilePath> profile_path = std::nullopt); + base::FilePath profile_path = base::FilePath()); ~ProfilePickerDiceSignInProvider() override; ProfilePickerDiceSignInProvider(const ProfilePickerDiceSignInProvider&) = delete; @@ -140,9 +140,9 @@ const signin_metrics::AccessPoint signin_access_point_; - // The path to the profile in which to perform the sign-in. If absent, a new + // The path to the profile in which to perform the sign-in. If empty, a new // profile will be created. - const std::optional<base::FilePath> profile_path_; + const base::FilePath profile_path_; // Sign-in callback, valid until it's called. SignedInCallback callback_;
diff --git a/chrome/browser/ui/views/profiles/profile_picker_flow_controller.cc b/chrome/browser/ui/views/profiles/profile_picker_flow_controller.cc index 4a9c2ac5..4afc40f 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_flow_controller.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_flow_controller.cc
@@ -8,6 +8,8 @@ #include "base/functional/bind.h" #include "base/functional/callback_forward.h" +#include "base/functional/callback_helpers.h" +#include "base/functional/overloaded.h" #include "base/strings/utf_string_conversions.h" #include "base/trace_event/trace_event.h" #include "chrome/browser/browser_process.h" @@ -343,13 +345,26 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) void ProfilePickerFlowController::SwitchToDiceSignIn( - std::optional<SkColor> profile_color, + ProfilePicker::ProfileInfo profile_info, StepSwitchFinishedCallback switch_finished_callback) { DCHECK_EQ(Step::kProfilePicker, current_step()); - suggested_profile_color_ = profile_color; - SwitchToIdentityStepsFromAccountSelection( - std::move(switch_finished_callback)); + base::FilePath profile_path; + // Split the variant information from `profile_info`. + absl::visit(base::Overloaded{ + [&suggested_profile_color = suggested_profile_color_]( + absl::optional<SkColor> color) { + suggested_profile_color = color; + }, + [&profile_path](base::FilePath profile_path_info) { + profile_path = profile_path_info; + }, + }, + profile_info); + + SwitchToIdentityStepsFromAccountSelection(std::move(switch_finished_callback), + kAccessPoint, + std::move(profile_path)); } void ProfilePickerFlowController::SwitchToReauth( @@ -485,14 +500,6 @@ #endif } -#if BUILDFLAG(ENABLE_DICE_SUPPORT) -std::unique_ptr<ProfilePickerDiceSignInProvider> -ProfilePickerFlowController::CreateDiceSignInProvider() { - return std::make_unique<ProfilePickerDiceSignInProvider>(host(), - kAccessPoint); -} -#endif - std::unique_ptr<ProfilePickerSignedInFlowController> ProfilePickerFlowController::CreateSignedInFlowController( Profile* signed_in_profile,
diff --git a/chrome/browser/ui/views/profiles/profile_picker_flow_controller.h b/chrome/browser/ui/views/profiles/profile_picker_flow_controller.h index 244b2f6..adb7719 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_flow_controller.h +++ b/chrome/browser/ui/views/profiles/profile_picker_flow_controller.h
@@ -27,10 +27,10 @@ void Init(StepSwitchFinishedCallback step_switch_finished_callback) override; - void SwitchToDiceSignIn(std::optional<SkColor> profile_color, +#if BUILDFLAG(ENABLE_DICE_SUPPORT) + void SwitchToDiceSignIn(ProfilePicker::ProfileInfo profile_info, StepSwitchFinishedCallback switch_finished_callback); -#if BUILDFLAG(ENABLE_DICE_SUPPORT) void SwitchToReauth(Profile* profile, base::OnceCallback<void()> on_error_callback); #endif @@ -55,9 +55,6 @@ private: #if BUILDFLAG(ENABLE_DICE_SUPPORT) - std::unique_ptr<ProfilePickerDiceSignInProvider> CreateDiceSignInProvider() - override; - void OnReauthCompleted(Profile* profile, base::OnceCallback<void()> on_error_callback, bool success);
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.cc b/chrome/browser/ui/views/profiles/profile_picker_view.cc index a09962d2..a3d55fff 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_view.cc
@@ -148,8 +148,9 @@ ProfileAttributesEntry* entry = profile_manager->GetProfileAttributesStorage() .GetProfileAttributesWithPath(profile->GetPath()); - if (entry && entry->IsSigninRequired()) + if (entry && entry->IsSigninRequired()) { profile_manager->ClearFirstBrowserWindowKeepAlive(profile); + } } } @@ -158,8 +159,9 @@ // static void ProfilePicker::Show(Params&& params) { // Re-open with new params if necessary. - if (g_profile_picker_view && g_profile_picker_view->MaybeReopen(params)) + if (g_profile_picker_view && g_profile_picker_view->MaybeReopen(params)) { return; + } if (g_profile_picker_view) { g_profile_picker_view->UpdateParams(std::move(params)); @@ -189,11 +191,11 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) // static void ProfilePicker::SwitchToDiceSignIn( - std::optional<SkColor> profile_color, + ProfilePicker::ProfileInfo profile_info, base::OnceCallback<void(bool)> switch_finished_callback) { if (g_profile_picker_view) { g_profile_picker_view->SwitchToDiceSignIn( - profile_color, std::move(switch_finished_callback)); + std::move(profile_info), std::move(switch_finished_callback)); } } @@ -249,8 +251,9 @@ // static void ProfilePicker::Hide() { - if (g_profile_picker_view) + if (g_profile_picker_view) { g_profile_picker_view->Clear(); + } } // static @@ -268,8 +271,9 @@ } bool ProfilePicker::IsActive() { - if (!IsOpen()) + if (!IsOpen()) { return false; + } #if BUILDFLAG(IS_MAC) return g_profile_picker_view->GetWidget()->IsVisible(); @@ -280,8 +284,9 @@ // static views::WebView* ProfilePicker::GetWebViewForTesting() { - if (!g_profile_picker_view) + if (!g_profile_picker_view) { return nullptr; + } return g_profile_picker_view->web_view_; } @@ -301,8 +306,9 @@ // static void ProfilePicker::ShowDialogAndDisplayErrorMessage(Profile* profile) { - if (!ProfilePicker::IsActive()) + if (!ProfilePicker::IsActive()) { return; + } GURL url(chrome::kChromeUISigninErrorURL); url = AddFromProfilePickerURLParameter(url); @@ -318,8 +324,9 @@ Profile* profile, const std::string& email) { DCHECK(signin_util::IsForceSigninEnabled()); - if (!ProfilePicker::IsActive()) + if (!ProfilePicker::IsActive()) { return; + } GURL url = signin::GetEmbeddedReauthURLWithEmail( signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER, signin_metrics::Reason::kReauthentication, email); @@ -330,8 +337,9 @@ // static void ProfilePickerForceSigninDialog::ShowForceSigninDialog(Profile* profile) { DCHECK(signin_util::IsForceSigninEnabled()); - if (!ProfilePicker::IsActive()) + if (!ProfilePicker::IsActive()) { return; + } GURL url = signin::GetEmbeddedPromoURL( signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER, @@ -440,8 +448,9 @@ // assigned in the moment when it gets displayed. This avoids a black flash on // Win (and potentially other GPU artifacts on other platforms). The rest of // the work can still be done asynchronously in ShowScreenFinished(). - if (web_view_->GetWebContents() == nullptr) + if (web_view_->GetWebContents() == nullptr) { web_view_->SetWebContents(contents); + } // Binding as Unretained as `this` outlives member // `show_screen_finished_observer_`. If ShowScreen gets called twice in a @@ -455,8 +464,9 @@ std::move(navigation_finished_closure)), contents); - if (!GetWidget()->IsVisible()) + if (!GetWidget()->IsVisible()) { GetWidget()->Show(); + } } void ProfilePickerView::ShowScreenInPickerContents( @@ -467,8 +477,9 @@ void ProfilePickerView::Clear() { TRACE_EVENT1("browser,startup", "ProfilePickerView::Clear", "state", state_); - if (state_ == kClosing) + if (state_ == kClosing) { return; + } state_ = kClosing; @@ -578,14 +589,16 @@ } ProfilePickerView::~ProfilePickerView() { - if (contents_) + if (contents_) { contents_->SetDelegate(nullptr); + } } bool ProfilePickerView::MaybeReopen(ProfilePicker::Params& params) { // Re-open if already closing or if the picker cannot be reused with `params`. - if (state_ != kClosing && params.CanReusePickerWindow(params_)) + if (state_ != kClosing && params.CanReusePickerWindow(params_)) { return false; + } restart_on_window_closing_ = base::BindOnce(&ProfilePicker::Show, std::move(params)); @@ -611,8 +624,9 @@ return; } - if (state_ == kInitializing) + if (state_ == kInitializing) { return; + } GetWidget()->Activate(); } @@ -718,7 +732,7 @@ #if BUILDFLAG(ENABLE_DICE_SUPPORT) void ProfilePickerView::SwitchToDiceSignIn( - std::optional<SkColor> profile_color, + ProfilePicker::ProfileInfo profile_info, base::OnceCallback<void(bool)> switch_finished_callback) { // TODO(crbug.com/1360774): Consider having forced signin as separate step // controller for `Step::kAccountSelection`. @@ -729,7 +743,7 @@ } GetProfilePickerFlowController()->SwitchToDiceSignIn( - profile_color, std::move(switch_finished_callback)); + std::move(profile_info), std::move(switch_finished_callback)); } void ProfilePickerView::SwitchToForcedSignIn( @@ -798,8 +812,9 @@ // Show a new profile window if it has been requested while the current window // was closing. - if (state_ == kClosing && restart_on_window_closing_) + if (state_ == kClosing && restart_on_window_closing_) { std::move(restart_on_window_closing_).Run(); + } } views::ClientView* ProfilePickerView::CreateClientView(views::Widget* widget) { @@ -914,14 +929,16 @@ content::WebContents* contents, base::OnceClosure navigation_finished_closure) { // Stop observing for this (or any previous) navigation. - if (show_screen_finished_observer_) + if (show_screen_finished_observer_) { show_screen_finished_observer_.reset(); + } web_view_->SetWebContents(contents); contents->Focus(); - if (navigation_finished_closure) + if (navigation_finished_closure) { std::move(navigation_finished_closure).Run(); + } } void ProfilePickerView::NavigateBack() { @@ -931,8 +948,9 @@ void ProfilePickerView::ConfigureAccelerators() { const std::vector<AcceleratorMapping> accelerator_list(GetAcceleratorList()); for (const auto& entry : accelerator_list) { - if (!base::Contains(kSupportedAcceleratorCommands, entry.command_id)) + if (!base::Contains(kSupportedAcceleratorCommands, entry.command_id)) { continue; + } ui::Accelerator accelerator(entry.keycode, entry.modifiers); accelerator_table_[accelerator] = entry.command_id; AddAccelerator(accelerator); @@ -981,8 +999,9 @@ #if BUILDFLAG(IS_CHROMEOS_LACROS) // static void ProfilePicker::NotifyAccountSelected(const std::string& gaia_id) { - if (!g_profile_picker_view) + if (!g_profile_picker_view) { return; + } g_profile_picker_view->NotifyAccountSelected(gaia_id); } #endif
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.h b/chrome/browser/ui/views/profiles/profile_picker_view.h index e8dd1d1..265b8c64 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view.h +++ b/chrome/browser/ui/views/profiles/profile_picker_view.h
@@ -178,10 +178,10 @@ void FinishInit(); #if BUILDFLAG(ENABLE_DICE_SUPPORT) - // Switches the layout to the sign-in screen (and creates a new profile). - // std::nullopt `profile_color` corresponds to the default theme. + // Switches the layout to the sign-in screen (and creates a new profile or + // load an existing one based on the `profile_info` content). void SwitchToDiceSignIn( - std::optional<SkColor> profile_color, + ProfilePicker::ProfileInfo profile_info, base::OnceCallback<void(bool)> switch_finished_callback); // Starts the forced sign-in flow (and creates a new profile).
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc index fd5702a..49c7863 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
@@ -43,6 +43,7 @@ #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_test_util.h" +#include "chrome/browser/profiles/profiles_state.h" #include "chrome/browser/signin/chrome_signin_client_factory.h" #include "chrome/browser/signin/chrome_signin_client_test_util.h" #include "chrome/browser/signin/identity_manager_factory.h" @@ -1149,6 +1150,50 @@ EXPECT_EQ(BrowserList::GetInstance()->size(), initial_browser_count); EXPECT_TRUE(entry->IsSigninRequired()); } + +IN_PROC_BROWSER_TEST_F(ForceSigninProfilePickerCreationFlowBrowserTest, + ForceSigninLaunchInactiveDefaultProfile) { + size_t initial_browser_count = BrowserList::GetInstance()->size(); + ASSERT_EQ(initial_browser_count, 0u); + + ProfileManager* profile_manager = g_browser_process->profile_manager(); + const std::vector<Profile*> profiles = profile_manager->GetLoadedProfiles(); + ASSERT_GE(profiles.size(), 1u); + Profile* default_profile = profiles[0]; + ProfileAttributesEntry* default_profile_entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(default_profile->GetPath()); + + ASSERT_TRUE(ProfilePicker::IsOpen()); + // Make sure that this is the default profile. Also this profile is not yet + // active/used which makes a valid candidate to sign in. + ASSERT_EQ(default_profile_entry->GetPath(), + profiles::GetDefaultProfileDir(profile_manager->user_data_dir())); + ASSERT_EQ(default_profile_entry->GetActiveTime(), base::Time()); + ASSERT_TRUE(default_profile_entry->IsSigninRequired()); + + // Opening the default profile for the first time is allowed, it is expected + // to open the sign in screen. + OpenProfileFromPicker(default_profile_entry->GetPath(), false); + WaitForLoadStop(GetSigninChromeSyncDiceUrl()); + + // Finish the signin that was started from opening the default profile. + FinishDiceSignIn(default_profile, "joe.consumer@gmail.com", "Joe"); + WaitForLoadStop(GetSyncConfirmationURL()); + + // Accept Sync. + LoginUIServiceFactory::GetForProfile(default_profile) + ->SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS); + + // A browser should open and the profile should now be unlocked. + Browser* new_browser = BrowserAddedWaiter(initial_browser_count + 1u).Wait(); + EXPECT_TRUE(new_browser); + EXPECT_EQ(new_browser->profile(), default_profile); + EXPECT_FALSE(default_profile_entry->IsSigninRequired()); + + // Default profile is now active. + EXPECT_NE(default_profile_entry->GetActiveTime(), base::Time()); +} #endif // Regression test for crbug.com/1266415.
diff --git a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_interactive_uitest.cc b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_interactive_uitest.cc index 5a684641..fd6171d 100644 --- a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_interactive_uitest.cc +++ b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_interactive_uitest.cc
@@ -26,6 +26,8 @@ #include "chrome/browser/ui/views/toolbar/app_menu.h" #include "chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/test/os_integration_test_override_impl.h" +#include "chrome/browser/web_applications/test/web_app_install_test_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/generated_resources.h" #include "chrome/test/base/in_process_browser_test.h" @@ -404,6 +406,26 @@ ~PageSpecificSiteDataDialogIsolatedWebAppInteractiveUiTest() override = default; + void SetUpOnMainThread() override { +#if !BUILDFLAG(IS_MAC) + // TODO(https://crbug.com/1454297): OsIntegrationTestOverrideImpl seems + // to interfere with Kombucha on the Mac. + base::ScopedAllowBlockingForTesting allow_blocking; + override_registration_ = + web_app::OsIntegrationTestOverrideImpl::OverrideForTesting(); +#endif // BUILDFLAG(IS_MAC) + PageSpecificSiteDataDialogInteractiveUiTest::SetUpOnMainThread(); + } + void TearDownOnMainThread() override { + web_app::test::UninstallWebApp(browser()->profile(), app_id_); + +#if !BUILDFLAG(IS_MAC) + base::ScopedAllowBlockingForTesting allow_blocking; + override_registration_.reset(); +#endif // BUILDFLAG(IS_MAC) + PageSpecificSiteDataDialogInteractiveUiTest::TearDownOnMainThread(); + } + protected: void SetUpFeatureList() override { feature_list_.InitWithFeatures( @@ -416,8 +438,9 @@ FILE_PATH_LITERAL("web_apps/simple_isolated_app")); auto iwa_url_info = web_app::InstallDevModeProxyIsolatedWebApp( profile, iwa_dev_server->GetOrigin()); + app_id_ = iwa_url_info.app_id(); content::RenderFrameHost* iwa_frame = - web_app::OpenIsolatedWebApp(profile, iwa_url_info.app_id()); + web_app::OpenIsolatedWebApp(profile, app_id_); CHECK(content::ExecJs(iwa_frame, "localStorage.setItem('key', 'value')")); @@ -453,6 +476,14 @@ }), string); } + + private: + webapps::AppId app_id_; +#if !BUILDFLAG(IS_MAC) + std::unique_ptr< + ::web_app::OsIntegrationTestOverrideImpl::BlockingRegistration> + override_registration_; +#endif // !BUILDFLAG(IS_MAC) }; IN_PROC_BROWSER_TEST_F(
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc index b9b0051..7589e7d 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
@@ -1121,15 +1121,8 @@ // tabs joining the same group as the tab in the second position. Then dragging // the tabs over two to the right will result in the tabs joining the same group // as the last tab. -// Flaky on windows. http://crbug.com/1164561 -#if BUILDFLAG(IS_WIN) -#define MAYBE_DragMultipleTabsRightIntoGroup \ - DISABLED_DragMultipleTabsRightIntoGroup -#else -#define MAYBE_DragMultipleTabsRightIntoGroup DragMultipleTabsRightIntoGroup -#endif IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, - MAYBE_DragMultipleTabsRightIntoGroup) { + DragMultipleTabsRightIntoGroup) { ASSERT_TRUE(browser()->tab_strip_model()->SupportsTabGroups()); // Create a browser with four tabs total, and put each tab into its own
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload.mojom b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload.mojom index 8297cea..7705c9b 100644 --- a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload.mojom +++ b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload.mojom
@@ -83,6 +83,14 @@ // The local file tasks the user can pick from to open the files. Displayed in // the `kFileHandlerDialog` dialog. array<DialogTask> local_tasks; + + // Whether Google Workspace should be displayed in the `kFileHandlerDialog` + // dialog. + bool show_google_workspace_task; + + // Whether Microsoft 365 should be displayed in the `kFileHandlerDialog` + // dialog. + bool show_microsoft_office_task; }; union DialogSpecificArgs {
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc index d941104..31ca2cb 100644 --- a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc +++ b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.cc
@@ -33,6 +33,7 @@ #include "chrome/browser/ash/file_manager/volume_manager.h" #include "chrome/browser/ash/file_system_provider/mount_path_util.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/upload_office_to_cloud/upload_office_to_cloud.h" #include "chrome/browser/notifications/notification_display_service.h" #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h" #include "chrome/browser/ui/browser_list.h" @@ -49,6 +50,7 @@ #include "chrome/common/webui_url_constants.h" #include "chrome/grit/generated_resources.h" #include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" +#include "chromeos/constants/chromeos_features.h" #include "components/user_manager/user_manager.h" #include "extensions/browser/api/file_handlers/mime_util.h" #include "extensions/browser/entry_info.h" @@ -440,6 +442,13 @@ return InitAndShowDialog(DialogPage::kFileHandlerDialog); } + return MaybeRunFixupFlow(); +} + +// Runs the fixup version of setup if there are any issues, e.g. ODFS is not +// mounted. Otherwise, attempts to move files to the correct cloud or open the +// files if they are already there. +bool CloudOpenTask::MaybeRunFixupFlow() { if (ShouldFixUpOffice(profile_, cloud_provider_)) { // TODO(cassycc): Use page specifically for fix up. return InitAndShowDialog(DialogPage::kOneDriveSetup); @@ -930,11 +939,17 @@ args->file_names.push_back(file_url.path().BaseName().value()); } switch (dialog_page) { - case DialogPage::kFileHandlerDialog: + case DialogPage::kFileHandlerDialog: { + auto file_handler_dialog_args = mojom::FileHandlerDialogArgs::New(); + file_handler_dialog_args->show_google_workspace_task = + chromeos::cloud_upload::IsGoogleWorkspaceCloudUploadAllowed(profile_); + file_handler_dialog_args->show_microsoft_office_task = + chromeos::cloud_upload::IsMicrosoftOfficeCloudUploadAllowed(profile_); args->dialog_specific_args = mojom::DialogSpecificArgs::NewFileHandlerDialogArgs( - mojom::FileHandlerDialogArgs::New()); + std::move(file_handler_dialog_args)); break; + } case DialogPage::kOneDriveSetup: { auto one_drive_setup_dialog_args = mojom::OneDriveSetupDialogArgs::New(); one_drive_setup_dialog_args->set_office_as_default_handler = @@ -983,6 +998,26 @@ std::unique_ptr<fm_tasks::ResultingTasks> resulting_tasks) { if (resulting_tasks) { SetTaskArgs(args, std::move(resulting_tasks)); + + if (chromeos::features::IsUploadOfficeToCloudForEnterpriseEnabled()) { + const auto& file_handler_dialog_args = + args->dialog_specific_args->get_file_handler_dialog_args(); + // When there is only one possible task (Microsoft or Google) and no + // further local tasks, skip the file handler page and either show the + // OneDrive setup if necessary, or go straight to opening/moving the + // files. + if ((!file_handler_dialog_args->show_microsoft_office_task || + !file_handler_dialog_args->show_google_workspace_task) && + local_tasks_.empty()) { + // Validate that `cloud_provider_` differs from the disabled task. + CHECK(!(cloud_provider_ == CloudProvider::kOneDrive && + !file_handler_dialog_args->show_microsoft_office_task)); + CHECK(!(cloud_provider_ == CloudProvider::kGoogleDrive && + !file_handler_dialog_args->show_google_workspace_task)); + MaybeRunFixupFlow(); + return; + } + } } bool office_move_confirmation_shown = @@ -1301,6 +1336,7 @@ constexpr int kDialogWidthForFileHandlerDialog = 512; constexpr int kDialogHeightForFileHandlerDialog = 379; constexpr int kDialogHeightForFileHandlerDialogNoLocalApp = 315; +constexpr int kDialogHeightForFileHandlerDialogOneHandlerMissing = 295; constexpr int kDialogWidthForMoveConfirmation = 512; constexpr int kDialogHeightForMoveConfirmationWithCheckbox = 524; @@ -1314,13 +1350,21 @@ void CloudUploadDialog::GetDialogSize(gfx::Size* size) const { const auto& dialog_specific_args = dialog_args_->dialog_specific_args; if (dialog_specific_args->is_file_handler_dialog_args()) { - const bool has_local_tasks = - !dialog_specific_args->get_file_handler_dialog_args() - ->local_tasks.empty(); + const auto& file_handler_dialog_args = + dialog_specific_args->get_file_handler_dialog_args(); + const bool has_local_tasks = !file_handler_dialog_args->local_tasks.empty(); + const bool is_microsoft_office_or_google_workspace_disabled_by_policy = + !file_handler_dialog_args->show_microsoft_office_task || + !file_handler_dialog_args->show_google_workspace_task; size->set_width(kDialogWidthForFileHandlerDialog); - size->set_height(has_local_tasks - ? kDialogHeightForFileHandlerDialog - : kDialogHeightForFileHandlerDialogNoLocalApp); + if (is_microsoft_office_or_google_workspace_disabled_by_policy) { + CHECK(has_local_tasks); + size->set_height(kDialogHeightForFileHandlerDialogOneHandlerMissing); + } else { + size->set_height(has_local_tasks + ? kDialogHeightForFileHandlerDialog + : kDialogHeightForFileHandlerDialogNoLocalApp); + } } else if (dialog_specific_args->is_one_drive_setup_dialog_args()) { size->set_width(kDialogWidthForOneDriveSetup); size->set_height(kDialogHeightForOneDriveSetup);
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.h b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.h index ba0375b6..566bbd7 100644 --- a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.h +++ b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.h
@@ -166,6 +166,7 @@ // See the .cc implementation for comments on private methods. bool ExecuteInternal(); + bool MaybeRunFixupFlow(); void OpenOrMoveFiles(); void OpenAlreadyHostedDriveUrls(); void OnGoogleDriveGetMetadata(drive::FileError error, @@ -318,6 +319,9 @@ mojom::DialogArgsPtr dialog_args_; UploadRequestCallback callback_; bool office_move_confirmation_shown_; + + // Only relevant for `mojom::DialogPage::kFileHandlerDialog`. + bool is_microsoft_office_or_google_workspace_disabled_by_policy_ = false; }; } // namespace ash::cloud_upload
diff --git a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog_browsertest.cc b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog_browsertest.cc index 33332dfe..8afc342 100644 --- a/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog_browsertest.cc +++ b/chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog_browsertest.cc
@@ -23,6 +23,7 @@ #include "base/test/bind.h" #include "base/test/run_until.h" #include "base/test/scoped_feature_list.h" +#include "base/test/test_future.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/ash/file_manager/app_id.h" #include "chrome/browser/ash/file_manager/file_manager_test_util.h" @@ -39,6 +40,7 @@ #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/webui/ash/cloud_upload/cloud_open_metrics.h" #include "chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_dialog.h" #include "chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_util.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" @@ -53,6 +55,7 @@ #include "chrome/grit/generated_resources.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "chromeos/constants/chromeos_features.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/test/browser_test.h" @@ -199,6 +202,11 @@ {}); } + explicit FileHandlerDialogBrowserTest(int num_tasks) + : FileHandlerDialogBrowserTest() { + num_tasks_ = num_tasks; + } + FileHandlerDialogBrowserTest(const FileHandlerDialogBrowserTest&) = delete; FileHandlerDialogBrowserTest& operator=(const FileHandlerDialogBrowserTest&) = delete; @@ -237,7 +245,7 @@ SetUpCommandLineForNonManagedUser(command_line); } - const int num_tasks_ = 3; + int num_tasks_ = 3; std::vector<std::string> urls_; std::vector<file_manager::file_tasks::TaskDescriptor> tasks_; std::vector<storage::FileSystemURL> files_; @@ -286,16 +294,10 @@ ASSERT_EQ(nullptr, browser); // Open a files app window. - base::RunLoop run_loop; - file_manager::util::ShowItemInFolder( - profile(), files_.at(0).path(), - base::BindLambdaForTesting( - [&run_loop](platform_util::OpenOperationResult result) { - EXPECT_EQ(platform_util::OpenOperationResult::OPEN_SUCCEEDED, - result); - run_loop.Quit(); - })); - run_loop.Run(); + base::test::TestFuture<platform_util::OpenOperationResult> future; + file_manager::util::ShowItemInFolder(profile(), files_.at(0).path(), + future.GetCallback()); + EXPECT_EQ(future.Get(), platform_util::OpenOperationResult::OPEN_SUCCEEDED); Browser* first_files_app = ui_test_utils::WaitForBrowserToOpen(); browser = FindSystemWebAppBrowser(profile(), SystemWebAppType::FILE_MANAGER); @@ -335,16 +337,10 @@ // Open a files app window. ui_test_utils::BrowserChangeObserver browser_added_observer( nullptr, ui_test_utils::BrowserChangeObserver::ChangeType::kAdded); - base::RunLoop run_loop; - file_manager::util::ShowItemInFolder( - profile(), files_.at(0).path(), - base::BindLambdaForTesting( - [&run_loop](platform_util::OpenOperationResult result) { - EXPECT_EQ(platform_util::OpenOperationResult::OPEN_SUCCEEDED, - result); - run_loop.Quit(); - })); - run_loop.Run(); + base::test::TestFuture<platform_util::OpenOperationResult> future; + file_manager::util::ShowItemInFolder(profile(), files_.at(0).path(), + future.GetCallback()); + EXPECT_EQ(future.Get(), platform_util::OpenOperationResult::OPEN_SUCCEEDED); browser_added_observer.Wait(); browser = FindSystemWebAppBrowser(profile(), SystemWebAppType::FILE_MANAGER); @@ -455,9 +451,8 @@ // Get the `tasks` member from the `FileHandlerPageElement` which are all of // the observed local file tasks. - bool dialog_init_complete = false; base::Value::List observed_app_ids; - while (!dialog_init_complete) { + ASSERT_TRUE(base::test::RunUntil([&] { // It is possible that the `FileHandlerPageElement` element still hasn't // been initiated yet. It is completed when the `localTasks` member is // non-empty. @@ -466,11 +461,11 @@ "document.querySelector('file-handler-page')" ".localTasks.map(task => task.appId)"); if (!eval_result.error.empty()) { - continue; + return false; } observed_app_ids = eval_result.ExtractList().TakeList(); - dialog_init_complete = !observed_app_ids.empty(); - } + return !observed_app_ids.empty(); + })); // Check QuickOffice was observed by the dialog as it should always be shown. #if BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -586,9 +581,7 @@ content::WebContents* web_contents = GetWebContentsFromCloudUploadDialog(); // Wait for local tasks to be filled in, which indicates the dialog is ready. - bool dialog_init_complete = false; - base::Value::List observed_app_ids; - while (!dialog_init_complete) { + ASSERT_TRUE(base::test::RunUntil([&] { // It is possible that the `FileHandlerPageElement` element still hasn't // been initiated yet. It is completed when the `localTasks` member is // non-empty. @@ -597,11 +590,10 @@ "document.querySelector('file-handler-page')" ".localTasks.map(task => task.appId)"); if (!eval_result.error.empty()) { - continue; + return false; } - observed_app_ids = eval_result.ExtractList().TakeList(); - dialog_init_complete = !observed_app_ids.empty(); - } + return !eval_result.ExtractList().TakeList().empty(); + })); // Check that there is not a default task for doc/x files. ASSERT_FALSE(file_manager::file_tasks::GetDefaultTaskFromPrefs( @@ -677,6 +669,140 @@ return files_app->window()->GetNativeWindow(); } +class CloudUploadDialogNoTasksBrowserTest + : public FileHandlerDialogBrowserTest { + public: + CloudUploadDialogNoTasksBrowserTest() + : FileHandlerDialogBrowserTest(/*num_tasks=*/0) {} +}; + +class CloudUploadDialogHandlerDisabledBrowserTest + : public CloudUploadDialogNoTasksBrowserTest, + public testing::WithParamInterface<bool> {}; + +// Suite with `true` means that `prefs::GoogleWorkspaceCloudUpload` is `allowed` +// and `prefs::MicrosoftOfficeCloudUpload` is `disallowed`. Suite with `false` +// means that `prefs::GoogleWorkspaceCloudUpload` is `disallowed` and +// `prefs::MicrosoftOfficeCloudUpload` is `allowed`. +// Tests that when only one handler is available (Google or Microsoft) in +// absence of local tasks, the user is brought directly to the move confirmation +// page instead of file handling dialog. +IN_PROC_BROWSER_TEST_P(CloudUploadDialogHandlerDisabledBrowserTest, + FileHandlingDialogSkipped) { + const bool google_workspace_test = GetParam(); + auto* prefs = profile()->GetPrefs(); + if (google_workspace_test) { + // Disable Microsoft365. + prefs->SetString(prefs::kGoogleWorkspaceCloudUpload, + chromeos::cloud_upload::kCloudUploadPolicyAllowed); + prefs->SetString(prefs::kMicrosoftOfficeCloudUpload, + chromeos::cloud_upload::kCloudUploadPolicyDisallowed); + } else { + // Disable Google Workspace. + prefs->SetString(prefs::kGoogleWorkspaceCloudUpload, + chromeos::cloud_upload::kCloudUploadPolicyDisallowed); + prefs->SetString(prefs::kMicrosoftOfficeCloudUpload, + chromeos::cloud_upload::kCloudUploadPolicyAllowed); + + // Perform the necessary OneDrive & Microsoft365 setup. + file_manager::test::CreateFakeProvidedFileSystemOneDrive(profile()); + file_manager::test::AddFakeWebApp( + web_app::kMicrosoft365AppId, kDocMimeType, kDocFileExtension, "", true, + apps::AppServiceProxyFactory::GetForProfile(profile())); + } + + // Watch for File Handler dialog URL chrome://cloud-upload. + content::TestNavigationObserver navigation_observer_dialog( + (GURL(chrome::kChromeUICloudUploadURL))); + navigation_observer_dialog.StartWatchingNewWebContents(); + + const auto& doc_file = files_[0]; + ASSERT_EQ(doc_file.path().Extension(), ".docx"); + + // Launch File Handler dialog. + const CloudProvider cloud_provider = google_workspace_test + ? CloudProvider::kGoogleDrive + : CloudProvider::kOneDrive; + ASSERT_TRUE(CloudOpenTask::Execute( + profile(), {doc_file}, cloud_provider, + /*modal_parent=*/nullptr, + std::make_unique<CloudOpenMetrics>(cloud_provider, /*file_count=*/1))); + + // Wait for File Handler dialog to open at chrome://cloud-upload. + navigation_observer_dialog.Wait(); + ASSERT_TRUE(navigation_observer_dialog.last_navigation_succeeded()); + + // Get the web contents of the dialog to be able to query + // 'move-confirmation-page'. + content::WebContents* web_contents = GetWebContentsFromCloudUploadDialog(); + + // Check that the move confirmation page is displayed. + ASSERT_TRUE(base::test::RunUntil([&] { + return content::EvalJs(web_contents, + "!!document.querySelector('move-confirmation-page')") + .ExtractBool(); + })); + + constexpr char kGetProviderNameScript[] = R"( + (async () => { + const page = document.querySelector('move-confirmation-page'); + return page.getProviderName(page.cloudProvider); + })(); + )"; + + // Validate that the confirmation page is displayed for the correct drive. + ASSERT_EQ(content::EvalJs(web_contents, kGetProviderNameScript), + l10n_util::GetStringUTF8( + google_workspace_test ? IDS_OFFICE_CLOUD_PROVIDER_GOOGLE_DRIVE + : IDS_OFFICE_CLOUD_PROVIDER_ONEDRIVE)); +} + +INSTANTIATE_TEST_SUITE_P(/**/, + CloudUploadDialogHandlerDisabledBrowserTest, + testing::Bool()); + +// Tests that when only Microsoft365 is available in absence of local tasks and +// the fixup flow is required, the user is brought to the M365 setup page. +IN_PROC_BROWSER_TEST_F( + CloudUploadDialogNoTasksBrowserTest, + OneDriveSetupDialogShownWhenFixupFlowIsNecessaryForMicrosoft365) { + auto* prefs = profile()->GetPrefs(); + prefs->SetString(prefs::kGoogleWorkspaceCloudUpload, + chromeos::cloud_upload::kCloudUploadPolicyDisallowed); + prefs->SetString(prefs::kMicrosoftOfficeCloudUpload, + chromeos::cloud_upload::kCloudUploadPolicyAllowed); + + // Watch for File Handler dialog URL chrome://cloud-upload. + content::TestNavigationObserver navigation_observer_dialog( + (GURL(chrome::kChromeUICloudUploadURL))); + navigation_observer_dialog.StartWatchingNewWebContents(); + + const auto& doc_file = files_[0]; + ASSERT_EQ(doc_file.path().Extension(), ".docx"); + + // ODFS and O365 App are not installed, so fixup will be required. + + // Launch File Handler dialog. + ASSERT_TRUE(CloudOpenTask::Execute( + profile(), {doc_file}, CloudProvider::kOneDrive, /*modal_parent=*/nullptr, + std::make_unique<CloudOpenMetrics>(CloudProvider::kOneDrive, + /*file_count=*/1))); + + // Wait for File Handler dialog to open at chrome://cloud-upload. + navigation_observer_dialog.Wait(); + ASSERT_TRUE(navigation_observer_dialog.last_navigation_succeeded()); + + // Get the web contents of the dialog to be able to query `cloud-upload`. + content::WebContents* web_contents = GetWebContentsFromCloudUploadDialog(); + + // Check that the M365 setup page is displayed. + ASSERT_TRUE(base::test::RunUntil([&] { + return content::EvalJs(web_contents, + "!!document.querySelector('cloud-upload')") + .ExtractBool(); + })); +} + // Runs each test in four configurations (Google And Microsoft prefs // respectively): // * `automated` and `allowed` @@ -1107,15 +1233,7 @@ } void AddFakeODFS() { - auto fake_provider = - ash::file_system_provider::FakeExtensionProvider::Create( - extension_misc::kODFSExtensionId); - const auto kProviderId = fake_provider->GetId(); - auto* service = file_system_provider::Service::Get(profile()); - service->RegisterProvider(std::move(fake_provider)); - service->MountFileSystem(kProviderId, - ash::file_system_provider::MountOptions( - "test-filesystem", "Test FileSystem")); + file_manager::test::CreateFakeProvidedFileSystemOneDrive(profile()); } void AddFakeOfficePWA() {
diff --git a/chrome/browser/ui/webui/ash/login/testapi/oobe_test_api_handler.cc b/chrome/browser/ui/webui/ash/login/testapi/oobe_test_api_handler.cc index 70304de..961be1e 100644 --- a/chrome/browser/ui/webui/ash/login/testapi/oobe_test_api_handler.cc +++ b/chrome/browser/ui/webui/ash/login/testapi/oobe_test_api_handler.cc
@@ -97,13 +97,21 @@ dict->Set("testapi_shouldSkipConsolidatedConsent", !BUILDFLAG(GOOGLE_CHROME_BRANDING)); dict->Set("testapi_isHPSEnabled", ash::features::IsQuickDimEnabled()); - dict->Set("testapi_shouldSkipTouchpadScroll", - !features::IsOobeTouchpadScrollEnabled() || - InputDeviceSettingsController::Get() - ->GetConnectedTouchpads() - .empty()); - dict->Set("testapi_shouldSkipDisplaySize", - !features::IsOobeDisplaySizeEnabled()); + + bool skip_touchpad_scroll = + !features::IsOobeTouchpadScrollEnabled() || + InputDeviceSettingsController::Get()->GetConnectedTouchpads().empty(); + dict->Set("testapi_shouldSkipTouchpadScroll", skip_touchpad_scroll); + + bool skip_display_size = !features::IsOobeDisplaySizeEnabled(); + dict->Set("testapi_shouldSkipDisplaySize", skip_display_size); + + // CHOOBE screen is only skipped if the number of optional screens is less + // than 3, since theme selection is always shown, CHOOBE should be skipped + // when display size Screen or touchpad scroll screen is skipped. + bool skip_choobe = !features::IsOobeChoobeEnabled() || skip_touchpad_scroll || + skip_display_size; + dict->Set("testapi_shouldSkipChoobe", skip_choobe); } void OobeTestAPIHandler::LoginWithPin(const std::string& username,
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc index 13d5662f..3036e5c 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc
@@ -206,6 +206,9 @@ {ContentSettingsType::FILE_SYSTEM_ACCESS_EXTENDED_PERMISSION, nullptr}, {ContentSettingsType::TPCD_HEURISTICS_GRANTS, nullptr}, {ContentSettingsType::FILE_SYSTEM_ACCESS_RESTORE_PERMISSION, nullptr}, + // TODO(crbug.com/1464851): Update name once UI design is done. + {ContentSettingsType::SMART_CARD_GUARD, nullptr}, + {ContentSettingsType::SMART_CARD_DATA, nullptr}, }; static_assert(std::size(kContentSettingsTypeGroupNames) ==
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc index 6b82c83..62e3170f 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -587,7 +587,14 @@ ProfilePicker::ShowDialogAndDisplayErrorMessage(profile); } else { // Fresh sign in via profile picker without existing email address. - ProfilePickerForceSigninDialog::ShowForceSigninDialog(profile); + if (base::FeatureList::IsEnabled(kForceSigninFlowInProfilePicker)) { + ProfilePicker::SwitchToDiceSignIn( + profile->GetPath(), + base::BindOnce(&ProfilePickerHandler::OnLoadSigninFinished, + weak_factory_.GetWeakPtr())); + } else { + ProfilePickerForceSigninDialog::ShowForceSigninDialog(profile); + } } } #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) @@ -973,6 +980,7 @@ #endif // BUILDFLAG(IS_CHROMEOS_LACROS) void ProfilePickerHandler::OnLoadSigninFinished(bool success) { + AllowJavascript(); FireWebUIListener("load-signin-finished", base::Value(success)); }
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc index 766568a..678c607 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc
@@ -23,6 +23,8 @@ #include "chrome/browser/extensions/api/tab_groups/tab_groups_util.h" #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/favicon/favicon_utils.h" +#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h" +#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/tab_restore_service_factory.h" #include "chrome/browser/signin/identity_manager_factory.h" @@ -524,6 +526,17 @@ return; } Browser* browser = chrome::FindLastActive(); + if (!browser) { + return; + } + OptimizationGuideKeyedService* opt_guide_keyed_service = + OptimizationGuideKeyedServiceFactory::GetForProfile(browser->profile()); + if (!opt_guide_keyed_service || + !opt_guide_keyed_service->ShouldFeatureBeCurrentlyAllowedForLogging( + optimization_guide::proto:: + MODEL_EXECUTION_FEATURE_TAB_ORGANIZATION)) { + return; + } base::Value::Dict feedback_metadata; feedback_metadata.Set("log_id", feedback_id); chrome::ShowFeedbackPage(
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index b3ae4775..9d692a1 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1702382390-f4f82074d1c857944ee4517a2229f917ee89d864.profdata +chrome-mac-arm-main-1702396694-4a34151ae02c9cf75f264bfd107cc97edf419c2b.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 04af6ce..468a84be 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -621,6 +621,11 @@ "HappinessTrackingSurveysForrNtpPhotosOptOut", base::FEATURE_DISABLED_BY_DEFAULT); +// Enables or disables the Happiness Tracking System for Wallpaper Search. +BASE_FEATURE(kHappinessTrackingSurveysForWallpaperSearch, + "HappinessTrackingSurveysForWallpaperSearch", + base::FEATURE_DISABLED_BY_DEFAULT); + // Enables or disables the Happiness Tracking System for Chrome What's New. BASE_FEATURE(kHappinessTrackingSurveysForDesktopWhatsNew, "HappinessTrackingSurveysForDesktopWhatsNew",
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index e4096bf..6881034 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -349,6 +349,9 @@ BASE_DECLARE_FEATURE(kHappinessTrackingSurveysForNtpPhotosOptOut); COMPONENT_EXPORT(CHROME_FEATURES) +BASE_DECLARE_FEATURE(kHappinessTrackingSurveysForWallpaperSearch); + +COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kHappinessTrackingSurveysForDesktopWhatsNew); COMPONENT_EXPORT(CHROME_FEATURES) extern const base::FeatureParam<base::TimeDelta>
diff --git a/chrome/installer/util/BUILD.gn b/chrome/installer/util/BUILD.gn index 0a81427..25f58f5 100644 --- a/chrome/installer/util/BUILD.gn +++ b/chrome/installer/util/BUILD.gn
@@ -217,11 +217,7 @@ "//chrome/installer/util/prebuild/create_installer_string_rc.py" grdfile_folder = "//chrome/app/" - if (is_chrome_branded) { - grdfile_name = "google_chrome_strings" - } else { - grdfile_name = "chromium_strings" - } + grdfile_name = "${branding_path_product}_strings" xtb_relative_path = "resources" grd_files_info = [ [ grdfile_folder,
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 1f259bb..ab34069 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -5564,6 +5564,7 @@ "../browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_apitest.cc", "../browser/chromeos/extensions/wallpaper_apitest.cc", "../browser/chromeos/extensions/wm/wm_desks_private_apitest_lacros.cc", + "../browser/chromeos/policy/dlp/dlp_files_controller_lacros_browsertest.cc", "../browser/chromeos/reporting/network/network_bandwidth_sampler_lacros_browsertest.cc", "../browser/chromeos/reporting/websites/website_events_observer_lacros_browsertest.cc", "../browser/chromeos/reporting/websites/website_usage_telemetry_sampler_lacros_browsertest.cc",
diff --git a/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.cc b/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.cc index 5eba5eb..64bb0de1 100644 --- a/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.cc +++ b/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.cc
@@ -3,20 +3,25 @@ // found in the LICENSE file. #include "chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.h" + #include "base/logging.h" #include "base/threading/platform_thread.h" +ScopedTempDirWithRetry::ScopedTempDirWithRetry() = default; + ScopedTempDirWithRetry::~ScopedTempDirWithRetry() { - if (IsValid()) { - int retry = 0; - while (!Delete()) { - // Delete failed. Retry up to 100 times, with 10 ms delay between each - // retry (thus maximum delay is about 1 second). - if (++retry > 100) { - DLOG(WARNING) << "Could not delete temp dir after retries."; - break; - } - base::PlatformThread::Sleep(base::Milliseconds(10)); + if (!IsValid()) { + return; + } + + int retry = 0; + while (!Delete()) { + // Delete failed. Retry up to 100 times, with 10 ms delay between each + // retry (thus maximum delay is about 1 second). + if (++retry > 100) { + DLOG(WARNING) << "Could not delete temp dir after retries."; + break; } + base::PlatformThread::Sleep(base::Milliseconds(10)); } }
diff --git a/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.h b/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.h index 31a7ca0..090bf02 100644 --- a/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.h +++ b/chrome/test/chromedriver/chrome/scoped_temp_dir_with_retry.h
@@ -5,18 +5,17 @@ #ifndef CHROME_TEST_CHROMEDRIVER_CHROME_SCOPED_TEMP_DIR_WITH_RETRY_H_ #define CHROME_TEST_CHROMEDRIVER_CHROME_SCOPED_TEMP_DIR_WITH_RETRY_H_ +#include "base/files/scoped_temp_dir.h" + // An object representing a temporary / scratch directory that should be cleaned // up (recursively) when this object goes out of scope. Automatically retries // if directory cleanup fails. - -#include "base/files/scoped_temp_dir.h" - class ScopedTempDirWithRetry : public base::ScopedTempDir { public: - // Recursively delete path. + ScopedTempDirWithRetry(); + ScopedTempDirWithRetry(const ScopedTempDirWithRetry&) = delete; + ScopedTempDirWithRetry& operator=(const ScopedTempDirWithRetry&) = delete; ~ScopedTempDirWithRetry(); - - // DISALLOW_COPY_AND_ASSIGN(ScopedTempDirWithRetry); }; #endif // CHROME_TEST_CHROMEDRIVER_CHROME_SCOPED_TEMP_DIR_WITH_RETRY_H_
diff --git a/chrome/test/data/webui/chromeos/BUILD.gn b/chrome/test/data/webui/chromeos/BUILD.gn index 8bd5f06..81a28217 100644 --- a/chrome/test/data/webui/chromeos/BUILD.gn +++ b/chrome/test/data/webui/chromeos/BUILD.gn
@@ -196,11 +196,9 @@ "arc_account_picker/test_util.js", "gaia_action_buttons/gaia_action_buttons_test.js", "os_feedback_ui/confirmation_page_test.js", - "os_feedback_ui/fake_help_content_provider_test.js", "os_feedback_ui/feedback_flow_test.js", "os_feedback_ui/file_attachment_test.js", "os_feedback_ui/help_content_test.js", - "os_feedback_ui/mojo_interface_provider_test.js", "os_feedback_ui/search_page_test.js", "os_feedback_ui/share_data_page_test.js", "set_time_dialog/set_time_dialog_test.js",
diff --git a/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts b/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts index 508f9633..11c4c294 100644 --- a/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts +++ b/chrome/test/data/webui/chromeos/cloud_upload/file_handler_page_test.ts
@@ -101,6 +101,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: createTasks(numTasks), + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, }); @@ -137,6 +139,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: createTasks(numTasks), + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, }); @@ -172,6 +176,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: createTasks(numTasks), + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, }); @@ -208,6 +214,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: createTasks(numTasks), + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, }); @@ -246,6 +254,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: createTasks(numTasks), + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, }); @@ -295,6 +305,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: createTasks(numTasks), + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, }); @@ -336,6 +348,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: [], + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, }); @@ -345,6 +359,43 @@ }); /** + * For each configuration of (showMicrosoftOfficeTask,showGoogleWorkspaceTask) + * booleans checks that the corresponding cards are conditionally shown or not + * shown. Note that (false,false) is not a valid configuration and is hence + * excluded from the array. + */ + [[true, true], [true, false], [false, true]].forEach( + showPredefinedTasks => test( + `Show predefined tasks with params = ${showPredefinedTasks}`, + async () => { + const [showMicrosoftOfficeTask, showGoogleWorkspaceTask] = + showPredefinedTasks; + await setUp({ + fileNames: ['file.docx'], + officeWebAppInstalled: false, + installOfficeWebAppResult: false, + odfsMounted: false, + dialogSpecificArgs: { + fileHandlerDialogArgs: { + localTasks: createTasks(1), + showMicrosoftOfficeTask: showMicrosoftOfficeTask!, + showGoogleWorkspaceTask: showGoogleWorkspaceTask!, + }, + }, + }); + const cloudProviderCardsCount = + (!showGoogleWorkspaceTask || !showMicrosoftOfficeTask) ? 1 : 2; + assertEquals( + fileHandlerPageApp.cloudProviderCards.length, + cloudProviderCardsCount); + assertEquals(fileHandlerPageApp.localHandlerCards.length, 1); + assertEquals( + !!fileHandlerPageApp.$('#onedrive'), showMicrosoftOfficeTask); + assertEquals( + !!fileHandlerPageApp.$('#drive'), showGoogleWorkspaceTask); + })); + + /** * Test that any selected local task gets unselected if the accordion gets * collapsed. */ @@ -360,6 +411,8 @@ dialogSpecificArgs: { fileHandlerDialogArgs: { localTasks: createTasks(numTasks), + showGoogleWorkspaceTask: true, + showMicrosoftOfficeTask: true, }, }, });
diff --git a/chrome/test/data/webui/chromeos/os_feedback_ui/fake_help_content_provider_test.js b/chrome/test/data/webui/chromeos/os_feedback_ui/fake_help_content_provider_test.js deleted file mode 100644 index 02d52330..0000000 --- a/chrome/test/data/webui/chromeos/os_feedback_ui/fake_help_content_provider_test.js +++ /dev/null
@@ -1,63 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'chrome://webui-test/chromeos/mojo_webui_test_support.js'; - -import {fakeHelpContentList, fakeSearchRequest, fakeSearchResponse} from 'chrome://os-feedback/fake_data.js'; -import {FakeHelpContentProvider} from 'chrome://os-feedback/fake_help_content_provider.js'; -import {HelpContentList} from 'chrome://os-feedback/feedback_types.js'; -import {SearchResponse} from 'chrome://os-feedback/os_feedback_ui.mojom-webui.js'; -import {mojoString16ToString} from 'chrome://resources/js/mojo_type_util.js'; -import {assertDeepEquals, assertEquals} from 'chrome://webui-test/chromeos/chai_assert.js'; - -suite('fakeHelpContentProviderTestSuite', () => { - /** @type {?FakeHelpContentProvider} */ - let provider = null; - - setup(() => { - provider = new FakeHelpContentProvider(); - }); - - teardown(() => { - provider = null; - }); - - - /** - * Test that the fake help content provider returns the non-empty list which - * was set explicitly. - */ - test('getHelpContents', async () => { - provider.setFakeSearchResponse(fakeSearchResponse); - - const response = await provider.getHelpContents(fakeSearchRequest); - - assertDeepEquals(fakeHelpContentList, response.response.results); - assertEquals( - fakeSearchResponse.totalResults, response.response.totalResults); - }); - - /** - * Test that the fake help content provider returns the empty list which was - * set explicitly. - */ - test('getHelpContentsEmpty', async () => { - /** @type {!HelpContentList} */ - const expectedList = []; - - /** @type {!SearchResponse} */ - const emptyResponse = { - results: expectedList, - totalResults: 0, - }; - provider.setFakeSearchResponse(emptyResponse); - - const response = await provider.getHelpContents(fakeSearchRequest); - - assertDeepEquals(expectedList, response.response.results); - assertEquals(emptyResponse.totalResults, response.response.totalResults); - assertEquals( - mojoString16ToString(fakeSearchRequest.query), provider.lastQuery); - }); -});
diff --git a/chrome/test/data/webui/chromeos/os_feedback_ui/mojo_interface_provider_test.js b/chrome/test/data/webui/chromeos/os_feedback_ui/mojo_interface_provider_test.js deleted file mode 100644 index 964c550..0000000 --- a/chrome/test/data/webui/chromeos/os_feedback_ui/mojo_interface_provider_test.js +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'chrome://webui-test/chromeos/mojo_webui_test_support.js'; - -import {FakeFeedbackServiceProvider} from 'chrome://os-feedback/fake_feedback_service_provider.js'; -import {FakeHelpContentProvider} from 'chrome://os-feedback/fake_help_content_provider.js'; -import {getFeedbackServiceProvider, getHelpContentProvider, setFeedbackServiceProviderForTesting, setHelpContentProviderForTesting} from 'chrome://os-feedback/mojo_interface_provider.js'; -import {FeedbackServiceProviderInterface, HelpContentProviderInterface} from 'chrome://os-feedback/os_feedback_ui.mojom-webui.js'; -import {assertEquals, assertTrue} from 'chrome://webui-test/chromeos/chai_assert.js'; - -suite('fakeMojoProviderTestSuite', () => { - test('SettingGettingTestHelpContentProvider', () => { - const fake_provider = - /** @type {HelpContentProviderInterface} */ ( - new FakeHelpContentProvider()); - setHelpContentProviderForTesting(fake_provider); - assertEquals(fake_provider, getHelpContentProvider()); - }); - - test('GetDefaultHelpContentProvider', () => { - const provider = getHelpContentProvider(); - assertTrue(!!provider); - }); - - test('SettingGettingTestFeedbackServiceProvider', () => { - const fake_provider = - /** @type {FeedbackServiceProviderInterface} */ ( - new FakeFeedbackServiceProvider()); - setFeedbackServiceProviderForTesting(fake_provider); - assertEquals(fake_provider, getFeedbackServiceProvider()); - }); - - test('GetDefaultFeedbackServiceProvider', () => { - const provider = getFeedbackServiceProvider(); - assertTrue(!!provider); - }); -});
diff --git a/chrome/test/data/webui/chromeos/os_feedback_ui/os_feedback_browsertest.js b/chrome/test/data/webui/chromeos/os_feedback_ui/os_feedback_browsertest.js index 5ec34a9..b67b627 100644 --- a/chrome/test/data/webui/chromeos/os_feedback_ui/os_feedback_browsertest.js +++ b/chrome/test/data/webui/chromeos/os_feedback_ui/os_feedback_browsertest.js
@@ -32,11 +32,6 @@ // TODO(crbug.com/1401615): Flaky. const tests = [ ['ConfirmationPage', 'confirmation_page_test.js', 'DISABLED_All'], - [ - 'FakeHelpContentProvider', 'fake_help_content_provider_test.js', - 'DISABLED_All' - ], - ['MojoInterfaceProvider', 'mojo_interface_provider_test.js', 'DISABLED_All'], ['FeedbackFlow', 'feedback_flow_test.js', 'DISABLED_All'], ['FileAttachment', 'file_attachment_test.js', 'DISABLED_All'], ['HelpContent', 'help_content_test.js', 'DISABLED_All'],
diff --git a/chrome/test/fuzzing/kombucha_in_process_fuzzer.cc b/chrome/test/fuzzing/kombucha_in_process_fuzzer.cc index 6fb10d9..b91d834 100644 --- a/chrome/test/fuzzing/kombucha_in_process_fuzzer.cc +++ b/chrome/test/fuzzing/kombucha_in_process_fuzzer.cc
@@ -108,16 +108,6 @@ ui_controls::EnableUIControls(); #endif - // This will be used to ignore internal kombucha errors. For instance, some - // actions are not authorized when being followed by other actions, and our - // fuzzing process doesn't know about this. To avoid hitting unnecessary - // failures, we should just ignore those and keep fuzzing. - private_test_impl().set_aborted_callback_for_testing( - base::BindLambdaForTesting( - [](const ui::InteractionSequence::AbortedData& data) { - LOG(WARNING) << "Aborted callback fired: " << data; - })); - InteractiveBrowserTestT::SetUp(); } @@ -203,6 +193,19 @@ FuzzCase fuzz_case; fuzz_case.ParseFromArray(data, size); + // This will be used to ignore internal kombucha errors. For instance, some + // actions are not authorized when being followed by other actions, and our + // fuzzing process doesn't know about this. To avoid hitting unnecessary + // failures, we should just ignore those and keep fuzzing. + // We need to reset this callback at each iteration because this is a once + // callback, and once it's being used, the default behaviour will for + // internal kombucha state failure will kick back in. + private_test_impl().set_aborted_callback_for_testing( + base::BindLambdaForTesting( + [](const ui::InteractionSequence::AbortedData& data) { + LOG(WARNING) << "Aborted callback fired: " << data; + })); + // Used to reassign target with NameElement constexpr char TargetName[] = "name"; constexpr char OtherTargetName[] = "otherName";
diff --git a/chromeos/components/in_session_auth/mojom/BUILD.gn b/chromeos/components/in_session_auth/mojom/BUILD.gn index 704f1e9..d0e2ebe1 100644 --- a/chromeos/components/in_session_auth/mojom/BUILD.gn +++ b/chromeos/components/in_session_auth/mojom/BUILD.gn
@@ -9,7 +9,6 @@ sources = [ "in_session_auth.mojom" ] webui_module_path = "chrome://resources/mojo/chromeos/components/in_session_auth/mojom" - use_typescript_sources = true public_deps = [ "//mojo/public/mojom/base" ] }
diff --git a/chromeos/crosapi/mojom/dlp.mojom b/chromeos/crosapi/mojom/dlp.mojom index 8f5c3328..f3efb0a7 100644 --- a/chromeos/crosapi/mojom/dlp.mojom +++ b/chromeos/crosapi/mojom/dlp.mojom
@@ -6,6 +6,7 @@ import "mojo/public/mojom/base/string16.mojom"; import "url/mojom/url.mojom"; +import "mojo/public/mojom/base/file_path.mojom"; // Corresponds to DlpRulesManager::Level enum. [Stable, Extensible] @@ -54,6 +55,19 @@ OnStop@2(); }; +// Corresponds to the dlp::FileAction enum. +[Stable, Extensible] +enum FileAction { + [Default] kUnknown = 0, + kDownload = 1, + kTransfer = 2, + kUpload = 3, + kCopy = 4, + kMove = 5, + kOpen = 6, + kShare = 7, +}; + // Interface to communicate from Lacros DLP layer to Ash. Used to notify Ash // about changes in restrictions applied to web content in Lacros. // @@ -61,8 +75,8 @@ // connection by Lacros has to be kept over its whole lifetime as the closing // indicates that associated windows are no longer existing. // -// Next MinVersion: 4 -// Next ID: 4 +// Next MinVersion: 5 +// Next ID: 5 [Stable, Uuid="793ee9c6-3873-4ea8-a541-894412ddfc0b"] interface Dlp { // Called when |restrictions| are changed for window with |window_id|. @@ -80,4 +94,9 @@ // Called when screen share in Lacros is stopped. [MinVersion=2] OnScreenShareStopped@3(string label, ScreenShareArea area); -}; + + // Shows a notification to inform the user that `files` where blocked during + // `action` while performing a task with id `task_id`. + [MinVersion=4] ShowBlockedFiles@4(uint64? task_id, + array<mojo_base.mojom.FilePath> files, FileAction action); +}; \ No newline at end of file
diff --git a/chromeos/profiles/arm.afdo.newest.txt b/chromeos/profiles/arm.afdo.newest.txt index c1f71ba2..85cba38 100644 --- a/chromeos/profiles/arm.afdo.newest.txt +++ b/chromeos/profiles/arm.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-arm-none-121-6154.0-1702299075-benchmark-122.0.6178.0-r1-redacted.afdo.xz +chromeos-chrome-arm-none-121-6154.0-1702299075-benchmark-122.0.6179.0-r1-redacted.afdo.xz
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb index eaa22739..985584f 100644 --- a/chromeos/strings/chromeos_strings_eu.xtb +++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -834,7 +834,7 @@ <translation id="7216409898977639127">Zerbitzu mugikorraren hornitzailea</translation> <translation id="725133483556299729">Hautatu helbide elektroniko bat</translation> <translation id="7271040990581020067">Eskanerra erabiltzen ari zara. Saiatu berriro geroago.</translation> -<translation id="7273347807225967898">Lasterbidea ez dago erabilgarri. Sakatu beste lasterbide bat tekla aldatzaile bat erabilita (Ktrl, Alt, Maius, bilaketa-tekla edo Exekutatzeko tresnaren tekla).</translation> +<translation id="7273347807225967898">Lasterbidea ez dago erabilgarri. Sakatu beste lasterbide bat tekla aldatzaile bat erabilita (Ktrl, Alt, Maius, Bilaketa edo Exekutatzeko tresnaren tekla).</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> <translation id="7281657306185710294">Sentitu haize gozoa</translation> <translation id="7287310195820267359">Horma-paperen bildumak</translation> @@ -944,7 +944,7 @@ <translation id="808894953321890993">Aldatu pasahitza</translation> <translation id="8094062939584182041">Eman arazo honi buruzko mezu elektronikoak bidaltzeko baimena Google-ri</translation> <translation id="8104083085214006426">Segurua ez den sare ireki bat ari zara erabiltzen</translation> -<translation id="8111706652656628199">Lasterbidea ez dago erabilgarri. Sakatu beste lasterbide bat Maius eta beste tekla aldatzaile bat erabilita (Ktrl, Alt, bilaketa-tekla edo Exekutatzeko tresnaren tekla).</translation> +<translation id="8111706652656628199">Lasterbidea ez dago erabilgarri. Sakatu beste lasterbide bat Maius eta beste tekla aldatzaile bat erabilita (Ktrl, Alt, Bilaketa edo Exekutatzeko tresnaren tekla).</translation> <translation id="811820734797650957">Ping egin dakioke atebideari (Android)</translation> <translation id="8129620843620772246"><ph name="TEMPERATURE_C" /> °C</translation> <translation id="8132480444149501833">Eskatu trafiko-kontagailuak</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb index 8abe248..df49b6afb 100644 --- a/chromeos/strings/chromeos_strings_ru.xtb +++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -213,7 +213,7 @@ <translation id="2391082728065870591">Отправить отзыв с отчетом</translation> <translation id="2407209115954268704">Статус блокировки SIM-карты</translation> <translation id="241419523391571119">Чтобы начать тестирование, откройте крышку устройства</translation> -<translation id="2414886740292270097">Темная</translation> +<translation id="2414886740292270097">Тёмная</translation> <translation id="2418150275289244458">Перейти к настройкам</translation> <translation id="2421798028054665193">Изображение: <ph name="CURRENT_PAGE" /> из <ph name="TOTAL_PAGES" /></translation> <translation id="2446553403094072641">Точность чисел с плавающей запятой</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb index 051d825..41ccbc4 100644 --- a/chromeos/strings/chromeos_strings_sw.xtb +++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -216,7 +216,7 @@ <translation id="2414886740292270097">Giza</translation> <translation id="2418150275289244458">Fungua katika mipangilio</translation> <translation id="2421798028054665193">Picha ya <ph name="CURRENT_PAGE" /> kati ya <ph name="TOTAL_PAGES" /></translation> -<translation id="2446553403094072641">Usahihi wa mfumo wa uhandisi wa kuonyesha nambari</translation> +<translation id="2446553403094072641">Usahihi wa mfumo wa uhandisi wa kuonyesha namba</translation> <translation id="2448312741937722512">Aina</translation> <translation id="248546197012830854">Kifaa hakipo mtandaoni. Unganisha kwenye mtandao wa Wi-Fi ili uone maudhui ya usaidizi.</translation> <translation id="2491955442992294626">Funguo hazijaribiwi unapotumia dirisha lingine</translation> @@ -762,7 +762,7 @@ <translation id="6624819909909965616">Haiwezi kupakia faili lenye ukubwa unaozidi MB 10</translation> <translation id="6643016212128521049">Futa</translation> <translation id="6647510110698214773">Algoriti ya usimbaji fiche</translation> -<translation id="6650062777702288430">Swichi ya kana au herufi na nambari</translation> +<translation id="6650062777702288430">Swichi ya kana au herufi na namba</translation> <translation id="6657585470893396449">Nenosiri</translation> <translation id="6659594942844771486">Kichupo</translation> <translation id="6673898378497337661">kuongeza mwangaza wa kibodi</translation>
diff --git a/components/autofill/core/browser/payments/iban_access_manager.cc b/components/autofill/core/browser/payments/iban_access_manager.cc index d4b0817..d51db8b 100644 --- a/components/autofill/core/browser/payments/iban_access_manager.cc +++ b/components/autofill/core/browser/payments/iban_access_manager.cc
@@ -20,18 +20,14 @@ IbanAccessManager::~IbanAccessManager() = default; void IbanAccessManager::FetchValue(const Suggestion& suggestion, - base::WeakPtr<Accessor> accessor) { - if (!accessor) { - return; - } - + OnIbanFetchedCallback on_iban_fetched) { // If `ValueToFill` has a value then that means that it's a local IBAN // suggestion, and the full IBAN value is known already. if (absl::holds_alternative<Suggestion::ValueToFill>(suggestion.payload)) { const std::u16string value = suggestion.GetPayload<Suggestion::ValueToFill>().value(); if (!value.empty()) { - accessor->OnIbanFetched(value); + std::move(on_iban_fetched).Run(value); } return; } @@ -61,18 +57,18 @@ client_->GetPaymentsNetworkInterface()->UnmaskIban( request_details, base::BindOnce(&IbanAccessManager::OnUnmaskResponseReceived, - weak_ptr_factory_.GetWeakPtr(), accessor)); + weak_ptr_factory_.GetWeakPtr(), + std::move(on_iban_fetched))); } void IbanAccessManager::OnUnmaskResponseReceived( - base::WeakPtr<Accessor> accessor, + OnIbanFetchedCallback on_iban_fetched, AutofillClient::PaymentsRpcResult result, const std::u16string& value) { client_->CloseAutofillProgressDialog( /*show_confirmation_before_closing=*/false); - if (accessor && result == AutofillClient::PaymentsRpcResult::kSuccess && - !value.empty()) { - accessor->OnIbanFetched(value); + if (result == AutofillClient::PaymentsRpcResult::kSuccess && !value.empty()) { + std::move(on_iban_fetched).Run(value); return; } AutofillErrorDialogContext error_context;
diff --git a/components/autofill/core/browser/payments/iban_access_manager.h b/components/autofill/core/browser/payments/iban_access_manager.h index 62ea76d..c55a16b 100644 --- a/components/autofill/core/browser/payments/iban_access_manager.h +++ b/components/autofill/core/browser/payments/iban_access_manager.h
@@ -7,6 +7,7 @@ #include <string> +#include "base/functional/callback_forward.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "components/autofill/core/browser/autofill_client.h" @@ -23,11 +24,10 @@ // IBANs. class IbanAccessManager { public: - class Accessor { - public: - virtual ~Accessor() = default; - virtual void OnIbanFetched(const std::u16string& value) = 0; - }; + // Callback to notify the caller of the access manager when fetching the value + // of an IBAN has finished. + using OnIbanFetchedCallback = + base::OnceCallback<void(std::u16string_view value)>; explicit IbanAccessManager(AutofillClient* client); IbanAccessManager(const IbanAccessManager&) = delete; @@ -35,17 +35,16 @@ ~IbanAccessManager(); // Returns the full IBAN value corresponding to the input `suggestion`. - // As this may require a network round-trip for server IBANs, the value - // is returned via a call to `Accessor::OnIbanFetched` which may occur - // asynchronously to this method. - // If the IBAN value cannot be extracted, the accessor will never be called. + // As this may require a network round-trip for server IBANs, + //`on_iban_fetched` is run once the value is fetched. For local IBANs, value + // will be filled immediately. void FetchValue(const Suggestion& suggestion, - base::WeakPtr<Accessor> accessor); + OnIbanFetchedCallback on_iban_fetched); private: // Called when an UnmaskIban call is completed. The full IBAN value will be // returned via `value`. - void OnUnmaskResponseReceived(base::WeakPtr<Accessor> accessor, + void OnUnmaskResponseReceived(OnIbanFetchedCallback on_iban_fetched, AutofillClient::PaymentsRpcResult result, const std::u16string& value);
diff --git a/components/autofill/core/browser/payments/iban_access_manager_unittest.cc b/components/autofill/core/browser/payments/iban_access_manager_unittest.cc index 1482ecc..1abacdc7 100644 --- a/components/autofill/core/browser/payments/iban_access_manager_unittest.cc +++ b/components/autofill/core/browser/payments/iban_access_manager_unittest.cc
@@ -4,6 +4,7 @@ #include "components/autofill/core/browser/payments/iban_access_manager.h" +#include "base/test/mock_callback.h" #include "base/test/task_environment.h" #include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/payments/mock_test_payments_network_interface.h" @@ -24,24 +25,6 @@ } // namespace -class TestAccessor : public IbanAccessManager::Accessor { - public: - void OnIbanFetched(const std::u16string& value) override { - fetched_iban_ = value; - } - - std::optional<std::u16string> fetched_iban() const { return fetched_iban_; } - - base::WeakPtr<TestAccessor> GetWeakPtr() { - return weak_ptr_factory_.GetWeakPtr(); - } - - private: - // The full IBAN returned from OnIbanFetched(). - std::optional<std::u16string> fetched_iban_; - base::WeakPtrFactory<TestAccessor> weak_ptr_factory_{this}; -}; - class IbanAccessManagerTest : public testing::Test { public: IbanAccessManagerTest() { @@ -61,15 +44,10 @@ /*sync_service=*/nullptr, /*strike_database=*/nullptr, /*image_fetcher=*/nullptr); - accessor_ = std::make_unique<TestAccessor>(); iban_access_manager_ = std::make_unique<IbanAccessManager>(&autofill_client_); } - std::optional<std::u16string> GetFetchedIban() { - return accessor_->fetched_iban(); - } - void SetUpUnmaskIbanCall(bool is_successful, const std::u16string& value) { ON_CALL(*payments_network_interface(), UnmaskIban) .WillByDefault( @@ -101,7 +79,6 @@ test::AutofillUnitTestEnvironment autofill_test_environment_; syncer::TestSyncService sync_service_; TestAutofillClient autofill_client_; - std::unique_ptr<TestAccessor> accessor_; std::unique_ptr<IbanAccessManager> iban_access_manager_; }; @@ -111,9 +88,9 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::ValueToFill(kFullIbanValue); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); - - EXPECT_EQ(kFullIbanValue, GetFetchedIban().value()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + EXPECT_CALL(callback, Run(std::u16string_view(kFullIbanValue))); + iban_access_manager_->FetchValue(suggestion, callback.Get()); } // Verify that `FetchValue` returns empty value if `ValueToFill` is empty. @@ -121,9 +98,9 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::ValueToFill(u""); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); - - EXPECT_FALSE(GetFetchedIban()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + EXPECT_CALL(callback, Run).Times(0); + iban_access_manager_->FetchValue(suggestion, callback.Get()); } // Verify that an UnmaskIban call won't be triggered if no server IBAN with the @@ -139,9 +116,9 @@ personal_data().AddServerIban(server_iban); EXPECT_CALL(*payments_network_interface(), UnmaskIban).Times(0); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); - - EXPECT_FALSE(GetFetchedIban()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + EXPECT_CALL(callback, Run).Times(0); + iban_access_manager_->FetchValue(suggestion, callback.Get()); } // Verify that a successful `UnmaskIban` call results in the `FetchValue` @@ -155,9 +132,9 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::InstrumentId(kInstrumentId); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); - - EXPECT_EQ(kFullIbanValue, GetFetchedIban().value()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + EXPECT_CALL(callback, Run(std::u16string_view(kFullIbanValue))); + iban_access_manager_->FetchValue(suggestion, callback.Get()); } // Verify that a failed `UnmaskIban` call results in the method `OnIbanFetched` @@ -171,10 +148,11 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::InstrumentId(kInstrumentId); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + EXPECT_CALL(callback, Run).Times(0); + iban_access_manager_->FetchValue(suggestion, callback.Get()); EXPECT_CALL(*payments_network_interface(), UnmaskIban).Times(0); - EXPECT_FALSE(GetFetchedIban()); } // Verify that a failed `UnmaskIban` call results in the method `OnIbanFetched` @@ -188,27 +166,11 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::InstrumentId(kInstrumentId); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + EXPECT_CALL(callback, Run).Times(0); + iban_access_manager_->FetchValue(suggestion, callback.Get()); EXPECT_CALL(*payments_network_interface(), UnmaskIban).Times(0); - EXPECT_FALSE(GetFetchedIban()); -} - -// Verify that a nullptr accessor results in the `FetchValue` not -// triggering an `UnmaskIban` request. -TEST_F(IbanAccessManagerTest, NoAccessor_NotTriggerUnmaskIbanRequest) { - SetUpUnmaskIbanCall(/*is_successful=*/true, /*value=*/kFullIbanValue); - - Iban server_iban = test::GetServerIban(); - server_iban.set_identifier(Iban::InstrumentId(kInstrumentId)); - personal_data().AddServerIban(server_iban); - Suggestion suggestion(PopupItemId::kIbanEntry); - suggestion.payload = Suggestion::InstrumentId(kInstrumentId); - - iban_access_manager_->FetchValue(suggestion, /*accessor=*/nullptr); - - EXPECT_CALL(*payments_network_interface(), UnmaskIban).Times(0); - EXPECT_FALSE(GetFetchedIban()); } // Verify that there will be no progress dialog when unmasking a local IBAN. @@ -216,7 +178,8 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::ValueToFill(kFullIbanValue); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + iban_access_manager_->FetchValue(suggestion, callback.Get()); EXPECT_FALSE(autofill_client_.autofill_progress_dialog_shown()); } @@ -231,7 +194,8 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::InstrumentId(kInstrumentId); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + iban_access_manager_->FetchValue(suggestion, callback.Get()); EXPECT_TRUE(autofill_client_.autofill_progress_dialog_shown()); EXPECT_FALSE(autofill_client_.autofill_error_dialog_shown()); @@ -248,7 +212,8 @@ Suggestion suggestion(PopupItemId::kIbanEntry); suggestion.payload = Suggestion::InstrumentId(kInstrumentId); - iban_access_manager_->FetchValue(suggestion, accessor_->GetWeakPtr()); + base::MockCallback<IbanAccessManager::OnIbanFetchedCallback> callback; + iban_access_manager_->FetchValue(suggestion, callback.Get()); EXPECT_TRUE(autofill_client_.autofill_progress_dialog_shown()); EXPECT_TRUE(autofill_client_.autofill_error_dialog_shown());
diff --git a/components/autofill/core/browser/payments/iban_save_manager.cc b/components/autofill/core/browser/payments/iban_save_manager.cc index f144e10..cec8f45f 100644 --- a/components/autofill/core/browser/payments/iban_save_manager.cc +++ b/components/autofill/core/browser/payments/iban_save_manager.cc
@@ -306,6 +306,9 @@ if (result == AutofillClient::PaymentsRpcResult::kSuccess) { // Clear all IbanSave strikes for this IBAN, so that if it's later removed // the strike count starts over with respect to re-saving it. + autofill_metrics::LogStrikesPresentWhenIbanSaved( + iban_save_strike_database_->GetStrikes(partial_iban_hash), + /*is_upload_save=*/true); GetIbanSaveStrikeDatabase()->ClearStrikes(partial_iban_hash); } else if (show_save_prompt) { // If the upload failed and the bubble was actually shown (NOT just the
diff --git a/components/autofill/core/browser/payments/iban_save_manager_unittest.cc b/components/autofill/core/browser/payments/iban_save_manager_unittest.cc index 5ef5c11..f560f177 100644 --- a/components/autofill/core/browser/payments/iban_save_manager_unittest.cc +++ b/components/autofill/core/browser/payments/iban_save_manager_unittest.cc
@@ -579,6 +579,7 @@ } TEST_F(IbanSaveManagerTest, UploadSaveIban_Accept_SuccessShouldClearStrikes) { + base::HistogramTester histogram_tester; SetUpGetIbanUploadDetailsResponse(/*is_successful=*/true); SetUpUploadIbanResponse(/*is_successful=*/true); Iban iban; @@ -600,6 +601,9 @@ // Verify the IBAN's strikes have been cleared. EXPECT_EQ(0, iban_save_strike_database.GetStrikes(partial_iban_hash)); + histogram_tester.ExpectBucketCount( + "Autofill.StrikeDatabase.StrikesPresentWhenIbanSaved.Upload", + /*sample=*/1, /*expected_count=*/1); } TEST_F(IbanSaveManagerTest, UploadSaveIban_Accept_FailureShouldAddStrike) {
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb index bd9c3ae..12a7cd84 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
@@ -356,7 +356,7 @@ <translation id="6992289844737586249">Pregunta abans de permetre que els llocs web utilitzin el micròfon (opció recomanada)</translation> <translation id="7000754031042624318">Desactivat a la configuració d'Android</translation> <translation id="7016516562562142042">Es permet al motor de cerca actual</translation> -<translation id="702275896380648118">Aquest lloc web determina les coses que t'agraden i, a continuació, suggereix anuncis a altres llocs web. També obté de Chrome els teus temes d'anuncis per mostrar-te anuncis més rellevants.</translation> +<translation id="702275896380648118">Aquest lloc web determina les coses que t'agraden i, a continuació, suggereix anuncis a altres llocs web. També obté de Chrome els teus temes d'anunci per mostrar-te anuncis més rellevants.</translation> <translation id="7053983685419859001">Bloqueja</translation> <translation id="7066151586745993502">{NUM_SELECTED,plural, =1{1 seleccionat}other{# seleccionats}}</translation> <translation id="7087918508125750058"><ph name="ITEM_COUNT" /> elements seleccionats. Hi ha opcions disponibles a prop de la part superior de la pantalla.</translation> @@ -452,7 +452,7 @@ <translation id="8514955299594277296">No permetis que els llocs web desin dades al teu dispositiu (opció no recomanada)</translation> <translation id="851751545965956758">Impedeix que els llocs web es connectin a dispositius</translation> <translation id="8525306231823319788">Pantalla completa</translation> -<translation id="8541410041357371550">Aquest lloc web obté de Chrome els teus temes d'anuncis per mostrar-te anuncis més rellevants</translation> +<translation id="8541410041357371550">Aquest lloc web obté de Chrome els teus temes d'anunci per mostrar-te anuncis més rellevants</translation> <translation id="8564613706851221529">{COUNT,plural, =1{Es permeten les galetes per a <ph name="FPS_MEMBERS_COUNT" /> lloc web de <ph name="FPS_OWNER" />}other{Es permeten les galetes per a <ph name="FPS_MEMBERS_COUNT" /> llocs web de <ph name="FPS_OWNER" />}}</translation> <translation id="857943718398505171">Permès (opció recomanada)</translation> <translation id="8609465669617005112">Desplaça cap amunt</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb index c874478a..64f1af4 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
@@ -166,7 +166,7 @@ <translation id="3803367742635802571">ऐसा हो सकता है कि विज़िट की गई साइटें ठीक तरह से काम करना बंद कर दें</translation> <translation id="3804247818991980532"><ph name="TYPE_1" />. <ph name="TYPE_2" />.</translation> <translation id="381841723434055211">फ़ोन नंबर</translation> -<translation id="3826050100957962900">तीसरे पक्ष की सेवा के लिए साइन इन</translation> +<translation id="3826050100957962900">तीसरे पक्ष की मदद से साइन-इन</translation> <translation id="3835233591525155343">आपके डिवाइस का इस्तेमाल</translation> <translation id="3843916486309149084">Chrome आज फिर से कुकी ब्लॉक करेगा</translation> <translation id="385051799172605136">वापस जाएं</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb index 487f2f7..51363692 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
@@ -105,7 +105,7 @@ <translation id="2683434792633810741">Želite li izbrisati i poništiti?</translation> <translation id="2713106313042589954">Isključi kameru</translation> <translation id="2717722538473713889">E-adrese</translation> -<translation id="2750481671343847896">Web-lokacije mogu prikazivati upite za prijavu usluga za identitet.</translation> +<translation id="2750481671343847896">Web-lokacije mogu prikazivati upite za prijavu s usluga za provjeru identiteta.</translation> <translation id="2790501146643349491">Kad je ta postavka uključena, nedavno zatvorene web-lokacije mogu dovršiti slanje i primanje podataka. Kad je ta postavka isključena, nedavno zatvorene web-lokacije ne mogu dovršiti slanje ili primanje podataka.</translation> <translation id="2822354292072154809">Jeste li sigurni da želite poništiti sva dopuštenja za aplikaciju <ph name="CHOSEN_OBJECT_NAME" />?</translation> <translation id="2850913818900871965">Zahtijevaj prikaz na mobilnom uređaju</translation> @@ -166,7 +166,7 @@ <translation id="3803367742635802571">Web-lokacije koje posjećujete mogu prestati funkcionirati kao što je predviđeno</translation> <translation id="3804247818991980532"><ph name="TYPE_1" />. <ph name="TYPE_2" />.</translation> <translation id="381841723434055211">Telefonski brojevi</translation> -<translation id="3826050100957962900">Prijava za treće strane</translation> +<translation id="3826050100957962900">Prijava putem treće strane</translation> <translation id="3835233591525155343">Vaša upotreba uređaja</translation> <translation id="3843916486309149084">Chrome će danas ponovno blokirati kolačiće</translation> <translation id="385051799172605136">Natrag</translation> @@ -340,7 +340,7 @@ <translation id="6653342741369270081">Pritisnite gumb za natrag da biste zatvorili prikaz na cijelom zaslonu.</translation> <translation id="6689172468748959065">Fotografije profila</translation> <translation id="6697925417670533197">Aktivna preuzimanja</translation> -<translation id="6722828510648505498">Blokiraj upite za prijavu usluga za identitet.</translation> +<translation id="6722828510648505498">Blokiraj upite za prijavu s usluga za provjeru identiteta.</translation> <translation id="6746124502594467657">Pomakni dolje</translation> <translation id="6749077623962119521">Poništiti dopuštenja?</translation> <translation id="6766622839693428701">Prijeđite prstom prema dolje da biste zatvorili.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb index 68fd32b..8085b50 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
@@ -166,7 +166,7 @@ <translation id="3803367742635802571">Este posibil ca site-urile pe care le accesezi să nu mai funcționeze așa cum au fost proiectate</translation> <translation id="3804247818991980532"><ph name="TYPE_1" />. <ph name="TYPE_2" />.</translation> <translation id="381841723434055211">Numere de telefon</translation> -<translation id="3826050100957962900">Third-party sign-in</translation> +<translation id="3826050100957962900">Conectarea prin terți</translation> <translation id="3835233591525155343">Folosirea dispozitivului</translation> <translation id="3843916486309149084">Chrome va bloca din nou cookie-urile astăzi</translation> <translation id="385051799172605136">Înapoi</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb index cdc524c..12ec173 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
@@ -121,7 +121,7 @@ <translation id="3008272652534848354">Đặt lại quyền</translation> <translation id="3013291976881901233">Thiết bị MIDI</translation> <translation id="301521992641321250">Tự động bị chặn</translation> -<translation id="3069226013421428034">Cho phép bên thứ ba đăng nhập đối với một trang web cụ thể.</translation> +<translation id="3069226013421428034">Cho phép đăng nhập qua bên thứ ba cho một trang web cụ thể.</translation> <translation id="3082992102194421695">{COUNT,plural, =1{Hết hạn ngày mai}other{Hết hạn sau # ngày nữa}}</translation> <translation id="310297983047869047">Trang trình bày trước</translation> <translation id="3109724472072898302">Đã thu gọn</translation> @@ -319,7 +319,7 @@ <translation id="6304434827459067558"><ph name="SITE" /> không được sử dụng thông tin của bạn trên</translation> <translation id="6320088164292336938">Rung</translation> <translation id="6344622098450209924">Tính năng chống theo dõi</translation> -<translation id="6367753977865761591">Chặn đăng nhập của bên thứ ba đối với một trang web cụ thể.</translation> +<translation id="6367753977865761591">Cho phép đăng nhập qua bên thứ ba cho một trang web cụ thể.</translation> <translation id="6398765197997659313">Thoát khỏi chế độ toàn màn hình</translation> <translation id="640163077447496506">Hết hạn hôm nay</translation> <translation id="6405650995156823521"><ph name="FIRST_PART" /> • <ph name="SECOND_PART" /></translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb index ec583fa8..28032d1 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
@@ -167,7 +167,7 @@ <translation id="3804247818991980532"><ph name="TYPE_1" />。<ph name="TYPE_2" />。</translation> <translation id="381841723434055211">電話號碼</translation> <translation id="3826050100957962900">第三方登入</translation> -<translation id="3835233591525155343">你的裝置使用狀態</translation> +<translation id="3835233591525155343">裝置使用狀態</translation> <translation id="3843916486309149084">Chrome 將於今天再次封鎖 Cookie</translation> <translation id="385051799172605136">返回</translation> <translation id="3859306556332390985">快轉到特定的播放時間點</translation>
diff --git a/components/browsing_data/content/browsing_data_helper.cc b/components/browsing_data/content/browsing_data_helper.cc index 79e6fee..9f443af 100644 --- a/components/browsing_data/content/browsing_data_helper.cc +++ b/components/browsing_data/content/browsing_data_helper.cc
@@ -180,6 +180,12 @@ ContentSettingsType::FILE_SYSTEM_ACCESS_EXTENDED_PERMISSION, delete_begin, delete_end, HostContentSettingsMap::PatternSourcePredicate()); #endif + +#if BUILDFLAG(IS_CHROMEOS) + host_content_settings_map->ClearSettingsForOneTypeWithPredicate( + ContentSettingsType::SMART_CARD_DATA, delete_begin, delete_end, + HostContentSettingsMap::PatternSourcePredicate()); +#endif } void RemoveFederatedSiteSettingsData(
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 64e78a9..24cbeec9 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "28.12", - "log_list_timestamp": "2023-12-11T12:54:28Z", + "version": "28.13", + "log_list_timestamp": "2023-12-12T12:54:11Z", "operators": [ { "name": "Google",
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc index aa0bd81..efca3144 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -674,6 +674,17 @@ WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE, ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); + + Register(ContentSettingsType::SMART_CARD_GUARD, "smart-card-guard", + CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, + /*allowlisted_primary_schemes=*/{}, + /*valid_settings=*/{CONTENT_SETTING_ASK, CONTENT_SETTING_BLOCK}, + WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, + // Add more platforms as implementation progresses. + // Target is DESKTOP. + WebsiteSettingsRegistry::PLATFORM_CHROMEOS, + ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE, + ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); } void ContentSettingsRegistry::Register(
diff --git a/components/content_settings/core/browser/content_settings_uma_util.cc b/components/content_settings/core/browser/content_settings_uma_util.cc index 6128d3b..89dd97c 100644 --- a/components/content_settings/core/browser/content_settings_uma_util.cc +++ b/components/content_settings/core/browser/content_settings_uma_util.cc
@@ -123,6 +123,8 @@ {ContentSettingsType::TPCD_HEURISTICS_GRANTS, 109}, {ContentSettingsType::FILE_SYSTEM_ACCESS_RESTORE_PERMISSION, 110}, {ContentSettingsType::CAPTURED_SURFACE_CONTROL, 111}, + {ContentSettingsType::SMART_CARD_GUARD, 112}, + {ContentSettingsType::SMART_CARD_DATA, 113}, // As mentioned at the top, please don't forget to update ContentType in // enums.xml when you add entries here!
diff --git a/components/content_settings/core/browser/website_settings_registry.cc b/components/content_settings/core/browser/website_settings_registry.cc index 2b45567bf..a46ed8a9 100644 --- a/components/content_settings/core/browser/website_settings_registry.cc +++ b/components/content_settings/core/browser/website_settings_registry.cc
@@ -298,6 +298,13 @@ WebsiteSettingsInfo::REQUESTING_SCHEMEFUL_SITE_ONLY_SCOPE, DESKTOP | PLATFORM_ANDROID, WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO); + Register(ContentSettingsType::SMART_CARD_DATA, "smart-card-data", + base::Value(), WebsiteSettingsInfo::UNSYNCABLE, + WebsiteSettingsInfo::NOT_LOSSY, + WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, + // Add more platforms as implementation progresses. + // Target is DESKTOP. + PLATFORM_CHROMEOS, WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO); } } // namespace content_settings
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h index a3a624c3..9c460d88 100644 --- a/components/content_settings/core/common/content_settings_types.h +++ b/components/content_settings/core/common/content_settings_types.h
@@ -375,6 +375,12 @@ // the captured tab. CAPTURED_SURFACE_CONTROL, + // Content setting for access to smart card readers. + // The "guard" content setting stores whether to allow sites to access the + // Smart Card API. + SMART_CARD_GUARD, + SMART_CARD_DATA, + NUM_TYPES, };
diff --git a/components/cronet/android/cronet_combined_impl_native_proguard_golden.cfg b/components/cronet/android/cronet_combined_impl_native_proguard_golden.cfg index 774a8af..bfa5492 100644 --- a/components/cronet/android/cronet_combined_impl_native_proguard_golden.cfg +++ b/components/cronet/android/cronet_combined_impl_native_proguard_golden.cfg
@@ -117,6 +117,10 @@ # running against the standard SDK. -dontwarn android.util.StatsEvent -dontwarn android.util.StatsEvent$* +# There is also an undefined reference to android.util.StatsLog.write(), which +# R8 appears to be fine with but other processors (e.g. internal Google +# ProGuard) may not be. See b/315269496. +-dontwarn android.util.StatsLog # -------- Config Path: components/cronet/android/cronet_impl_native_proguard.cfg -------- # Proguard config for apps that depend on cronet_impl_native_java.jar.
diff --git a/components/cronet/android/cronet_impl_common_proguard.cfg b/components/cronet/android/cronet_impl_common_proguard.cfg index 76595bc..b393dee 100644 --- a/components/cronet/android/cronet_impl_common_proguard.cfg +++ b/components/cronet/android/cronet_impl_common_proguard.cfg
@@ -6,3 +6,7 @@ # running against the standard SDK. -dontwarn android.util.StatsEvent -dontwarn android.util.StatsEvent$* +# There is also an undefined reference to android.util.StatsLog.write(), which +# R8 appears to be fine with but other processors (e.g. internal Google +# ProGuard) may not be. See b/315269496. +-dontwarn android.util.StatsLog
diff --git a/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc b/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc index 761cd18b..f8885f7 100644 --- a/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc +++ b/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc
@@ -373,6 +373,7 @@ WebFeature::kOverrideFlashEmbedwithHTML, WebFeature::kElementRequestPointerLock, WebFeature::kKeyboardApiLock, + WebFeature::kLCPImageWasLazy, })); return *opt_in_features; }
diff --git a/components/password_manager/core/browser/features/password_manager_features_util.h b/components/password_manager/core/browser/features/password_manager_features_util.h index c2f3539..fd1b4bd 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util.h +++ b/components/password_manager/core/browser/features/password_manager_features_util.h
@@ -185,6 +185,16 @@ // SyncUserSettings::GetSelectedTypes(), see crbug.com/1484531. // TODO(crbug.com/1503112): Delete the migration when appropriate, see bug. void MigrateOptInPrefToSyncSelectedTypes(PrefService* pref_service); + +// When the user declines the opt-in offer during saving, the default +// store pref is set to kProfileStore, to signal the opt-in shouldn't be +// offered again (see PasswordFeatureManagerImpl:: +// ShouldOfferOptInAndMoveToAccountStoreAfterSavingLocally()). +// This function additionally ensures that the opt-in pref is explicitly +// set to false in that state, which is relevant for GetUserSettings(). +// Opt-in offers from other flows are unaffected (e.g. filling). +// See crbug.com/1509865. +void MigrateDeclinedSaveOptInToExplicitOptOut(PrefService* pref_service); #endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) } // namespace password_manager::features_util
diff --git a/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc b/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc index 6607876b..7efbeb6 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc +++ b/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc
@@ -315,6 +315,37 @@ } } +void MigrateDeclinedSaveOptInToExplicitOptOut(PrefService* pref_service) { + ScopedDictPrefUpdate opt_in_pref_update( + pref_service, syncer::prefs::internal::kSelectedTypesPerAccount); + for (auto [serialized_gaia_id_hash, settings] : + pref_service->GetDict(prefs::kAccountStoragePerAccountSettings)) { + // `settings` should be a dict but check to avoid a possible startup crash. + if (!settings.is_dict()) { + continue; + } + // Do nothing if there is no password store set or if there is already a + // value set for SyncUserSettings::GetSelectedTypes(). + std::optional<int> default_store = + settings.GetDict().FindInt(kAccountStorageDefaultStoreKey); + std::optional<bool> opt_in = + opt_in_pref_update->EnsureDict(serialized_gaia_id_hash) + ->FindBool(syncer::prefs::internal::kSyncPasswords); + if (!default_store || opt_in.has_value()) { + continue; + } + + // Set password storage in the sync user settings to false if the default + // store has been set to kProfileStore before, e.g. through declining when + // asked through a Reauth bubble whether to save passwords to the account. + if (PasswordStoreFromInt(*default_store) == + PasswordForm::Store::kProfileStore) { + opt_in_pref_update->EnsureDict(serialized_gaia_id_hash) + ->Set(syncer::prefs::internal::kSyncPasswords, false); + } + } +} + // Note: See also password_manager_features_util_common.cc for shared // (cross-platform) and password_manager_features_util_mobile.cc for // mobile-specific implementations.
diff --git a/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc b/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc index e62f0dcd..2299614 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc +++ b/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc
@@ -12,7 +12,9 @@ #include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" +#include "components/signin/public/base/signin_switches.h" #include "components/signin/public/identity_manager/account_info.h" +#include "components/sync/base/pref_names.h" #include "components/sync/service/sync_prefs.h" #include "components/sync/test/test_sync_service.h" #include "testing/gtest/include/gtest/gtest.h" @@ -433,6 +435,71 @@ EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); } + +TEST_F(PasswordManagerFeaturesUtilTest, + MigrateDeclinedSaveOptInToExplicitOptOut) { + // Using the Uno Flag because it will automatically turn on account password + // storage if the default store has not been set to kProfileStore. + base::test::ScopedFeatureList scoped_feature_list{switches::kUnoDesktop}; + syncer::SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); + pref_service_.SetBoolean(syncer::prefs::kExplicitBrowserSignin, true); + + CoreAccountInfo account1; + account1.gaia = "gaia1"; + auto gaia_with_account_store_hash = + signin::GaiaIdHash::FromGaiaId(account1.gaia); + CoreAccountInfo account2; + account2.gaia = "gaia2"; + auto gaia_with_profile_store_hash = + signin::GaiaIdHash::FromGaiaId(account2.gaia); + pref_service_.SetDict( + prefs::kAccountStoragePerAccountSettings, + base::Value::Dict() + .Set(gaia_with_account_store_hash.ToBase64(), + base::Value::Dict().Set( + "default_store", + static_cast<int>(PasswordForm::Store::kAccountStore))) + .Set(gaia_with_profile_store_hash.ToBase64(), + base::Value::Dict().Set( + "default_store", + static_cast<int>(PasswordForm::Store::kProfileStore)))); + + syncer::SyncPrefs sync_prefs(&pref_service_); + // Without the migration, passwords storage will be turned on. + EXPECT_TRUE( + sync_prefs.GetSelectedTypesForAccount(gaia_with_account_store_hash) + .Has(syncer::UserSelectableType::kPasswords)); + EXPECT_TRUE( + sync_prefs.GetSelectedTypesForAccount(gaia_with_profile_store_hash) + .Has(syncer::UserSelectableType::kPasswords)); + EXPECT_TRUE( + sync_prefs + .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId("other")) + .Has(syncer::UserSelectableType::kPasswords)); + + MigrateDeclinedSaveOptInToExplicitOptOut(&pref_service_); + + EXPECT_TRUE( + sync_prefs.GetSelectedTypesForAccount(gaia_with_account_store_hash) + .Has(syncer::UserSelectableType::kPasswords)); + // After the migration, passwords storage will be turned off if the default + // store was kProfileStore. + EXPECT_FALSE( + sync_prefs.GetSelectedTypesForAccount(gaia_with_profile_store_hash) + .Has(syncer::UserSelectableType::kPasswords)); + EXPECT_TRUE( + sync_prefs + .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId("other")) + .Has(syncer::UserSelectableType::kPasswords)); + + // Verify the default store settings are unaffected. + SetSyncStateTransportActive(account1); + EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), + PasswordForm::Store::kAccountStore); + SetSyncStateTransportActive(account2); + EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), + PasswordForm::Store::kProfileStore); +} #endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) } // namespace password_manager::features_util
diff --git a/components/password_manager/core/browser/sync_credentials_filter.cc b/components/password_manager/core/browser/sync_credentials_filter.cc index ac2be49..0e4b99b 100644 --- a/components/password_manager/core/browser/sync_credentials_filter.cc +++ b/components/password_manager/core/browser/sync_credentials_filter.cc
@@ -37,6 +37,8 @@ if (form.form_data.is_gaia_with_skip_save_password_form) return false; + // Note that `sync_service` may be null in advanced cases like --disable-sync + // being used as per syncer::IsSyncAllowedByFlag(). const syncer::SyncService* sync_service = sync_service_factory_function_.Run(); @@ -70,7 +72,10 @@ // Let's assume that if the browser is signed-in, new passwords are saved to // the primary signed-in account. Per sync_util::GetAccountForSaving(), that's // not always true, but let's not overcomplicate. - const CoreAccountInfo primary_account = sync_service->GetAccountInfo(); + const CoreAccountInfo primary_account = sync_service != nullptr + ? sync_service->GetAccountInfo() + : CoreAccountInfo(); + if (!primary_account.IsEmpty()) { // This returns false when `primary_account` just signed-in on the web and // already made it to the IdentityManager.
diff --git a/components/password_manager/core/browser/sync_credentials_filter_unittest.cc b/components/password_manager/core/browser/sync_credentials_filter_unittest.cc index 2c7d2f5..c8fdf14d 100644 --- a/components/password_manager/core/browser/sync_credentials_filter_unittest.cc +++ b/components/password_manager/core/browser/sync_credentials_filter_unittest.cc
@@ -188,22 +188,86 @@ }; TEST_P(CredentialsFilterTest, ShouldSave_NotSignedIn) { - PasswordForm form = SimpleGaiaForm("user@example.org"); + const char kTestEmail[] = "user@example.org"; ASSERT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSignin)); ASSERT_TRUE(sync_service()->GetAccountInfo().IsEmpty()); SetSyncingPasswords(false); + + // Non-Gaia forms should always offer saving. + EXPECT_TRUE(filter_->ShouldSave(SimpleNonGaiaForm(kTestEmail))); + EXPECT_TRUE(filter_->ShouldSave(SimpleNonGaiaForm(""))); + // See comments inside ShouldSave() for the justification. #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) - EXPECT_TRUE(filter_->ShouldSave(form)); -#else - if (base::FeatureList::IsEnabled(features::kEnablePasswordsAccountStorage)) - EXPECT_FALSE(filter_->ShouldSave(form)); - else - EXPECT_TRUE(filter_->ShouldSave(form)); -#endif + // Some scenarios behave differently based on whether or not the feature + // toggle is enabled. + // TODO(crbug.com/1499837): Revisit if these differences are desirable. + EXPECT_EQ( + filter_->ShouldSave(SimpleGaiaForm("")), + base::FeatureList::IsEnabled(features::kEnablePasswordsAccountStorage)); + EXPECT_EQ( + filter_->ShouldSave(SimpleGAIAChangePasswordForm()), + base::FeatureList::IsEnabled(features::kEnablePasswordsAccountStorage)); + EXPECT_TRUE(filter_->ShouldSave(SimpleGaiaForm(kTestEmail))); +#else // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + EXPECT_FALSE(filter_->ShouldSave(SimpleGaiaForm(""))); + EXPECT_FALSE(filter_->ShouldSave(SimpleGAIAChangePasswordForm())); + EXPECT_EQ( + filter_->ShouldSave(SimpleGaiaForm(kTestEmail)), + !base::FeatureList::IsEnabled(features::kEnablePasswordsAccountStorage)); +#endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) +} + +TEST_P(CredentialsFilterTest, ShouldSave_SignedInWithSyncServiceNull) { + const char kPrimaryAccountEmail[] = "sync_user@example.org"; + + FakeSigninAs(kPrimaryAccountEmail, signin::ConsentLevel::kSync); + SetSyncingPasswords(false); + + // Create a new filter that uses a null SyncService. + filter_ = std::make_unique<SyncCredentialsFilter>( + client_.get(), base::BindRepeating([]() -> const syncer::SyncService* { + return nullptr; + })); + + // Some scenarios behave differently based on whether or not the feature + // toggle is enabled. + // TODO(crbug.com/1499837): Revisit if these differences are desirable. + const bool passwords_account_storage_enabled = + base::FeatureList::IsEnabled(features::kEnablePasswordsAccountStorage); + + // Non-Gaia forms should always offer saving. + EXPECT_TRUE(filter_->ShouldSave(SimpleNonGaiaForm(kPrimaryAccountEmail))); + EXPECT_TRUE(filter_->ShouldSave(SimpleNonGaiaForm(""))); + + // See comments inside ShouldSave() for the justification. + const PasswordForm simple_gaia_form = + SimpleGaiaForm("non_sync_user@example.org"); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + EXPECT_TRUE(filter_->ShouldSave(simple_gaia_form)); + EXPECT_EQ(filter_->ShouldSave(SimpleGaiaForm("")), + passwords_account_storage_enabled); + EXPECT_EQ(filter_->ShouldSave(SimpleGAIAChangePasswordForm()), + passwords_account_storage_enabled); + EXPECT_TRUE(filter_->ShouldSave(SimpleGaiaForm(kPrimaryAccountEmail))); +#else // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + EXPECT_EQ(filter_->ShouldSave(simple_gaia_form), + !passwords_account_storage_enabled); + EXPECT_FALSE(filter_->ShouldSave(SimpleGaiaForm(""))); + EXPECT_FALSE(filter_->ShouldSave(SimpleGAIAChangePasswordForm())); + EXPECT_EQ(filter_->ShouldSave(SimpleGaiaForm(kPrimaryAccountEmail)), + !passwords_account_storage_enabled); +#endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + + EXPECT_TRUE(filter_->ShouldSave( + SimpleForm("https://subdomain.google.com/", kPrimaryAccountEmail))); + + EXPECT_EQ( + filter_->ShouldSave(SimpleForm("https://subdomain.google.com/", "")), + passwords_account_storage_enabled); } TEST_P(CredentialsFilterTest, ShouldSave_SyncFeatureOnWithPasswordsEnabled) {
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/intent/IsReadyToPayServiceHelper.java b/components/payments/content/android/java/src/org/chromium/components/payments/intent/IsReadyToPayServiceHelper.java index 6423b03..ef4ce9e 100644 --- a/components/payments/content/android/java/src/org/chromium/components/payments/intent/IsReadyToPayServiceHelper.java +++ b/components/payments/content/android/java/src/org/chromium/components/payments/intent/IsReadyToPayServiceHelper.java
@@ -143,8 +143,6 @@ @Override public void handleIsReadyToPay(boolean isReadyToPay) throws RemoteException { if (mResultHandler == null) return; - RecordHistogram.recordBooleanHistogram( - "PaymentRequest.EventResponse.IsReadyToPay", isReadyToPay); mResultHandler.onIsReadyToPayServiceResponse(isReadyToPay); mResultHandler = null; destroy();
diff --git a/components/permissions/permission_request.cc b/components/permissions/permission_request.cc index 0e46a9e..824a151 100644 --- a/components/permissions/permission_request.cc +++ b/components/permissions/permission_request.cc
@@ -260,6 +260,12 @@ // Handled by an override in `RegisterProtocolHandlerPermissionRequest`. NOTREACHED(); return std::u16string(); +#if BUILDFLAG(IS_CHROMEOS) + case RequestType::kSmartCard: + // Handled by an override in `SmartCardPermissionRequest`. + NOTREACHED(); + return std::u16string(); +#endif case RequestType::kStorageAccess: case RequestType::kTopLevelStorageAccess: message_id = IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT;
diff --git a/components/permissions/permission_uma_util.cc b/components/permissions/permission_uma_util.cc index d7ec2d6c..94e1b89b 100644 --- a/components/permissions/permission_uma_util.cc +++ b/components/permissions/permission_uma_util.cc
@@ -116,6 +116,10 @@ case RequestType::kRegisterProtocolHandler: return RequestTypeForUma::REGISTER_PROTOCOL_HANDLER; #endif +#if BUILDFLAG(IS_CHROMEOS) + case RequestType::kSmartCard: + return RequestTypeForUma::PERMISSION_SMART_CARD; +#endif case RequestType::kStorageAccess: return RequestTypeForUma::PERMISSION_STORAGE_ACCESS; case RequestType::kVrSession: @@ -189,6 +193,8 @@ return "FileSystemAccess"; case RequestTypeForUma::CAPTURED_SURFACE_CONTROL: return "CapturedSurfaceControl"; + case RequestTypeForUma::PERMISSION_SMART_CARD: + return "SmartCard"; case RequestTypeForUma::UNKNOWN: case RequestTypeForUma::PERMISSION_FLASH: @@ -1228,6 +1234,10 @@ base::UmaHistogramEnumeration("Permissions.Action.CapturedSurfaceControl", action, PermissionAction::NUM); break; + case ContentSettingsType::SMART_CARD_DATA: + base::UmaHistogramEnumeration("Permissions.Action.SmartCard", action, + PermissionAction::NUM); + break; // The user is not prompted for these permissions, thus there is no // permission action recorded for them. default:
diff --git a/components/permissions/permission_uma_util.h b/components/permissions/permission_uma_util.h index 4309629a..287437c 100644 --- a/components/permissions/permission_uma_util.h +++ b/components/permissions/permission_uma_util.h
@@ -42,7 +42,8 @@ // 1) The PermissionRequestType enum in tools/metrics/histograms/enums.xml. // 2) The PermissionRequestTypes suffix list in // tools/metrics/histograms/metadata/histogram_suffixes_list.xml. -// 3) GetPermissionRequestString below. +// 3) GetPermissionRequestString function in +// components/permissions/permission_uma_util.cc // // The usual rules of updating UMA values applies to this enum: // - don't remove values @@ -83,6 +84,7 @@ PERMISSION_MIDI = 31, PERMISSION_FILE_SYSTEM_ACCESS = 32, CAPTURED_SURFACE_CONTROL = 33, + PERMISSION_SMART_CARD = 34, // NUM must be the last value in the enum. NUM };
diff --git a/components/permissions/permission_util.cc b/components/permissions/permission_util.cc index c869e79..fc66ec2 100644 --- a/components/permissions/permission_util.cc +++ b/components/permissions/permission_util.cc
@@ -164,6 +164,9 @@ case ContentSettingsType::AR: *out = PermissionType::AR; break; + case ContentSettingsType::SMART_CARD_DATA: + *out = PermissionType::SMART_CARD; + break; case ContentSettingsType::STORAGE_ACCESS: *out = PermissionType::STORAGE_ACCESS_GRANT; break; @@ -213,6 +216,7 @@ case ContentSettingsType::BLUETOOTH_SCANNING: case ContentSettingsType::FILE_SYSTEM_WRITE_GUARD: case ContentSettingsType::HID_GUARD: + case ContentSettingsType::SMART_CARD_GUARD: return true; default: return false; @@ -224,6 +228,7 @@ case ContentSettingsType::GEOLOCATION: case ContentSettingsType::MEDIASTREAM_MIC: case ContentSettingsType::MEDIASTREAM_CAMERA: + case ContentSettingsType::SMART_CARD_DATA: return base::FeatureList::IsEnabled( permissions::features::kOneTimePermission); default: @@ -309,6 +314,8 @@ return ContentSettingsType::VR; case PermissionType::AR: return ContentSettingsType::AR; + case PermissionType::SMART_CARD: + return ContentSettingsType::SMART_CARD_DATA; case PermissionType::STORAGE_ACCESS_GRANT: return ContentSettingsType::STORAGE_ACCESS; case PermissionType::TOP_LEVEL_STORAGE_ACCESS:
diff --git a/components/permissions/request_type.cc b/components/permissions/request_type.cc index 1bfd3e81..241d6c20 100644 --- a/components/permissions/request_type.cc +++ b/components/permissions/request_type.cc
@@ -126,6 +126,12 @@ #endif case RequestType::kRegisterProtocolHandler: return vector_icons::kProtocolHandlerIcon; +#if BUILDFLAG(IS_CHROMEOS) + case RequestType::kSmartCard: + // TODO(crbug.com/1503624): Use a proper smart card icon. + return cr23 ? vector_icons::kDevicesChromeRefreshIcon + : vector_icons::kDevicesIcon; +#endif case RequestType::kStorageAccess: case RequestType::kTopLevelStorageAccess: if (base::FeatureList::IsEnabled( @@ -254,6 +260,10 @@ case ContentSettingsType::FILE_SYSTEM_WRITE_GUARD: return RequestType::kFileSystemAccess; #endif +#if BUILDFLAG(IS_CHROMEOS) + case ContentSettingsType::SMART_CARD_DATA: + return RequestType::kSmartCard; +#endif default: return absl::nullopt; } @@ -314,6 +324,10 @@ case RequestType::kProtectedMediaIdentifier: return ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER; #endif +#if BUILDFLAG(IS_CHROMEOS) + case RequestType::kSmartCard: + return ContentSettingsType::SMART_CARD_DATA; +#endif case RequestType::kStorageAccess: return ContentSettingsType::STORAGE_ACCESS; case RequestType::kVrSession: @@ -418,6 +432,10 @@ case permissions::RequestType::kRegisterProtocolHandler: return "register_protocol_handler"; #endif +#if BUILDFLAG(IS_CHROMEOS) + case RequestType::kSmartCard: + return "smart_card"; +#endif case permissions::RequestType::kStorageAccess: return "storage_access"; case permissions::RequestType::kTopLevelStorageAccess:
diff --git a/components/permissions/request_type.h b/components/permissions/request_type.h index 665a5b2..118b53f 100644 --- a/components/permissions/request_type.h +++ b/components/permissions/request_type.h
@@ -54,6 +54,9 @@ #if !BUILDFLAG(IS_ANDROID) kRegisterProtocolHandler, #endif +#if BUILDFLAG(IS_CHROMEOS) + kSmartCard, +#endif kStorageAccess, kVrSession, #if !BUILDFLAG(IS_ANDROID)
diff --git a/components/permissions_strings.grdp b/components/permissions_strings.grdp index a387711..8538d4c 100644 --- a/components/permissions_strings.grdp +++ b/components/permissions_strings.grdp
@@ -341,6 +341,11 @@ Embedded content not allowed </message> </if> + <if expr="is_chromeos"> + <message name="IDS_SMART_CARD_PERMISSION_PROMPT" desc="Text on dialog that asks the user for permission to access a smart card reader device and the card inserted in it (or presented to it, if contactless)."> + Control <ph name="ReaderName">$1<ex>HID Omnikey</ex></ph> and gain access to the smart card accessible to it? + </message> + </if> <!-- Quota messages --> <if expr="is_android">
diff --git a/components/permissions_strings_grdp/IDS_SMART_CARD_PERMISSION_PROMPT.png.sha1 b/components/permissions_strings_grdp/IDS_SMART_CARD_PERMISSION_PROMPT.png.sha1 new file mode 100644 index 0000000..b504d85e --- /dev/null +++ b/components/permissions_strings_grdp/IDS_SMART_CARD_PERMISSION_PROMPT.png.sha1
@@ -0,0 +1 @@ +867df8149907fdd937ec80f6c78f9becec1071c5 \ No newline at end of file
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 7b139de..1ca1bca8 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -2330,6 +2330,7 @@ <translation id="2896434627453256512">Definir a política para ativar o recurso de janela fantasma. Se a política for definida como "true" (verdadeira), janelas fantasma do ARC serão criadas antes da inicialização do ARC após uma falha ou reinicialização com base na configuração de restauração do app. Se a política for definida como "false" (falsa), nenhuma janela fantasma será criada antes da inicialização do ARC. Apps do ARC serão restaurados após a inicialização dele</translation> +<translation id="2897716186959852329">Nunca permitir a leitura em voz alta</translation> <translation id="2899002520262095963">Os apps Android podem usar as configurações de rede e os certificados de CA definidos por esta política, mas não têm acesso a algumas opções de configuração.</translation> <translation id="2899213072616346687">Restringe modo de impressão de gráficos em segundo plano. Se esta política não for definida, não haverá restrição.</translation> <translation id="2899640611559504158">Desativar acesso à linha de comando de máquinas virtuais</translation> @@ -3481,6 +3482,7 @@ <translation id="3799417300383048419">Manter os dados do perfil no disco quando a sessão do usuário terminar</translation> <translation id="3799436555130241393">Sincronização de arquivos <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3803171355925844705">Não permitir que nenhum site carregue conteúdo misto</translation> +<translation id="3806742563417418191">Permitir a pesquisa de plano de fundo</translation> <translation id="3808945828600697669">Especificar uma lista de plug-ins desativados</translation> <translation id="3810642039169532482">Ativar o recurso de acessibilidade de ditado na tela de login. @@ -5822,6 +5824,7 @@ <translation id="5775235485119094648">Carregar a bateria enquanto ela estiver dentro de um intervalo fixo.</translation> <translation id="5776485039795852974">Perguntar cada vez que um site quiser exibir notificações da área de trabalho</translation> <translation id="5783009211970309878">Imprimir cabeçalhos e rodapés</translation> +<translation id="5786938041290515154">Permitir a pesquisa de plano de fundo sem gerar registros</translation> <translation id="5790763087505467169">Reduzir notificações de lançamento automático para sessões de visitante gerenciadas</translation> <translation id="5800329278018669527">Desativar a solicitação de configuração de rede quando estiver off-line</translation> <translation id="5802931736499687181">Desativar o pipeline de geração de relatórios criptografados</translation> @@ -6013,6 +6016,7 @@ <translation id="596523880465577341">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="EXTENSION_INSTALL_ALLOWLIST_POLICY_NAME" />.</translation> <translation id="5966615072639944554">Extensões que podem usar a API de declaração remota</translation> <translation id="596732417280023843">O nome do perfil de certificado.</translation> +<translation id="597036930083735628">Desativar a pesquisa de plano de fundo</translation> <translation id="5972538402066550344">Permitir controles de geração de relatórios granulares</translation> <translation id="5975765799383881158">Se a política for definida como "Ativada" ou não for definida, os usuários poderão enviar feedback ao Google em "Menu > Ajuda > Informar um problema" ou usando uma combinação de teclas. @@ -7063,6 +7067,7 @@ Se a política for ativada, os sites poderão usar os SharedArrayBuffers sem restrições. Se ela for desativada ou deixada sem definição, os sites só poderão usar os SharedArrayBuffers em isolamento de origem cruzada.</translation> +<translation id="6734397897213913438">Sempre permitir a leitura em voz alta</translation> <translation id="6735701345096330595">Forçar a ativação da correção ortográfica de idiomas</translation> <translation id="6736283207617136584">Ativar relatórios sobre o status de atualização do SO do dispositivo</translation> <translation id="6739541168983991680">Automatizar o fluxo de <ph name="CLOUD_UPLOAD_NAME" /> para <ph name="MICROSOFT_ONE_DRIVE_NAME" /> e <ph name="MICROSOFT_365_NAME" /></translation> @@ -7926,6 +7931,11 @@ <translation id="7443356543619955157">Se a política for definida, será possível aplicar a configuração de rede para todos os usuários de um dispositivo <ph name="PRODUCT_OS_NAME" />. A configuração de rede é uma string formatada em JSON, conforme definido pelo formato Open Network Configuration.</translation> <translation id="7446978687387327623">Permitir verificações em tempo real com o proxy da Navegação segura</translation> <translation id="7448430478749155471">Ativa o recurso "Selecionar para ouvir" na tela de login</translation> +<translation id="7455912144588577399">Se a política for definida como verdadeira, os usuários poderão ler páginas da +Web qualificadas em voz alta usando a conversão de texto em voz. Isso é possível graças à síntese de áudio e +à destilação de conteúdo do lado do servidor. Se for definida como falsa, +esse recurso será desativado. Se definida como padrão ou deixada sem definição, +a leitura em voz alta será ativada.</translation> <translation id="7456922722153109956">Esta política controla a visibilidade do aviso abaixo da caixa de pesquisa na página "Nova guia". Se a política estiver definida como Ativada, a página "Nova guia" vai mostrar o aviso abaixo da caixa de pesquisa, caso esteja disponível. @@ -9457,6 +9467,7 @@ o esquema https.</translation> <translation id="8715885991031124968">Permitir caixas de diálogo de JavaScript acionadas por um subframe de origem diferente.</translation> <translation id="8720547069538712402">Permitir que o usuário ative ou desative a verificação ortográfica</translation> +<translation id="8721685661759544418">Ativar a leitura em voz alta (destilação de texto e síntese de conversão de texto em voz) para páginas da Web</translation> <translation id="8726080977639508431">Esta política controla como o <ph name="PRODUCT_NAME" /> interpreta políticas de lista de sites/lista cinza no recurso Suporte a navegadores legados. Ela afeta as políticas <ph name="URL_LIST_POLICY_NAME" />, <ph name="URL_GREYLIST_POLICY_NAME" />, <ph name="USE_IE_SITELIST_POLICY_NAME" />, <ph name="EXTERNAL_SITELIST_POLICY_NAME" /> e <ph name="EXTERNAL_GREYLIST_POLICY_NAME" />. Se ela for definida como "Default" (0) ou for deixada sem definição, a correspondência de URL será menos rigorosa. Regras que não tiverem "/" procurarão uma substring em qualquer lugar no nome do host do URL. A correspondência do componente de caminho de um URL diferencia maiúsculas de minúsculas.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 121de2d7..c9dd10c 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -2287,6 +2287,7 @@ <translation id="2896434627453256512">Đặt chính sách này để bật tính năng cửa sổ ảo. Nếu bạn bật chính sách này, thì hệ thống sẽ tạo cửa sổ ảo ARC trước lúc ARC khởi động sau khi gặp sự cố hoặc khởi động lại dựa trên chế độ cài đặt khôi phục ứng dụng. Nếu bạn tắt chính sách này, thì hệ thống sẽ không tạo cửa sổ ảo trước khi ARC khởi động. Ứng dụng ARC được khôi phục sau khi ARC khởi động</translation> +<translation id="2897716186959852329">Không bao giờ cho phép đọc to</translation> <translation id="2899002520262095963">Các ứng dụng Android có thể sử dụng cấu hình mạng và chứng chỉ CA được đặt qua chính sách này nhưng không có quyền truy cập vào một số tùy chọn cấu hình.</translation> <translation id="2899213072616346687">Hạn chế chế độ in đồ họa nền. Khi bạn không đặt chính sách này, thì tức là không có hạn chế.</translation> <translation id="2899640611559504158">Tắt quyền truy cập vào dòng lệnh của máy ảo</translation> @@ -3441,6 +3442,7 @@ <translation id="3799417300383048419">Lưu trữ dữ liệu hồ sơ trên ổ đĩa khi phiên người dùng kết thúc</translation> <translation id="3799436555130241393">Đồng bộ hoá tệp <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3803171355925844705">Không cho phép bất kỳ trang web nào tải nội dung hỗn hợp</translation> +<translation id="3806742563417418191">Cho phép tìm kiếm hình nền</translation> <translation id="3808945828600697669">Chỉ định danh sách các plugin bị vô hiệu hóa</translation> <translation id="3810642039169532482">Bật tính năng hỗ trợ tiếp cận về đọc chính tả trên màn hình đăng nhập. @@ -5773,6 +5775,7 @@ <translation id="5775235485119094648">Sạc pin khi thiết bị ở trong phạm vi cố định.</translation> <translation id="5776485039795852974">Hỏi mỗi lần trang web muốn hiển thị thông báo trên màn hình</translation> <translation id="5783009211970309878">In đầu trang và chân trang</translation> +<translation id="5786938041290515154">Cho phép tìm kiếm hình nền mà không ghi nhật ký</translation> <translation id="5790763087505467169">Hạn chế các thông báo tự động chạy phiên khách được quản lý</translation> <translation id="5800329278018669527">Tắt lời nhắc định cấu hình mạng khi không có kết nối mạng</translation> <translation id="5802931736499687181">Tắt quy trình báo cáo đã mã hoá</translation> @@ -5964,6 +5967,7 @@ <translation id="596523880465577341">Chính sách này không còn được dùng nữa và không được hỗ trợ, vui lòng dùng chính sách "<ph name="EXTENSION_INSTALL_ALLOWLIST_POLICY_NAME" />".</translation> <translation id="5966615072639944554">Tiện ích được phép sử dụng API chứng thực từ xa</translation> <translation id="596732417280023843">Tên của hồ sơ chứng chỉ.</translation> +<translation id="597036930083735628">Tắt tính năng tìm kiếm hình nền</translation> <translation id="5972538402066550344">Cho phép các biện pháp kiểm soát báo cáo chi tiết</translation> <translation id="5975765799383881158">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì người dùng có thể gửi ý kiến phản hồi cho Google thông qua Trình đơn > Trợ giúp > Báo cáo vấn đề hoặc tổ hợp phím. @@ -6989,6 +6993,7 @@ Khi bạn đặt chính sách này thành Bật, các trang web có thể sử dụng SharedArrayBuffer mà không có hạn chế. Khi bạn tắt hoặc không đặt chính sách này, các trang web chỉ có thể sử dụng SharedArrayBuffers khi bị tách biệt nhiều nguồn gốc.</translation> +<translation id="6734397897213913438">Luôn cho phép đọc to</translation> <translation id="6735701345096330595">Buộc bật tính năng kiểm tra chính tả ngôn ngữ</translation> <translation id="6736283207617136584">Bật tính năng báo cáo trạng thái cập nhật hệ điều hành của thiết bị</translation> <translation id="6739541168983991680">Tự động hoá quy trình <ph name="CLOUD_UPLOAD_NAME" /> cho <ph name="MICROSOFT_ONE_DRIVE_NAME" /> và <ph name="MICROSOFT_365_NAME" /></translation> @@ -7848,6 +7853,10 @@ <translation id="7443356543619955157">Nếu bạn đặt chính sách này, cấu hình mạng sẽ được đẩy cho tất cả người dùng thiết bị <ph name="PRODUCT_OS_NAME" />. Cấu hình mạng là một chuỗi có định dạng JSON như được xác định trong định dạng Cấu hình mạng mở.</translation> <translation id="7446978687387327623">Cho phép kiểm tra theo thời gian thực qua proxy của tính năng Duyệt web an toàn</translation> <translation id="7448430478749155471">Bật tính năng chọn để nói trên màn hình đăng nhập</translation> +<translation id="7455912144588577399">Nếu bạn đặt chính sách này thành đúng thì hệ thống sẽ cho phép đọc to các trang +web đủ điều kiện bằng tính năng chuyển văn bản sang lời nói. Tính năng lọc nội dung và tổng hợp âm thanh phía máy chủ giúp thực hiện điều này. Nếu bạn đặt thành sai +thì hệ thống sẽ tắt tính năng này. Nếu bạn đặt chính sách này thành mặc định hoặc không đặt +thì hệ thống sẽ bật tính năng đọc to.</translation> <translation id="7456922722153109956">Chính sách này kiểm soát cách thức xuất hiện của thông báo giữa trang trên trang Thẻ mới. Nếu bạn đặt chính sách này thành Bật, thông báo giữa trang sẽ xuất hiện trên trang Thẻ mới nếu có. @@ -9357,6 +9366,7 @@ giao thức https.</translation> <translation id="8715885991031124968">Cho phép các hộp thoại JavaScript được kích hoạt từ một khung phụ có nguồn gốc khác.</translation> <translation id="8720547069538712402">Cho phép người dùng bật hoặc tắt tùy chọn kiểm tra chính tả</translation> +<translation id="8721685661759544418">Bật tính năng đọc to (lọc văn bản và tổng hợp nội dung chuyển văn bản sang lời nói) cho trang web</translation> <translation id="8726080977639508431">Chính sách này kiểm soát cách <ph name="PRODUCT_NAME" /> diễn giải các chính sách danh sách trang web/danh sách xám cho tính năng Hỗ trợ trình duyệt cũ. Chính sách này sẽ ảnh hưởng đến những chính sách sau: <ph name="URL_LIST_POLICY_NAME" />, <ph name="URL_GREYLIST_POLICY_NAME" />, <ph name="USE_IE_SITELIST_POLICY_NAME" />, <ph name="EXTERNAL_SITELIST_POLICY_NAME" /> và <ph name="EXTERNAL_GREYLIST_POLICY_NAME" />. Nếu chính sách được đặt là "Mặc định" (0) hoặc không được đặt, thì tính năng so khớp URL sẽ bớt nghiêm ngặt hơn. Các quy tắc không chứa ký tự "/" sẽ tìm một chuỗi con ở vị trí bất kỳ trong tên máy chủ của URL. Tính năng so khớp thành phần đường dẫn của URL có phân biệt chữ hoa chữ thường.
diff --git a/components/resources/default_300_percent/google_chrome b/components/resources/default_300_percent/google_chrome index 05693a3b..964bb8e 160000 --- a/components/resources/default_300_percent/google_chrome +++ b/components/resources/default_300_percent/google_chrome
@@ -1 +1 @@ -Subproject commit 05693a3b542bca5bf9af6fe7057c07e52f68a477 +Subproject commit 964bb8e23a52f9ba63a53274ac6758e06ce7c7a3
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc index 93d83ac5..4655788 100644 --- a/components/safe_browsing/core/common/features.cc +++ b/components/safe_browsing/core/common/features.cc
@@ -303,7 +303,7 @@ BASE_FEATURE(kTailoredSecurityRetryForSyncUsers, "TailoredSecurityRetryForSyncUsers", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); #if BUILDFLAG(IS_ANDROID) BASE_FEATURE(kTailoredSecurityObserverRetries,
diff --git a/components/safe_browsing/core/common/proto/realtimeapi.proto b/components/safe_browsing/core/common/proto/realtimeapi.proto index 75b6a9e..50e9c873 100644 --- a/components/safe_browsing/core/common/proto/realtimeapi.proto +++ b/components/safe_browsing/core/common/proto/realtimeapi.proto
@@ -190,18 +190,34 @@ // Action for matched rule not implemented. reserved 4; + // This represents text segment in a custom message defined for DLP rule. + // For eg: “Please learn more (here)[link] and (here)[link]" + // is broken into 4 segments. + message CustomRuleMessageSegment { + // Required. Text to be displayed in this segment. + optional string text = 1; + + // Optional. Link to external resource, such as a company's communication + // policy. This is supposed to be hyperlink on text field above. + optional string link = 2; + } + message CustomMessage { // Custom message provided by admin during rule creation. Contains text // only. - optional string custom_message = 1; + optional string custom_message = 1 [deprecated = true]; // learn more link provided by admin during rule creation. Contains a single // URL. - optional string learn_more_link = 2; + optional string learn_more_link = 2 [deprecated = true]; // Custom message containing <a> tags wrapping URLs. This is sanitized HTML // restricted to <a> tags with "href" attribute. - optional string custom_message_with_links = 3; + optional string custom_message_with_links = 3 [deprecated = true]; + + // Ordered list of text segments comprised of plain text and URLs. These + // combined represent the custom rule message. + repeated CustomRuleMessageSegment message_segments = 4; } // Contains custom interstitial message associated with this rule. optional CustomMessage custom_message = 5;
diff --git a/components/search_engines/site_search_policy_handler.cc b/components/search_engines/site_search_policy_handler.cc index 5ca43896..cc860e8 100644 --- a/components/search_engines/site_search_policy_handler.cc +++ b/components/search_engines/site_search_policy_handler.cc
@@ -66,6 +66,7 @@ dict.Set(DefaultSearchManager::kCreatedByPolicy, static_cast<int>(TemplateURLData::CreatedByPolicy::kSiteSearch)); dict.Set(DefaultSearchManager::kEnforcedByPolicy, false); + dict.Set(DefaultSearchManager::kIsActive, true); // TODO(b/307543761): Create a new field `featured_by_policy` and setting // according to the corresponding dictionary field.
diff --git a/components/search_engines/site_search_policy_handler_unittest.cc b/components/search_engines/site_search_policy_handler_unittest.cc index a30402a..f627a3d 100644 --- a/components/search_engines/site_search_policy_handler_unittest.cc +++ b/components/search_engines/site_search_policy_handler_unittest.cc
@@ -284,6 +284,7 @@ DefaultSearchManager::kCreatedByPolicy, static_cast<int>(TemplateURLData::CreatedByPolicy::kSiteSearch)), HasBooleanField(DefaultSearchManager::kEnforcedByPolicy, false), + HasBooleanField(DefaultSearchManager::kIsActive, true), HasStringField(DefaultSearchManager::kFaviconURL, test_case.favicon), HasBooleanField(DefaultSearchManager::kSafeForAutoReplace, false), HasDoubleField(DefaultSearchManager::kDateCreated),
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 62bea9df..327e1c2 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">ክስተት አዘጋጅ</translation> <translation id="1634828734222219955">ጠቅላላ</translation> <translation id="163669211644121865">የግብር ዝግጅት እና ዕቅድ</translation> +<translation id="163826442096818926">ማሳጠር</translation> <translation id="1639239467298939599">በመጫን ላይ</translation> <translation id="1640180200866533862">የተጠቃሚ መምሪያዎች</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />የጣቢያውን መነሻ ገፅ ለመጎብኘት<ph name="END_LINK" /> ይሞክሩ።</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">ድር ጣቢያ</translation> <translation id="2385809941344967209">ከእርስዎ የChrome ቅንብሮች ሆነው Chromeን ያዘምኑ</translation> <translation id="2386255080630008482">የአገልጋይ እውቅና ማረጋገጫ ተሽሯል።</translation> +<translation id="239203817277685015">አብራራ</translation> <translation id="239293030466334554">ጣራቸው ክፍት የሚሆኑ መኪናዎች</translation> <translation id="2392959068659972793">ምንም እሴት ያልተዋቀረላቸው መምሪያዎችን አሳይ</translation> <translation id="239429038616798445">ይህ የመላኪያ ዘዴ አይገኝም። የተለየ ዘዴ ይሞክሩ።</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019"><ph name="PROTOCOL" /> አገናኞችን ክፈት</translation> <translation id="2941878205777356567">9 x 12 ኢንች ፖስታ</translation> <translation id="2941952326391522266">ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ሊያረጋግጥ አልቻለም፤ የደህንነት እውቅና ማረጋገጫው በ<ph name="DOMAIN2" /> ነው የተሰጠው። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል።</translation> +<translation id="2942492342931589800">የተለመደ</translation> <translation id="2942515540157583425">የአይቲ እና የቴክኒክ ስራዎች</translation> <translation id="2943895734390379394">የሰቀላ ጊዜ፦</translation> <translation id="2945026002409061480">መስመር ላይ ማኀበረሰቦች</translation> @@ -1218,6 +1221,7 @@ <translation id="3432601291244612633">ገፅ ይዝጉ</translation> <translation id="3433111389595862568">የትብብር እና ጉባዔ የማድረግ ሶፍትዌር</translation> <translation id="3433144818443565002">የድምጽ እና ቪድዮ ውይይት</translation> +<translation id="3434025015623587566">Google የይለፍ ቃል አስተዳዳሪ ተጨማሪ መዳረሻ ያስፈልገዋል</translation> <translation id="343474037147570563">እርስዎ የሚሰቅሏቸው ወይም ዓባሪ የሚያደርጓቸው ፋይሎች ለትንታኔ ወደ Google ደመና ወይም ሦስተኛ ወገኖች ይላካሉ። ለምሳሌ፣ አደጋ ሊያስከትል ለሚችል ውሂብ ወይም ለተንኮል አዘል ዌር ሊቃኙ ይችላሉ እና በኩባንያ መመሪያ መሠረት ሊከማቹ እና ለአስተዳዳሪዎ የሚታዩ ሊሆኑ ይችላሉ።</translation> <translation id="3435557549311968410">ቀጣይነት ያለው (አጭር)</translation> <translation id="3435738964857648380">የደህንነት ጥበቃ</translation> @@ -1230,6 +1234,7 @@ <translation id="3447661539832366887">የዚህ መሣሪያ ባለቤት የዳይኖሰር ጨዋታውን አጥፍቶታል።</translation> <translation id="3447884698081792621">የእውቅና ማረጋገጫን አሳይ (በ<ph name="ISSUER" /> የሚሰጥ)</translation> <translation id="3450323514459570273">የእርስዎን MIDI መሣሪያዎች ለመቆጣጠር እና እንደገና ፕሮግራም ለማድረግ መጠየቅ ይችላል</translation> +<translation id="3452151267620065789">ሂደቱ ተቀምጧል</translation> <translation id="3452404311384756672">የሚመጣው በየ፦</translation> <translation id="3453962258458347894">የዳግም ሙከራዎች ብዛት</translation> <translation id="3461266716147554923"><ph name="URL" /> ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሑፍን እና ምስሎችን መመልከት ይፈልጋል</translation> @@ -1313,6 +1318,7 @@ <translation id="361438452008624280">የዝርዝር ግቤት «<ph name="LANGUAGE_ID" />»፦ ያልታወቀ ወይም የማይደገፍ ቋንቋ።</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ በChrome ቅንብሮች ውስጥ የደህንነት ፍተሻን ለማሄድ ትርን ከዚያ አስገባን ይጫኑ</translation> <translation id="3615309852743236517">የወንድ ጥፍር ሥራ እና የሴት ጥፍር ሥራ</translation> +<translation id="3617072447978270288">ዓድስ</translation> <translation id="3620239073311576716">ዩኒፎርም እና የስራ ልብስ</translation> <translation id="36224234498066874">የአሰሳ ውሂብ አስወግድ…</translation> <translation id="362276910939193118">ሙሉ ታሪክ አሳይ</translation> @@ -1335,6 +1341,7 @@ <translation id="3650594806107685466">የእርስዎን ካርድ ደህንነት ለማስጠበቅ እንዲያግዝ፣ በ<ph name="SIDE_OF_CARD" /> ላይ የካርድ ማረጋገጫ ኮዱን ያስገቡ</translation> <translation id="3650917416636556301">የእግር ጉዞ እና ካምፕ ማድረግ</translation> <translation id="3653033846669030038">የመዝናኛ ፓርኮች</translation> +<translation id="3654980960391973513">አመንጭ</translation> <translation id="3655241534245626312">ወደ የፈቃድ ቅንብሮች ሂድ</translation> <translation id="3655670868607891010">ይህንን በተደጋጋሚነት የሚያዩ ከሆኑ <ph name="HELP_LINK" />ን ይሞክሩ።</translation> <translation id="365641980390710834">የአዘቦት ቀን አልባሳት</translation> @@ -1967,6 +1974,7 @@ <translation id="4918221908152712722"><ph name="APP_NAME" />ን ይጫኑ (ምንም ማውረድ አያስፈልግም)</translation> <translation id="4920457992177678649">የሽርሽር ኪራዮች እና የአጭር ጊዜ ቆይታዎች</translation> <translation id="4920710383559189047">መሸፈኛ</translation> +<translation id="4922104989726031751">ከስርዓተ ክወናዎ ጋር የይለፍ ቃል አስተዳዳሪን ለመጠቀም Chromiumን ዳግም ያስጀምሩ እና የኮምፒውተርዎን ይለፍ ቃል አቀናባሪ የመግቢያ ፍቃድ ይስጡ። ዳግም ከጀመረ በኋላ ትሮችዎ እንደገና ይከፈታሉ።</translation> <translation id="4923459931733593730">ክፍያ</translation> <translation id="4926049483395192435">መገለጽ አለበት።</translation> <translation id="4926159001844873046"><ph name="SITE" /> እንዲህ ይላል፦</translation> @@ -2570,6 +2578,7 @@ <translation id="6157754950574419155">ሁሉንም ከታሪክ ያስወግዱ</translation> <translation id="6157877588268064908">የመላኪያ ዘዴዎችን እና መስፈርቶችን ለመመልከት አድራሻ ይምረጡ</translation> <translation id="6159554577634054750">የተባይ ቁጥጥር</translation> +<translation id="6159908896951210943">መደበኛ</translation> <translation id="6160391204859821737">የማስታወቂያ የግላዊነት ባህሪን ያብሩ</translation> <translation id="6165508094623778733">የበለጠ ለመረዳት</translation> <translation id="6167577165590485365">ለመጨረሻ ጊዜ ለማምጣት የተሞከረው፡-</translation> @@ -2607,6 +2616,7 @@ <translation id="6234122620015464377">ከእያንዳንዱ ሰነድ በኋላ ከርክም</translation> <translation id="6236290670123303279">ቅንብሮችን ያቀናብሩ</translation> <translation id="6240447795304464094">የGoogle Pay ዓርማ</translation> +<translation id="6240964651812394252">የGoogle የይለፍ ቃል አስተዳዳሪን ከስርዓተ ክወና ጋር ለመጠቀም Chromeን ዳግም ያስጀምሩ እና የኮምፒውተርዎን የይለፍ ቃል አስተዳዳሪ እንዲገቡ ፍቃድ ይስጡ። ዳግም ከጀመረ በኋላ ትሮችዎ እንደገና ይከፈታሉ።</translation> <translation id="6241121617266208201">የአስተያየት ጥቆማዎችን ደብቅ</translation> <translation id="624499991300733384">የህትመት ጥንቅር አገልግሎት</translation> <translation id="6251906504834538140">{0,plural, =1{ፋይል ከመንቀሳቀስ ታግዷል}one{<ph name="FILE_COUNT" /> ፋይል ከመንቀሳቀስ ታግዷል}other{<ph name="FILE_COUNT" /> ፋይሎች ከመንቀሳቀስ ታግደዋል}}</translation> @@ -2617,6 +2627,7 @@ <translation id="6263376278284652872"><ph name="DOMAIN" /> እልባቶች</translation> <translation id="6264376385120300461">ለማንኛውም አውርድ</translation> <translation id="6264485186158353794">ወደ አስተማማኝ ተመለስ</translation> +<translation id="6264636978858465832">የሚስጥር ቁልፍ አስተዳዳሪ ተጨማሪ መዳረሻ ያስፈልገዋል</translation> <translation id="6265794661083428563">የ<ph name="POLICY_NAME" /> መመሪያውን ይቅዱ</translation> <translation id="6266934640124581640">ፈዘዝ ያለ ውሃ አረንጓዴ ሰማያዊ</translation> <translation id="6270066318535733958">ጀልባ ቀዘፋ</translation> @@ -3215,6 +3226,7 @@ <translation id="7422347648202898039">መሰየሚያዎች (ደህንነት)</translation> <translation id="7423283032694727565">የኩኪዎች አዝራርን ያስተዳድሩ፣ በChrome ቅንብሮች ውስጥ ኩኪዎችዎን ለማስተዳደር ያግብሩ</translation> <translation id="7424421098814895617">የአድራሻ መሰረዝ አማራጭ ተመርጧል</translation> +<translation id="7425037327577270384">ለመጻፍ አግዘኝ</translation> <translation id="7427366580982928791">የልጅ በይነመረብ ደህንነት</translation> <translation id="7429429656042611765">አስፈጻሚ</translation> <translation id="7432774160230062882">Chromium የክፍያ መረጃዎን መሙላት እንዲችል እርስዎ መሆንዎን ያረጋግጡ።</translation> @@ -3281,6 +3293,7 @@ <translation id="7529884293139707752">በቤት ውስጥ ማስተማር</translation> <translation id="7534987659046836932">ሲ7 ፖስታ</translation> <translation id="7535087603100972091">እሴት</translation> +<translation id="753556296624075801">በGoogle የተጎላበተ</translation> <translation id="7537536606612762813">ግዴታ</translation> <translation id="7542995811387359312">ይህ ቅጽ ደህንነቱ የተጠበቀ ግንኙነት ስለማይጠቀም የክሬዲት ካርድ ራስ-መሙላት ተሰናክሏል።</translation> <translation id="7543525346216957623">የእርስዎን ወላጅ ይጠይቁ</translation> @@ -3464,6 +3477,7 @@ <translation id="7871445724586827387">የGoogle መለያ የይለፍ ቃልዎን ይለውጡ</translation> <translation id="7877007680666472091">የተጠበቁ የይዘት መታወቂያዎች</translation> <translation id="7878562273885520351">የእርስዎ ይለፍ ቃል ተሰርቆ ሊሆን ይችላል</translation> +<translation id="7878966190323222027">ለመቀጠል እንደገና ይክፈቱ</translation> <translation id="7880146494886811634">አድራሻን ያስቀምጡ</translation> <translation id="7882421473871500483">ቡናማ</translation> <translation id="7882995332186050355">የጭነት መኪናዎች እና ተጎታቾች</translation> @@ -3994,6 +4008,7 @@ <translation id="8942355029279167844">የእርስዎ አስተዳዳሪ <ph name="APP_NAME" /> የምርቱን ተሞክሮ ለማሻሻል የምርመራዎች ውሂብ እንዲሰበስብ ፈቅዷል። ተጨማሪ መረጃ ለማግኘት <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" />ን ይመልከቱ።</translation> <translation id="8943282376843390568">ሎሚ ቀለም</translation> <translation id="8944485226638699751">የተወሰነ</translation> +<translation id="8949410982325929394">የድምፅ ቃና</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">ህግ እና መንግስት</translation> <translation id="8954252855949068147">አልባሳት</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index acef0d7..d36182d 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Арганізацыя мерапрыемстваў</translation> <translation id="1634828734222219955">Усяго</translation> <translation id="163669211644121865">Падрыхтоўка і планаванне падаткаў</translation> +<translation id="163826442096818926">Скараціць</translation> <translation id="1639239467298939599">Ідзе загрузка</translation> <translation id="1640180200866533862">Палітыкі карыстальніка</translation> <translation id="1640244768702815859">Паспрабуйце <ph name="BEGIN_LINK" />адкрыць галоўную старонку сайта<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Вэб-сайт</translation> <translation id="2385809941344967209">Абнавіць браўзер Chrome праз яго налады</translation> <translation id="2386255080630008482">Сертыфікат сервера адкліканы.</translation> +<translation id="239203817277685015">Дапоўніць</translation> <translation id="239293030466334554">Кабрыялеты</translation> <translation id="2392959068659972793">Паказваць палітыкі з незададзенымі значэннямі</translation> <translation id="239429038616798445">Гэты спосаб дастаўкі недаступны. Выберыце іншы спосаб.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Адкрыць спасылкі <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Канверт 9 x 12 цаляў</translation> <translation id="2941952326391522266">Серверу не ўдалося даказаць, што гэта <ph name="DOMAIN" />: яго сертыфікат бяспекі паходзіць з <ph name="DOMAIN2" />. Прычынай могуць быць няправільныя налады або зламыснік, які спрабуе перахапіць падключэнне.</translation> +<translation id="2942492342931589800">Нефармальны</translation> <translation id="2942515540157583425">Вакансіі ў сферы IT і тэхнікі</translation> <translation id="2943895734390379394">Час запампоўкі:</translation> <translation id="2945026002409061480">Анлайн-супольнасці</translation> @@ -1231,6 +1234,7 @@ <translation id="3447661539832366887">Уладальнік прылады выключыў гульню з дыназаўрам.</translation> <translation id="3447884698081792621">Паказаць сертыфікат (выдавец: <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Сайт можа запытваць дазвол на кіраванне прыладамі MIDI і іх перапраграмаванне</translation> +<translation id="3452151267620065789">Прагрэс захаваны</translation> <translation id="3452404311384756672">Інтэрвал атрымання даных:</translation> <translation id="3453962258458347894">Колькасць спроб</translation> <translation id="3461266716147554923">Сайт <ph name="URL" /> запытвае доступ на прагляд тэкстаў і відарысаў, скапіраваных у буфер абмену</translation> @@ -1313,6 +1317,7 @@ <translation id="361438452008624280">Элемент спіса "<ph name="LANGUAGE_ID" />": мова невядомая або не падтрымліваецца.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />. Каб выканаць праверку бяспекі ў наладах Chrome, націсніце Tab, затым Enter</translation> <translation id="3615309852743236517">Манікюр і педыкюр</translation> +<translation id="3617072447978270288">Згенерыраваць нанава</translation> <translation id="3620239073311576716">Уніформа і рабочае адзенне</translation> <translation id="36224234498066874">Выдаліць гісторыю...</translation> <translation id="362276910939193118">Паказаць усю гісторыю</translation> @@ -1335,6 +1340,7 @@ <translation id="3650594806107685466">У мэтах бяспекі ўвядзіце код CVC, які знаходзіцца на <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Пешы турызм і кемпінг</translation> <translation id="3653033846669030038">Паркі атракцыёнаў</translation> +<translation id="3654980960391973513">Згенерыраваць</translation> <translation id="3655241534245626312">Перайсці ў налады дазволаў</translation> <translation id="3655670868607891010">Калі вы часта бачыце гэта паведамленне, паспрабуйце наступнае: <ph name="HELP_LINK" />.</translation> <translation id="365641980390710834">Паўсядзённае адзенне</translation> @@ -2570,6 +2576,7 @@ <translation id="6157754950574419155">Выдаліць усе даныя з гісторыі</translation> <translation id="6157877588268064908">Выберыце адрас, каб убачыць спосабы дастаўкі і патрабаванні для дастаўкі</translation> <translation id="6159554577634054750">Барацьба са шкоднікамі</translation> +<translation id="6159908896951210943">Фармальны</translation> <translation id="6160391204859821737">Уключыце функцыю захавання прыватнасці ў рэкламе</translation> <translation id="6165508094623778733">Даведацца больш</translation> <translation id="6167577165590485365">Апошняя спроба атрымання:</translation> @@ -3216,6 +3223,7 @@ <translation id="7422347648202898039">Этыкетачны матэрыял з паўперманентным клеем і ахоўнымі функцыямі</translation> <translation id="7423283032694727565">Кнопка "Кіраваць файламі cookie". Каб кіраваць параметрамі файлаў cookie праз налады Chrome, націсніце яе.</translation> <translation id="7424421098814895617">Выбраны варыянт "Выдаліць адрас"</translation> +<translation id="7425037327577270384">Дапамога з напісаннем</translation> <translation id="7427366580982928791">Бяспека дзяцей у інтэрнэце</translation> <translation id="7429429656042611765">Executive</translation> <translation id="7432774160230062882">Пацвердзіце сваю асобу, каб запоўніць плацежную інфармацыю ў Chromium.</translation> @@ -3282,6 +3290,7 @@ <translation id="7529884293139707752">Дамашняе навучанне</translation> <translation id="7534987659046836932">Канверт C7</translation> <translation id="7535087603100972091">Значэнне</translation> +<translation id="753556296624075801">Тэхналогіі Google</translation> <translation id="7537536606612762813">Абавязкова</translation> <translation id="7542995811387359312">Аўтаматычнае запаўненне даных крэдытных картак выключана, бо гэта форма не выкарыстоўвае бяспечнае падключэнне.</translation> <translation id="7543525346216957623">Папрасі дазволу ў бацькоў</translation> @@ -3465,6 +3474,7 @@ <translation id="7871445724586827387">Змяніць пароль Уліковага запісу Google</translation> <translation id="7877007680666472091">ідэнтыфікатары абароненага змесціва</translation> <translation id="7878562273885520351">Ваш пароль можа быць раскрыты</translation> +<translation id="7878966190323222027">Каб працягнуць, адкрыйце зноў</translation> <translation id="7880146494886811634">Захаваць адрас</translation> <translation id="7882421473871500483">Карычневы</translation> <translation id="7882995332186050355">Грузавыя аўтамабілі і прычэпы</translation> @@ -3994,6 +4004,7 @@ <translation id="8942355029279167844">Адміністратар дазволіў праграме "<ph name="APP_NAME" />" збіраць даныя дыягностыкі дзеля ўдасканалення работы прадукту. Дадатковая інфармацыя – па спасылцы <ph name="BEGIN_LINK" /> https://www.parallels.com/pcep<ph name="END_LINK" />.</translation> <translation id="8943282376843390568">Лайм</translation> <translation id="8944485226638699751">Абмежаваны</translation> +<translation id="8949410982325929394">Тон</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Закон і ўрад</translation> <translation id="8954252855949068147">Адзенне і аксесуары</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index a9c82d38..96809b9 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -375,7 +375,7 @@ <translation id="168693727862418163">No s'ha pogut validar el valor d'aquesta política comparant-lo amb l'esquema i, per tant, s'ignorarà.</translation> <translation id="168841957122794586">El certificat de servidor conté una clau criptogràfica dèbil.</translation> <translation id="1689333818294560261">Àlies</translation> -<translation id="1697430960030447570"><ph name="BEGIN_BOLD" />Com pots gestionar les teves dades<ph name="END_BOLD" />: Chrome suprimeix automàticament els temes que tenen més de 4 setmanes. A mesura que continuïs navegant, és possible que reaparegui un tema a la llista. També pots bloquejar els temes que no vulguis que Chrome comparteixi amb els llocs web i desactivar els temes d'anuncis en qualsevol moment a la configuració de Chrome.</translation> +<translation id="1697430960030447570"><ph name="BEGIN_BOLD" />Com pots gestionar les teves dades<ph name="END_BOLD" />: Chrome suprimeix automàticament els temes que tenen més de 4 setmanes. A mesura que continuïs navegant, és possible que reaparegui un tema a la llista. També pots bloquejar els temes que no vulguis que Chrome comparteixi amb els llocs web i desactivar els temes d'anunci en qualsevol moment a la configuració de Chrome.</translation> <translation id="1697532407822776718">Tot a punt!</translation> <translation id="1699651774646344471">Ara pots utilitzar les adreces del teu Compte de Google</translation> <translation id="1700542542921501212">Pots utilitzar <ph name="SEARCH_ENGINE_NAME" /> per fer cerques al web.</translation> @@ -1170,7 +1170,7 @@ <translation id="3339440062908617027">Caminar i córrer</translation> <translation id="3339446062576134663">Al núvol (Ash)</translation> <translation id="3340978935015468852">configuració</translation> -<translation id="3342018947887487892">Més tard, un lloc web que visitis pot demanar aquesta informació, ja siguin els temes d'anuncis o els anuncis suggerits pels llocs web que has visitat.</translation> +<translation id="3342018947887487892">Més tard, un lloc web que visitis pot demanar aquesta informació, ja siguin els temes d'anunci o els anuncis suggerits pels llocs web que has visitat.</translation> <translation id="3342366525167526994">Art corporal</translation> <translation id="334438173029876234">Equipament per a patinatge de monopatí</translation> <translation id="3349952286488694786">SRA2</translation> @@ -1587,7 +1587,7 @@ <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> element més}other{<ph name="ITEM_COUNT" /> elements més}}</translation> <translation id="4176463684765177261">Desactivat</translation> <translation id="4176535426287761656">Aprofitament per torns i propietats vacacionals</translation> -<translation id="4177501066905053472">Temes d'anuncis</translation> +<translation id="4177501066905053472">Temes d'anunci</translation> <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation> <translation id="4186035307311647330">Deixa de seguir el preu</translation> <translation id="4191334393248735295">Llargada</translation> @@ -1756,7 +1756,7 @@ <translation id="4490717597759821841">A7</translation> <translation id="449126573531210296">Encripta contrasenyes sincronitzades amb el teu Compte de Google</translation> <translation id="4493480324863638523">L'URL no és vàlid. Ha de tenir un esquema estàndard, com ara "http://example.com" o "https://example.com".</translation> -<translation id="4494323206460475851">Pots veure els temes d'anuncis a la configuració i bloquejar els que no vulguis que es comparteixin amb els llocs web. Chrome també suprimeix automàticament els temes d'anuncis que tenen més de 4 setmanes.</translation> +<translation id="4494323206460475851">Pots veure els temes d'anunci a la configuració i bloquejar els que no vulguis que es comparteixin amb els llocs web. Chrome també suprimeix automàticament els temes d'anunci que tenen més de 4 setmanes.</translation> <translation id="4500587658229086076">contingut no segur</translation> <translation id="4506176782989081258">Error de validació: <ph name="VALIDATION_ERROR" /></translation> <translation id="4506599922270137252">Contacteu amb l'administrador del sistema</translation> @@ -2712,7 +2712,7 @@ <translation id="6429267199680088961">A4 Tab</translation> <translation id="643051589346665201">Canvia la contrasenya de Google</translation> <translation id="6431119592588449664">L'informe s'ha penjat</translation> -<translation id="6432297414176614592">Més informació sobre els temes d'anuncis</translation> +<translation id="6432297414176614592">Més informació sobre els temes d'anunci</translation> <translation id="6432831586648556868">Feines del sector de les vendes i del màrqueting</translation> <translation id="6433490469411711332">Edita la informació de contacte</translation> <translation id="6433501201775827830">Tria el motor de cerca</translation> @@ -3009,7 +3009,7 @@ <translation id="7016992613359344582">Aquests càrrecs poden ser únics o periòdics i és possible que no s'indiquin d'una manera evident.</translation> <translation id="701757816833614688">Formació d'arts visuals i disseny</translation> <translation id="702146556168549005">Els URL de les pàgines que visites s'envien a Google Cloud o a tercers perquè s'analitzin. Per exemple, pot ser que s'analitzin per detectar llocs web no segurs o que filtrin els llocs web en funció de les regles que hagi establert l'administrador.</translation> -<translation id="702275896380648118">Aquest lloc web determina les coses que t'agraden i, a continuació, suggereix anuncis a altres llocs web. També obté de Chrome els teus temes d'anuncis per mostrar-te anuncis més rellevants.</translation> +<translation id="702275896380648118">Aquest lloc web determina les coses que t'agraden i, a continuació, suggereix anuncis a altres llocs web. També obté de Chrome els teus temes d'anunci per mostrar-te anuncis més rellevants.</translation> <translation id="7023162328967545559">Advertiment d'administrador</translation> <translation id="7024932305105294144">Chrome té funcions de seguretat integrades per protegir-te mentre navegues, com ara Navegació segura de Google, que <ph name="BEGIN_LINK" />recentment ha trobat pesca de credencials<ph name="END_LINK" /> al lloc web que proves de visitar. Els llocs web de pesca de credencials es fan passar per altres llocs web per enganyar-te.<ph name="NEW_LINE" />De vegades, alguns atacants poden posar en perill llocs web que acostumen a ser segurs. Si creus que hi ha hagut un error i que aquest lloc web no suposa cap perill, <ph name="BEGIN_ERROR_LINK" />fes-nos-ho saber<ph name="END_ERROR_LINK" />.</translation> <translation id="7029809446516969842">Contrasenyes</translation> @@ -3804,7 +3804,7 @@ <translation id="8536234749087605613">Sobre (finestra)</translation> <translation id="8539500321752640291">Vols concedir els dos permisos?</translation> <translation id="8541158209346794904">Dispositiu Bluetooth</translation> -<translation id="8541410041357371550">Aquest lloc web obté de Chrome els teus temes d'anuncis per mostrar-te anuncis més rellevants</translation> +<translation id="8541410041357371550">Aquest lloc web obté de Chrome els teus temes d'anunci per mostrar-te anuncis més rellevants</translation> <translation id="8541579497401304453">Connecta amb una empresa iniciant una trucada telefònica.</translation> <translation id="8542014550340843547">Grapat triple a la part inferior</translation> <translation id="8542617028204211143">SRA0</translation> @@ -3843,7 +3843,7 @@ <translation id="8601027005147870853"><ph name="BEGIN_BOLD" />Quines dades s'utilitzen<ph name="END_BOLD" />: la teva activitat en un lloc web que visites amb Chrome en aquest dispositiu.</translation> <translation id="8601456038554914806">Equipament d'esports aquàtics</translation> <translation id="8606726445206553943">Utilitzar els dispositius MIDI</translation> -<translation id="8606988009912891950">Els temes d'anuncis ajuden els llocs web a mostrar-te anuncis rellevants i, alhora, protegeixen el teu historial de navegació i la teva identitat. Chrome pot prendre nota dels temes d'interès basant-se en el teu historial de navegació recent. Després, un lloc web que visitis pot demanar temes rellevants a Chrome per personalitzar els anuncis que veus.</translation> +<translation id="8606988009912891950">Els temes d'anunci ajuden els llocs web a mostrar-te anuncis rellevants i, alhora, protegeixen el teu historial de navegació i la teva identitat. Chrome pot prendre nota dels temes d'interès basant-se en el teu historial de navegació recent. Després, un lloc web que visitis pot demanar temes rellevants a Chrome per personalitzar els anuncis que veus.</translation> <translation id="8617269623452051934">l'ús que fas del dispositiu</translation> <translation id="861775596732816396">Mida 4</translation> <translation id="8620276786115098679">Sobre Kaku 7</translation> @@ -4143,7 +4143,7 @@ <translation id="934634059306213385">Vols permetre que l'aplicació <ph name="APP_NAME" /> configuri xarxes Wi‐Fi?</translation> <translation id="936602727769022409">Podries perdre l'accés al Compte de Google. Chromium et recomana que canviïs la contrasenya ara. Se't demanarà que iniciïs la sessió.</translation> <translation id="937457230470581909">Zoològics, aquaris i reserves naturals</translation> -<translation id="937804173274050966"><ph name="BEGIN_BOLD" />Quines dades s'utilitzen<ph name="END_BOLD" />: els temes d'anuncis es basen en el teu historial de navegació recent, que és una llista dels llocs web que has visitat amb Chrome en aquest dispositiu.</translation> +<translation id="937804173274050966"><ph name="BEGIN_BOLD" />Quines dades s'utilitzen<ph name="END_BOLD" />: els temes d'anunci es basen en el teu historial de navegació recent, que és una llista dels llocs web que has visitat amb Chrome en aquest dispositiu.</translation> <translation id="939736085109172342">Carpeta nova</translation> <translation id="940053046584497293">Viatges i transport</translation> <translation id="944540589955480312">Utilitza les contrasenyes i les claus d'accés desades al teu Compte de Google</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 7c72d3d..a0570344 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -1219,6 +1219,7 @@ <translation id="3432601291244612633">Κλείσιμο σελίδας</translation> <translation id="3433111389595862568">Λογισμικό συνεργασίας και συνδιάσκεψης</translation> <translation id="3433144818443565002">Συνομιλία με φωνή και μέσω βίντεο</translation> +<translation id="3434025015623587566">Ο Διαχειριστής κωδικών πρόσβασης Google χρειάζεται περισσότερη πρόσβαση</translation> <translation id="343474037147570563">Τα αρχεία που ανεβάζετε ή επισυνάπτετε αποστέλλονται στο Google Cloud ή σε τρίτα μέρη για ανάλυση. Για παράδειγμα, ενδέχεται να σαρώνονται για ευαίσθητα δεδομένα ή κακόβουλα προγράμματα, μπορεί να αποθηκεύονται με βάση τις πολιτικές της εταιρείας και να είναι ορατά στον διαχειριστή σας.</translation> <translation id="3435557549311968410">Συνεχές (Μικρό)</translation> <translation id="3435738964857648380">Ασφάλεια</translation> @@ -1969,6 +1970,7 @@ <translation id="4918221908152712722">Εγκατάσταση εφαρμογής <ph name="APP_NAME" /> (δεν απαιτείται λήψη)</translation> <translation id="4920457992177678649">Ενοικιάσεις για διακοπές και βραχυπρόθεσμες διαμονές</translation> <translation id="4920710383559189047">Δίπλωση</translation> +<translation id="4922104989726031751">Για να χρησιμοποιήσετε τον Διαχειριστή κωδικών πρόσβασης με το λειτουργικό σύστημα, επανεκκινήστε το Chromium και επιτρέψτε την πρόσβαση στον διαχειριστή κωδικών πρόσβασης του υπολογιστή σας. Οι καρτέλες θα ανοίξουν ξανά μετά την επανεκκίνηση.</translation> <translation id="4923459931733593730">Πληρωμή</translation> <translation id="4926049483395192435">Πρέπει να καθοριστεί.</translation> <translation id="4926159001844873046">Ο ιστότοπος <ph name="SITE" /> λέει</translation> @@ -2609,6 +2611,7 @@ <translation id="6234122620015464377">Περικοπή μετά από κάθε έγγραφο</translation> <translation id="6236290670123303279">Διαχείριση Ρυθμίσεων</translation> <translation id="6240447795304464094">Λογότυπο Google Pay</translation> +<translation id="6240964651812394252">Για να χρησιμοποιήσετε τον Διαχειριστή κωδικών πρόσβασης Google με το λειτουργικό σύστημα, επανεκκινήστε το Chrome και επιτρέψτε την πρόσβαση στον διαχειριστή κωδικών πρόσβασης του υπολογιστή σας. Οι καρτέλες θα ανοίξουν ξανά μετά την επανεκκίνηση.</translation> <translation id="6241121617266208201">Απόκρυψη προτάσεων</translation> <translation id="624499991300733384">Υπηρεσία σύνθεσης εκτυπώσεων</translation> <translation id="6251906504834538140">{0,plural, =1{Η μετακίνηση του αρχείου αποκλείστηκε}other{Αποκλείστηκε η μετακίνηση <ph name="FILE_COUNT" /> αρχείων}}</translation> @@ -2619,6 +2622,7 @@ <translation id="6263376278284652872">Σελιδοδείκτες <ph name="DOMAIN" /></translation> <translation id="6264376385120300461">Να γίνει η λήψη ούτως ή άλλως</translation> <translation id="6264485186158353794">Πίσω στην ασφάλεια</translation> +<translation id="6264636978858465832">Ο Διαχειριστής κωδικών πρόσβασης χρειάζεται περισσότερη πρόσβαση</translation> <translation id="6265794661083428563">Αντιγραφή της τιμής της πολιτικής <ph name="POLICY_NAME" /></translation> <translation id="6266934640124581640">Ανοιχτό γαλαζοπράσινο</translation> <translation id="6270066318535733958">Tαξίδι με σκάφος</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 19e064ca..b4eef69 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -1219,6 +1219,7 @@ <translation id="3432601291244612633">Sule leht</translation> <translation id="3433111389595862568">Koostöö- ja konverentsitarkvara</translation> <translation id="3433144818443565002">Hääl- ja videovestlus</translation> +<translation id="3434025015623587566">Google'i paroolihaldur vajab laialdasemat juurdepääsu</translation> <translation id="343474037147570563">Teie üles laaditud või manustatud failid saadetakse Google Cloudi või kolmandatele osapooltele analüüsimiseks. Näiteks võidakse neid skannida tundlike andmete või pahavara tuvastamiseks, talletada teie ettevõtte eeskirjade alusel ja need võivad olla teie administraatorile nähtavad.</translation> <translation id="3435557549311968410">Pidev (lühike)</translation> <translation id="3435738964857648380">Turvalisus</translation> @@ -1968,6 +1969,7 @@ <translation id="4918221908152712722">Installige rakendus <ph name="APP_NAME" /> (allalaadimine pole vajalik)</translation> <translation id="4920457992177678649">Puhkemajutus ja lühiajaline üürimine</translation> <translation id="4920710383559189047">Ümbris</translation> +<translation id="4922104989726031751">Paroolihalduri kasutamiseks oma operatsioonisüsteemiga käivitage Chromium uuesti ja lubage juurdepääs oma arvuti paroolihaldurile. Pärast uuesti käivitamist avanevad teie vahelehed taas.</translation> <translation id="4923459931733593730">Makse</translation> <translation id="4926049483395192435">Tuleb määrata.</translation> <translation id="4926159001844873046"><ph name="SITE" /> ütleb</translation> @@ -2608,6 +2610,7 @@ <translation id="6234122620015464377">Kärbi pärast iga dokumenti</translation> <translation id="6236290670123303279">Halda seadeid</translation> <translation id="6240447795304464094">Google Pay logo</translation> +<translation id="6240964651812394252">Google'i paroolihalduri kasutamiseks oma operatsioonisüsteemiga käivitage Chrome uuesti ja lubage juurdepääs oma arvuti paroolihaldurile. Pärast uuesti käivitamist avanevad teie vahelehed taas.</translation> <translation id="6241121617266208201">Peida soovitused</translation> <translation id="624499991300733384">Prindi koostamisteenus</translation> <translation id="6251906504834538140">{0,plural, =1{Faili teisaldamine on blokeeritud}other{<ph name="FILE_COUNT" /> faili teisaldamine on blokeeritud}}</translation> @@ -2618,6 +2621,7 @@ <translation id="6263376278284652872">Domeeni <ph name="DOMAIN" /> järjehoidjad</translation> <translation id="6264376385120300461">Laadi ikkagi alla</translation> <translation id="6264485186158353794">Tagasi turvalisusse</translation> +<translation id="6264636978858465832">Paroolihaldur vajab laialdasemat juurdepääsu</translation> <translation id="6265794661083428563">Kopeeri reegli <ph name="POLICY_NAME" /> väärtus</translation> <translation id="6266934640124581640">Helesinakasroheline</translation> <translation id="6270066318535733958">Paadi- ja laevasõit</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index 8222f5a..1047d59c 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -1203,7 +1203,7 @@ <translation id="3399952811970034796">डिलीवरी का पता</translation> <translation id="3402261774528610252">इस साइट को लोड करने में इस्तेमाल हुआ कनेक्शन TLS 1.0 या TLS 1.1 का इस्तेमाल कर रहा है. ये वर्शन रोक दिए गए हैं और आने वाले समय में इन्हें बंद कर दिया जाएगा. बंद होने के बाद, उपयोगकर्ता इस साइट को लोड नहीं कर पाएंगे. सर्वर पर TLS 1.2 या इसके बाद का वर्शन चालू होना चाहिए.</translation> <translation id="3405664148539009465">फ़ॉन्ट को पसंद के मुताबिक बनाएं</translation> -<translation id="3407789382767355356">तीसरे पक्ष की सेवा के लिए साइन इन</translation> +<translation id="3407789382767355356">तीसरे पक्ष की मदद से साइन-इन</translation> <translation id="3409896703495473338">सुरक्षा की सेटिंग मैनेज करें</translation> <translation id="3414952576877147120">आकार:</translation> <translation id="341513675006332771">'Chrome Dino गेम खेलें' बटन, Chrome में Dino Run गेम खेलने के लिए इसे चालू करें</translation> @@ -1431,7 +1431,7 @@ <translation id="3823019343150397277">IBAN</translation> <translation id="3823402221513322552">आपके ब्राउज़र को <ph name="BROWSER_DOMAIN" /> मैनेज करता है और आपकी प्रोफ़ाइल को <ph name="PROFILE_DOMAIN" /> मैनेज करता है</translation> <translation id="382518646247711829">अगर आप प्रॉक्सी सर्वर का उपयोग करते हैं...</translation> -<translation id="3826050100957962900">तीसरे पक्ष की सेवा के लिए साइन इन</translation> +<translation id="3826050100957962900">तीसरे पक्ष की मदद से साइन-इन</translation> <translation id="3827112369919217609">पूरा</translation> <translation id="3827666161959873541">पारिवारिक फ़िल्में</translation> <translation id="3828924085048779000">खाली 'पासफ़्रेज़' की अनुमति नहीं है.</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 1b9648c..9d9cade5 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -1206,7 +1206,7 @@ <translation id="3399952811970034796">Adresa za dostavu</translation> <translation id="3402261774528610252">Veza za učitavanje ove web-lokacije koristila je TLS 1.0 ili TLS 1.1, koji su obustavljeni i onemogućit će se. Nakon onemogućivanja korisnici neće moći učitati ovu web-lokaciju. Poslužitelj bi trebao omogućiti TLS 1.2 ili noviju verziju.</translation> <translation id="3405664148539009465">Prilagodi fontove</translation> -<translation id="3407789382767355356">prijava treće strane</translation> +<translation id="3407789382767355356">prijava putem treće strane</translation> <translation id="3409896703495473338">Upravljajte sigurnosnim postavkama</translation> <translation id="3414952576877147120">Veličina:</translation> <translation id="341513675006332771">Gumb Igraj igru s dinosaurom u Chromeu, aktivirajte ga da biste igrali igru Dino Run u Chromeu</translation> @@ -1436,7 +1436,7 @@ <translation id="3823019343150397277">IBAN</translation> <translation id="3823402221513322552">Vašim preglednikom upravlja <ph name="BROWSER_DOMAIN" />, a vašim profilom upravlja <ph name="PROFILE_DOMAIN" /></translation> <translation id="382518646247711829">Ako upotrebljavate proxy poslužitelj...</translation> -<translation id="3826050100957962900">Prijava za treće strane</translation> +<translation id="3826050100957962900">Prijava putem treće strane</translation> <translation id="3827112369919217609">Apsolutno</translation> <translation id="3827666161959873541">Obiteljski filmovi</translation> <translation id="3828924085048779000">Prazne zaporke nisu dopuštene.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index b380af4..874f8d2 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Eseménytervezés</translation> <translation id="1634828734222219955">Végösszeg</translation> <translation id="163669211644121865">Adóelőkészítés és -tervezés</translation> +<translation id="163826442096818926">Rövidítés</translation> <translation id="1639239467298939599">Betöltés</translation> <translation id="1640180200866533862">Felhasználói házirendek</translation> <translation id="1640244768702815859">Próbálja meg <ph name="BEGIN_LINK" />megnyitni a webhely főoldalát<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Webhely</translation> <translation id="2385809941344967209">A Chrome-ot a Chrome-beállítások között frissítheti</translation> <translation id="2386255080630008482">A szerver tanúsítványát visszavonták.</translation> +<translation id="239203817277685015">Részletesebb</translation> <translation id="239293030466334554">Nyitott és nyitható tetejű járművek</translation> <translation id="2392959068659972793">Beállított értékkel nem rendelkező házirendek megjelenítése</translation> <translation id="239429038616798445">Ez a szállítási mód nem áll rendelkezésre. Próbálkozzon másik móddal.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019"><ph name="PROTOCOL" /> linkek megnyitása</translation> <translation id="2941878205777356567">9 × 12 hüvelykes boríték</translation> <translation id="2941952326391522266">A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa a következőről származik: <ph name="DOMAIN2" />. Ennek oka lehet konfigurációs hiba, vagy hogy egy támadó eltérítette az Ön kapcsolódását.</translation> +<translation id="2942492342931589800">Általános</translation> <translation id="2942515540157583425">Informatikai és műszaki állások</translation> <translation id="2943895734390379394">Feltöltés ideje:</translation> <translation id="2945026002409061480">Online közösségek</translation> @@ -1229,6 +1232,7 @@ <translation id="3447661539832366887">Az eszköz tulajdonosa kikapcsolta a dinoszauruszos játékot.</translation> <translation id="3447884698081792621">Tanúsítvány megjelenítése (kibocsátó: <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Engedélyt kérhet a MIDI-eszközök vezérlésére és átprogramozására</translation> +<translation id="3452151267620065789">Előrehaladás mentve</translation> <translation id="3452404311384756672">Lekérési intervallum:</translation> <translation id="3453962258458347894">Újrapróbálkozások száma</translation> <translation id="3461266716147554923">A(z) <ph name="URL" /> webhely szeretné megtekinteni a vágólapra másolt szövegeket és képeket</translation> @@ -1312,6 +1316,7 @@ <translation id="361438452008624280">„<ph name="LANGUAGE_ID" />” listabejegyzés: Ismeretlen vagy nem támogatott nyelv.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />. Nyomja le a Tab, majd az Enter billentyűt a biztonsági ellenőrzés futtatásához a Chrome beállításaiban.</translation> <translation id="3615309852743236517">Manikűr és pedikűr</translation> +<translation id="3617072447978270288">Újragenerálás</translation> <translation id="3620239073311576716">Egyenruhák és munkaruhák</translation> <translation id="36224234498066874">Böngészési adatok törlése…</translation> <translation id="362276910939193118">Az összes előzmény</translation> @@ -1334,6 +1339,7 @@ <translation id="3650594806107685466">Kártyája biztonságának megőrzése érdekében adja meg a CVC-számot, amelyet itt talál: <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Túrázás és táborozás</translation> <translation id="3653033846669030038">Élményparkok</translation> +<translation id="3654980960391973513">Generálás</translation> <translation id="3655241534245626312">Nyissa meg az engedélyek beállításait</translation> <translation id="3655670868607891010">Ha gyakran látja ezt, próbálja ki a következőt: <ph name="HELP_LINK" />.</translation> <translation id="365641980390710834">Alkalmi viselet</translation> @@ -2569,6 +2575,7 @@ <translation id="6157754950574419155">Az összes eltávolítása az előzményekből</translation> <translation id="6157877588268064908">A szállítási módok és követelmények megtekintéséhez válassza ki a címet</translation> <translation id="6159554577634054750">Rovarirtás</translation> +<translation id="6159908896951210943">Hivatalos</translation> <translation id="6160391204859821737">Hirdetésekhez kapcsolódó adatvédelmi funkció bekapcsolása</translation> <translation id="6165508094623778733">További információ</translation> <translation id="6167577165590485365">Legutóbbi lekérési próbálkozás:</translation> @@ -3214,6 +3221,7 @@ <translation id="7422347648202898039">Címkék (biztonság)</translation> <translation id="7423283032694727565">Cookie-k kezelése gomb. A gombot megnyomva kezelheti a cookie-beállításokat a Chrome-beállítások között.</translation> <translation id="7424421098814895617">A „Cím törlése” lehetőség volt kiválasztva</translation> +<translation id="7425037327577270384">Segítség az íráshoz</translation> <translation id="7427366580982928791">Gyermekek internetes biztonsága</translation> <translation id="7429429656042611765">„Executive” méret</translation> <translation id="7432774160230062882">Igazolja személyazonosságát, hogy a Chromium kitölthesse a fizetési adatait.</translation> @@ -3280,6 +3288,7 @@ <translation id="7529884293139707752">Otthoni oktatás és magántanulás</translation> <translation id="7534987659046836932">C7 boríték</translation> <translation id="7535087603100972091">Érték</translation> +<translation id="753556296624075801">Üzemeltető: Google</translation> <translation id="7537536606612762813">Kötelező</translation> <translation id="7542995811387359312">Az automatikus bankkártya-kitöltés le van tiltva, mivel ez az űrlap nem biztonságos kapcsolatot használ.</translation> <translation id="7543525346216957623">Kérd a szülő segítségét</translation> @@ -3463,6 +3472,7 @@ <translation id="7871445724586827387">Google-fiók jelszavának módosítása</translation> <translation id="7877007680666472091">a védett tartalmak azonosítói</translation> <translation id="7878562273885520351">Előfordultat, hogy jelszava már nem biztonságos</translation> +<translation id="7878966190323222027">A folytatáshoz nyissa meg újra</translation> <translation id="7880146494886811634">Cím mentése</translation> <translation id="7882421473871500483">Barna</translation> <translation id="7882995332186050355">Áruszállító teherautók és kamionok</translation> @@ -3993,6 +4003,7 @@ <translation id="8942355029279167844">Rendszergazdája engedélyezte, hogy a(z) <ph name="APP_NAME" /> diagnosztikai adatokat gyűjtsön a felhasználói élmény javítása érdekében. További információt a következő oldalon találhat: <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" />.</translation> <translation id="8943282376843390568">Limezöld</translation> <translation id="8944485226638699751">Korlátozott</translation> +<translation id="8949410982325929394">Hangszín</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Jog és közigazgatás</translation> <translation id="8954252855949068147">Ruházat</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index d55b8e8..736970d9 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Viðburðastjórnun</translation> <translation id="1634828734222219955">Samtals</translation> <translation id="163669211644121865">Framtalsgerð og skattaáætlanir</translation> +<translation id="163826442096818926">Stytta</translation> <translation id="1639239467298939599">Hleður</translation> <translation id="1640180200866533862">Notendareglur</translation> <translation id="1640244768702815859">Prófaðu að <ph name="BEGIN_LINK" />fara á heimasíðu vefsvæðisins<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Vefsvæði</translation> <translation id="2385809941344967209">Uppfærðu Chrome í stillingum Chrome</translation> <translation id="2386255080630008482">Vottorð þjónsins hefur verið afturkallað.</translation> +<translation id="239203817277685015">Bæta meiru við</translation> <translation id="239293030466334554">Blæjubílar</translation> <translation id="2392959068659972793">Sýna reglur með engin gildi valin</translation> <translation id="239429038616798445">Þessi sendingarmáti er ekki í boði. Prófaðu annan sendingarmáta.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Opna tengla fyrir <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Umslag: 23 x 30 cm</translation> <translation id="2941952326391522266">Þessi þjónn gat ekki sannað að hann væri <ph name="DOMAIN" />; öryggisvottorð hans er frá <ph name="DOMAIN2" />. Þetta kann að orsakast af vanstillingu eða tölvuþrjóti sem komist hefur inn í tenginguna.</translation> +<translation id="2942492342931589800">Óformlegt</translation> <translation id="2942515540157583425">Störf innan tækni og upplýsingatækni</translation> <translation id="2943895734390379394">Tími sendingar:</translation> <translation id="2945026002409061480">Netsamfélög</translation> @@ -1231,6 +1234,7 @@ <translation id="3447661539832366887">Eigandi þessa tækis hefur slökkt á risaeðluleiknum.</translation> <translation id="3447884698081792621">Sýna vottorð (gefið út af <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Getur beðið um að stjórna og endurforrita MIDI-tækin þín</translation> +<translation id="3452151267620065789">Framvinda vistuð</translation> <translation id="3452404311384756672">Tími milli endurnýjunar:</translation> <translation id="3453962258458347894">Fjöldi aukatilrauna</translation> <translation id="3461266716147554923"><ph name="URL" /> vill sjá texta og myndir sem þú afritar á klippiborðið.</translation> @@ -1314,6 +1318,7 @@ <translation id="361438452008624280">Listafærslan „<ph name="LANGUAGE_ID" />“: Óþekkt eða óstutt tungumál.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, ýttu á dálkalykilinn (Tab) og svo Enter til að keyra öryggisathugun í stillingum Chrome</translation> <translation id="3615309852743236517">Hand- og fótsnyrtingar</translation> +<translation id="3617072447978270288">Endurnýja</translation> <translation id="3620239073311576716">Einkennisbúningar og vinnuföt</translation> <translation id="36224234498066874">Hreinsa vafragögn...</translation> <translation id="362276910939193118">Sýna feril í heild</translation> @@ -1336,6 +1341,7 @@ <translation id="3650594806107685466">Til að vernda kortið skaltu slá inn CVC-númerið á <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Gönguferðir og útilegur</translation> <translation id="3653033846669030038">Skemmtigarðar</translation> +<translation id="3654980960391973513">Búa til</translation> <translation id="3655241534245626312">Opna stillingar heimilda</translation> <translation id="3655670868607891010">Ef þú sérð þetta oft skaltu prófa þessar <ph name="HELP_LINK" />.</translation> <translation id="365641980390710834">Hversdagsklæðnaður</translation> @@ -2571,6 +2577,7 @@ <translation id="6157754950574419155">Fjarlægja allt úr ferli</translation> <translation id="6157877588268064908">Veldu heimilisfang til að sjá sendingarmáta og kröfur</translation> <translation id="6159554577634054750">Meindýravarnir</translation> +<translation id="6159908896951210943">Formlegt</translation> <translation id="6160391204859821737">Kveikja á persónuverndareiginleika auglýsinga</translation> <translation id="6165508094623778733">Frekari upplýsingar</translation> <translation id="6167577165590485365">Síðast reynt að sækja:</translation> @@ -3216,6 +3223,7 @@ <translation id="7422347648202898039">Merkimiðar (öryggis)</translation> <translation id="7423283032694727565">Hnappurinn „Stjórna fótsporum“, virkjaðu til að stjórna fótsporastillingum í stillingum Chrome</translation> <translation id="7424421098814895617">Valkosturinn eyða heimilisfangi var valinn</translation> +<translation id="7425037327577270384">Rithjálp</translation> <translation id="7427366580982928791">Netöryggi barna</translation> <translation id="7429429656042611765">Executive</translation> <translation id="7432774160230062882">Staðfestu hver þú ert svo Chromium geti fyllt út greiðsluupplýsingarnar þínar.</translation> @@ -3282,6 +3290,7 @@ <translation id="7529884293139707752">Heimakennsla</translation> <translation id="7534987659046836932">Umslag: C7</translation> <translation id="7535087603100972091">Gildi</translation> +<translation id="753556296624075801">Keyrt af Google</translation> <translation id="7537536606612762813">Áskilin</translation> <translation id="7542995811387359312">Sjálfvirk útfylling kreditkortaupplýsinga er óvirk vegna þess að eyðublaðið notast ekki við örugga tengingu.</translation> <translation id="7543525346216957623">Spyrðu foreldri þitt</translation> @@ -3465,6 +3474,7 @@ <translation id="7871445724586827387">Breyta aðgangsorði Google reikningsins þíns</translation> <translation id="7877007680666472091">kenni fyrir varið efni</translation> <translation id="7878562273885520351">Aðgangsorðinu þínu kann að hafa verið stolið</translation> +<translation id="7878966190323222027">Opnaðu aftur til að halda áfram</translation> <translation id="7880146494886811634">Vista heimilisfang</translation> <translation id="7882421473871500483">Brúnn</translation> <translation id="7882995332186050355">Flutningabílar og eftirvagnar</translation> @@ -3994,6 +4004,7 @@ <translation id="8942355029279167844">Kerfisstjórinn þinn hefur gefið <ph name="APP_NAME" /> heimild til að safna greiningargögnum til að bæta vöruna. Frekari upplýsingar eru á <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" />.</translation> <translation id="8943282376843390568">Límónugrænn</translation> <translation id="8944485226638699751">Takmarkað</translation> +<translation id="8949410982325929394">Tónn</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Lög og yfirvöld</translation> <translation id="8954252855949068147">Fatnaður</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index f55ce266..ec89bac 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -350,6 +350,7 @@ <translation id="1633941398432788136">ការរៀបចំគម្រោងព្រឹត្តិការណ៍</translation> <translation id="1634828734222219955">សរុប</translation> <translation id="163669211644121865">ការរៀបចំផែនការ និងការរៀបចំលិខិតប្រកាសពន្ធ</translation> +<translation id="163826442096818926">សង្ខេបខ្លី</translation> <translation id="1639239467298939599">កំពុងដំណើរការ</translation> <translation id="1640180200866533862">គោលការណ៍អ្នកប្រើ</translation> <translation id="1640244768702815859">សាកល្បង<ph name="BEGIN_LINK" />ចូលទៅកាន់ទំព័រដើមរបស់ទំព័រនេះ<ph name="END_LINK" />។</translation> @@ -726,6 +727,7 @@ <translation id="238459632961158867">គេហទំព័រ</translation> <translation id="2385809941344967209">ដំឡើងកំណែ Chrome ពីការកំណត់ Chrome របស់អ្នក</translation> <translation id="2386255080630008482">វិញ្ញាបនប័ត្រម៉ាស៊ីនមេត្រូវបានបញ្ឈប់សុពលភាព។</translation> +<translation id="239203817277685015">បរិយាយ</translation> <translation id="239293030466334554">យានជំនិះដែលអាចបិទបើកដំបូលបាន</translation> <translation id="2392959068659972793">បង្ហាញគោលការណ៍ដែលមិនកំណត់តម្លៃ</translation> <translation id="239429038616798445">មិនមានមធ្យោបាយដឹកជញ្ជូនតាមប្រៃសណីយ៍នេះទេ។ សូមសាកល្បងមធ្យោបាយផ្សេង។</translation> @@ -974,6 +976,7 @@ <translation id="2938225289965773019">បើកតំណ <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">ស្រោមសំបុត្រ 9 x 12 អ៊ីង</translation> <translation id="2941952326391522266">ម៉ាស៊ីនមេនេះមិនអាចបង្ហាញថាវាជា <ph name="DOMAIN" /> ទេ វិញ្ញាបនប័ត្រសុវត្ថិភាពរបស់វាមកពី <ph name="DOMAIN2" />។ នេះអាចបណ្តាលមកពីការកំណត់មិនត្រឹមត្រូវ ឬមានការស្ទាក់ការភ្ជាប់របស់អ្នកពីអ្នកវាយប្រហារ។</translation> +<translation id="2942492342931589800">ធម្មតា</translation> <translation id="2942515540157583425">ការងារផ្នែកបច្ចេកទេស និងព័ត៌មានវិទ្យា</translation> <translation id="2943895734390379394">ពេលវេលាបង្ហោះ៖</translation> <translation id="2945026002409061480">សហគមន៍នៅលើអ៊ីនធឺណិត</translation> @@ -1222,6 +1225,7 @@ <translation id="3432601291244612633">បិទទំព័រ</translation> <translation id="3433111389595862568">កម្មវិធីសម្រាប់ការសហការ និងការប្រជុំ</translation> <translation id="3433144818443565002">ការជជែកជាវីដេអូ និងសំឡេង</translation> +<translation id="3434025015623587566">កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ត្រូវការសិទ្ធិចូលប្រើប្រាស់បន្ថែមទៀត</translation> <translation id="343474037147570563">ឯកសារដែលអ្នកបង្ហោះ ឬភ្ជាប់ត្រូវបានផ្ញើទៅ Google Cloud ឬភាគីទីបីដើម្បីវិភាគ។ ឧទាហរណ៍ ឯកសារទាំងនោះអាចត្រូវបានស្កេន ដើម្បីរកមើលទិន្នន័យរសើប ឬកម្មវិធីគ្រោះថ្នាក់ និងអាចត្រូវបានរក្សាទុកដោយផ្អែកតាមគោលការណ៍របស់ក្រុមហ៊ុន ហើយអ្នកគ្រប់គ្រងរបស់អ្នកអាចមើលឃើញឯកសារទាំងនោះ។</translation> <translation id="3435557549311968410">បន្តបន្ទាប់ (ខាងខ្លី)</translation> <translation id="3435738964857648380">សុវត្ថិភាព</translation> @@ -1234,6 +1238,7 @@ <translation id="3447661539832366887">ម្ចាស់ឧបករណ៍នេះបានបិទហ្គេមដាយណូស័រ។</translation> <translation id="3447884698081792621">បង្ហាញវិញ្ញាបនបត្រ (ចេញដោយ <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">អាចស្នើសុំគ្រប់គ្រង និងសរសេរកម្មវិធីឧបករណ៍ MIDI របស់អ្នកឡើងវិញ</translation> +<translation id="3452151267620065789">បានរក្សាទុកដំណើរវិវឌ្ឍន៍</translation> <translation id="3452404311384756672">ចន្លោះពេលយកត្រលប់វិញ៖</translation> <translation id="3453962258458347894">ចំនួននៃការព្យាយាមម្ដងទៀត</translation> <translation id="3461266716147554923"><ph name="URL" /> ចង់មើលអត្ថបទ និងរូបភាពដែលបានចម្លងទៅអង្គចងចាំ</translation> @@ -1317,6 +1322,7 @@ <translation id="361438452008624280">ធាតុបញ្ជី "<ph name="LANGUAGE_ID" />"៖ មិនស្គាល់ភាសា។</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, ចុច Tab បន្ទាប់មក Enter ដើម្បីដំណើរការការពិនិត្យសុវត្ថិភាពនៅក្នុងការកំណត់ Chrome</translation> <translation id="3615309852743236517">ការធ្វើក្រចកដៃ និងក្រចកជើង</translation> +<translation id="3617072447978270288">បង្កើតឡើងវិញ</translation> <translation id="3620239073311576716">ឯកសណ្ឋាន និងសម្លៀកបំពាក់ធ្វើការ</translation> <translation id="36224234498066874">សម្អាតទិន្នន័យរុករក...</translation> <translation id="362276910939193118">បង្ហាញប្រវត្តិពេញលេញ</translation> @@ -1339,6 +1345,7 @@ <translation id="3650594806107685466">ដើម្បីជួយរក្សាកាតរបស់អ្នកឱ្យមានសុវត្ថិភាព សូមបញ្ចូល CVC ដែលស្ថិតនៅ<ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">ការដើរកាត់ព្រៃភ្នំ និងការបោះជំរំ</translation> <translation id="3653033846669030038">សួនកម្សាន្ត</translation> +<translation id="3654980960391973513">បង្កើត</translation> <translation id="3655241534245626312">ចូលទៅកាន់ការកំណត់ការអនុញ្ញាត</translation> <translation id="3655670868607891010">បើអ្នកឃើញវាជាប្រចាំ សាកល្បង <ph name="HELP_LINK" /> ទាំងនេះ។</translation> <translation id="365641980390710834">សម្លៀកបំពាក់ធម្មតា</translation> @@ -1972,6 +1979,7 @@ <translation id="4918221908152712722">ដំឡើង <ph name="APP_NAME" /> (មិនតម្រូវឱ្យទាញយកទេ)</translation> <translation id="4920457992177678649">កន្លែងជួលលំហែកាយ និងការស្នាក់នៅរយៈពេលខ្លី</translation> <translation id="4920710383559189047">ស្រោម</translation> +<translation id="4922104989726031751">ដើម្បីប្រើប្រាស់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ជាមួយនឹងប្រព័ន្ធប្រតិបត្តិការរបស់អ្នក សូមចាប់ផ្ដើម Chromium ឡើងវិញ និងអនុញ្ញាតឱ្យចូលប្រើប្រាស់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់របស់កុំព្យូទ័រអ្នក។ ផ្ទាំងរបស់អ្នកនឹងបើកឡើងវិញ បន្ទាប់ពីចាប់ផ្តើមឡើងវិញ។</translation> <translation id="4923459931733593730">ការបង់ប្រាក់</translation> <translation id="4926049483395192435">ត្រូវតែបញ្ជាក់</translation> <translation id="4926159001844873046"><ph name="SITE" /> និយាយថា</translation> @@ -2575,6 +2583,7 @@ <translation id="6157754950574419155">លុបទាំងអស់ចេញពីប្រវត្តិ</translation> <translation id="6157877588268064908">ដើម្បីមើលមធ្យោបាយ និងលក្ខខណ្ឌតម្រូវនៃការដឹកជញ្ជូនតាមប្រៃសណីយ៍ សូមជ្រើសរើសអាសយដ្ឋាន</translation> <translation id="6159554577634054750">ការគ្រប់គ្រងសត្វល្អិតចង្រៃ</translation> +<translation id="6159908896951210943">ផ្លូវការ</translation> <translation id="6160391204859821737">បើកមុខងារឯកជនភាពនៃការផ្សាយពាណិជ្ជកម្ម</translation> <translation id="6165508094623778733">ស្វែងយល់បន្ថែម</translation> <translation id="6167577165590485365">បានព្យាយាមទាញយកចុងក្រោយ៖</translation> @@ -2612,6 +2621,7 @@ <translation id="6234122620015464377">តម្រឹមបន្ទាប់ពីឯកសារនីមួយៗ</translation> <translation id="6236290670123303279">គ្រប់គ្រងការកំណត់</translation> <translation id="6240447795304464094">និមិត្តសញ្ញា Google Pay</translation> +<translation id="6240964651812394252">ដើម្បីប្រើប្រាស់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ជាមួយនឹងប្រព័ន្ធប្រតិបត្តិការរបស់អ្នក សូមចាប់ផ្ដើម Chrome ឡើងវិញ និងអនុញ្ញាតឱ្យចូលប្រើប្រាស់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់របស់កុំព្យូទ័រអ្នក។ ផ្ទាំងរបស់អ្នកនឹងបើកឡើងវិញ បន្ទាប់ពីចាប់ផ្តើមឡើងវិញ។</translation> <translation id="6241121617266208201">លាក់ការណែនាំ</translation> <translation id="624499991300733384">សេវាកម្មរៀបចំបោះពុម្ព</translation> <translation id="6251906504834538140">{0,plural, =1{បានទប់ស្កាត់មិនឱ្យផ្លាស់ទីឯកសារ}other{បានទប់ស្កាត់មិនឱ្យផ្លាស់ទីឯកសារ <ph name="FILE_COUNT" />}}</translation> @@ -2622,6 +2632,7 @@ <translation id="6263376278284652872"><ph name="DOMAIN" /> ចំណាំ</translation> <translation id="6264376385120300461">មិនអីទេ ទាញយកចុះ</translation> <translation id="6264485186158353794">ត្រលប់ទៅកន្លែងសុវត្ថិភាព</translation> +<translation id="6264636978858465832">កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ត្រូវការសិទ្ធិចូលប្រើប្រាស់បន្ថែមទៀត</translation> <translation id="6265794661083428563">ចម្លងតម្លៃគោលការណ៍ <ph name="POLICY_NAME" /></translation> <translation id="6266934640124581640">បៃតងស្រាល</translation> <translation id="6270066318535733958">ការជិះទូក</translation> @@ -3220,6 +3231,7 @@ <translation id="7422347648202898039">ស្លាក (សុវត្ថិភាព)</translation> <translation id="7423283032694727565">ប៊ូតុង "គ្រប់គ្រងខូគី", បើកដំណើរការ ដើម្បីគ្រប់គ្រងចំណូលចិត្តខូគីរបស់អ្នកនៅក្នុងការកំណត់ Chrome</translation> <translation id="7424421098814895617">ជម្រើសលុបអាសយដ្ឋានត្រូវបានជ្រើសរើស</translation> +<translation id="7425037327577270384">ជួយខ្ញុំក្នុងការសរសេរ</translation> <translation id="7427366580982928791">សុវត្ថិភាពនៃការប្រើប្រាស់អ៊ីនធឺណិតសម្រាប់កុមារ</translation> <translation id="7429429656042611765">Executive</translation> <translation id="7432774160230062882">ផ្ទៀងផ្ទាត់ថាជាអ្នក ដើម្បីឱ្យ Chromium អាចបំពេញព័ត៌មាននៃការទូទាត់ប្រាក់របស់អ្នកបាន។</translation> @@ -3286,6 +3298,7 @@ <translation id="7529884293139707752">ការអប់រំនៅផ្ទះ</translation> <translation id="7534987659046836932">ស្រោមសំបុត្រ C7</translation> <translation id="7535087603100972091">តម្លៃ</translation> +<translation id="753556296624075801">ដំណើរការដោយ Google</translation> <translation id="7537536606612762813">ចាំបាច់</translation> <translation id="7542995811387359312">ការបំពេញកាតឥណទានស្វ័យប្រវត្តិត្រូវបានបិទដំណើរការ ពីព្រោះបែបបទនេះមិនប្រើការភ្ជាប់ដែលមានសុវត្ថិភាពទេ។</translation> <translation id="7543525346216957623">សាកសួរមាតាបិតារបស់អ្នក</translation> @@ -3470,6 +3483,7 @@ <translation id="7871445724586827387">ប្ដូរពាក្យសម្ងាត់គណនី Google របស់អ្នក</translation> <translation id="7877007680666472091">លេខសម្គាល់ខ្លឹមសារដែលមានការការពារ</translation> <translation id="7878562273885520351">ពាក្យសម្ងាត់របស់អ្នកអាចត្រូវបានគេលួចប្រើ</translation> +<translation id="7878966190323222027">បើកឡើងវិញ ដើម្បីបន្ដ</translation> <translation id="7880146494886811634">រក្សាទុកអាសយដ្ឋាន</translation> <translation id="7882421473871500483">ត្នោត</translation> <translation id="7882995332186050355">រថយន្តដឹកទំនិញ និងរថយន្តសណ្ដោង</translation> @@ -4000,6 +4014,7 @@ <translation id="8942355029279167844">អ្នកគ្រប់គ្រងរបស់អ្នកបានអនុញ្ញាតឱ្យ <ph name="APP_NAME" /> ប្រមូលទិន្នន័យវិភាគ ដើម្បីកែលម្អបទពិសោធន៍ប្រើប្រាស់ផលិតផល។ សូមមើល <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" /> ដើម្បីទទួលបានព័ត៌មានបន្ថែម។</translation> <translation id="8943282376843390568">លឿងខ្ចី</translation> <translation id="8944485226638699751">មានកំណត់</translation> +<translation id="8949410982325929394">សម្ដីសំដៅ</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">ច្បាប់ និងរដ្ឋាភិបាល</translation> <translation id="8954252855949068147">សម្លៀកបំពាក់</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 0145b4b..22387a1 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Perancangan Acara</translation> <translation id="1634828734222219955">Jumlah</translation> <translation id="163669211644121865">Persediaan & perancangan cukai</translation> +<translation id="163826442096818926">Pendekkan</translation> <translation id="1639239467298939599">Memuatkan</translation> <translation id="1640180200866533862">Dasar pengguna</translation> <translation id="1640244768702815859">Cuba <ph name="BEGIN_LINK" />lawat laman utama tapak<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Laman web</translation> <translation id="2385809941344967209">Kemas kini Chrome daripada tetapan Chrome anda</translation> <translation id="2386255080630008482">Sijil pelayan telah dibatalkan.</translation> +<translation id="239203817277685015">Huraikan</translation> <translation id="239293030466334554">Boleh ubah</translation> <translation id="2392959068659972793">Paparkan dasar tanpa nilai yang ditetapkan</translation> <translation id="239429038616798445">Kaedah penghantaran ini tidak tersedia. Cuba kaedah lain.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Buka pautan <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Sampul 9 x 12 inci</translation> <translation id="2941952326391522266">Pelayan ini tidak dapat membuktikan bahawa domainnya ialah <ph name="DOMAIN" />; sijil keselamatannya adalah dari <ph name="DOMAIN2" />. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintasi sambungan anda.</translation> +<translation id="2942492342931589800">Kasual</translation> <translation id="2942515540157583425">Pekerjaan IT & Teknikal</translation> <translation id="2943895734390379394">Masa Muat Naik:</translation> <translation id="2945026002409061480">Komuniti dalam talian</translation> @@ -1232,6 +1235,7 @@ <translation id="3447661539832366887">Pemilik peranti ini telah mematikan permainan dinosaur.</translation> <translation id="3447884698081792621">Tunjukkan sijil (yang dikeluarkan oleh <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Boleh meminta untuk mengawal dan mengaturcara semula peranti MIDI anda</translation> +<translation id="3452151267620065789">Kemajuan disimpan</translation> <translation id="3452404311384756672">Selang masa ambil:</translation> <translation id="3453962258458347894">Bilangan cubaan semula</translation> <translation id="3461266716147554923"><ph name="URL" /> ingin melihat teks dan imej yang disalin ke papan keratan</translation> @@ -1315,6 +1319,7 @@ <translation id="361438452008624280">Masukan senarai "<ph name="LANGUAGE_ID" />": Bahasa tidak diketahui atau bahasa tidak disokong.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan Tab kemudian Enter untuk menjalankan semakan keselamatan dalam tetapan Chrome</translation> <translation id="3615309852743236517">Rawatan Kuku Tangan & Kaki</translation> +<translation id="3617072447978270288">Jana semula</translation> <translation id="3620239073311576716">Pakaian Seragam & Pakaian Kerja</translation> <translation id="36224234498066874">Kosongkan Data Semakan Imbas...</translation> <translation id="362276910939193118">Paparkan Sejarah Penuh</translation> @@ -1338,6 +1343,7 @@ <translation id="3650594806107685466">Untuk membantu memastikan kad anda selamat, masukkan CVC pada <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Kembara & Berkhemah</translation> <translation id="3653033846669030038">Taman tema</translation> +<translation id="3654980960391973513">Jana</translation> <translation id="3655241534245626312">Pergi ke tetapan kebenaran</translation> <translation id="3655670868607891010">Jika anda kerap melihatnya, cuba <ph name="HELP_LINK" /> ini.</translation> <translation id="365641980390710834">Pakaian Kasual</translation> @@ -2574,6 +2580,7 @@ <translation id="6157754950574419155">Alih keluar semua daripada sejarah</translation> <translation id="6157877588268064908">Pilih alamat untuk melihat kaedah dan syarat penghantaran</translation> <translation id="6159554577634054750">Kawalan Perosak</translation> +<translation id="6159908896951210943">Rasmi</translation> <translation id="6160391204859821737">Hidupkan ciri privasi iklan</translation> <translation id="6165508094623778733">Ketahui lebih lanjut</translation> <translation id="6167577165590485365">Percubaan pengambilan terakhir:</translation> @@ -3221,6 +3228,7 @@ <translation id="7422347648202898039">Label (Keselamatan)</translation> <translation id="7423283032694727565">Butang urus kuki, aktifkan untuk mengurus pilihan kuki anda dalam tetapan Chrome</translation> <translation id="7424421098814895617">Pilihan pemadaman alamat telah dipilih</translation> +<translation id="7425037327577270384">Bantu saya tulis</translation> <translation id="7427366580982928791">Keselamatan internet kanak-kanak</translation> <translation id="7429429656042611765">Eksekutif</translation> <translation id="7432774160230062882">Sahkan identiti anda supaya maklumat pembayaran anda boleh diisikan oleh Chromium.</translation> @@ -3287,6 +3295,7 @@ <translation id="7529884293139707752">Persekolahan di rumah</translation> <translation id="7534987659046836932">Sampul C7</translation> <translation id="7535087603100972091">Nilai</translation> +<translation id="753556296624075801">Dikuasakan oleh Google</translation> <translation id="7537536606612762813">Wajib</translation> <translation id="7542995811387359312">Pengisian kad kredit automatik dilumpuhkan kerana borang ini tidak menggunakan sambungan selamat.</translation> <translation id="7543525346216957623">Tanya ibu bapa anda</translation> @@ -3470,6 +3479,7 @@ <translation id="7871445724586827387">Tukar kata laluan Google Account anda</translation> <translation id="7877007680666472091">ID kandungan yang dilindungi</translation> <translation id="7878562273885520351">Kata laluan anda mungkin terjejas</translation> +<translation id="7878966190323222027">Buka semula untuk meneruskan</translation> <translation id="7880146494886811634">Simpan Alamat</translation> <translation id="7882421473871500483">Coklat</translation> <translation id="7882995332186050355">Lori kargo & treler</translation> @@ -4000,6 +4010,7 @@ <translation id="8942355029279167844">Pentadbir anda telah membenarkan <ph name="APP_NAME" /> untuk mengumpulkan data diagnostik untuk meningkatkan pengalaman produk. Lihat <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" /> untuk mendapatkan maklumat lanjut.</translation> <translation id="8943282376843390568">Hijau pucuk pisang</translation> <translation id="8944485226638699751">Terhad</translation> +<translation id="8949410982325929394">Nada</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Undang-undang & kerajaan</translation> <translation id="8954252855949068147">Pakaian</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index d4602ca6..eb3cb0a 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">ပွဲစီစဉ်ခြင်း</translation> <translation id="1634828734222219955">စုစုပေါင်း</translation> <translation id="163669211644121865">အခွန်ပြင်ဆင်ခြင်းနှင့် စီစဉ်ခြင်း</translation> +<translation id="163826442096818926">အတိုကောက်</translation> <translation id="1639239467298939599">တင်ပေးနေ</translation> <translation id="1640180200866533862">အသုံးပြုသူ မူဝါဒများ</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />ဆိုက်၏ ပင်မစာမျက်နှာသို့ သွားကြည့်ပါ<ph name="END_LINK" />။</translation> @@ -725,6 +726,7 @@ <translation id="238459632961158867">ဝဘ်ဆိုက်</translation> <translation id="2385809941344967209">သင့် Chrome ဆက်တင်များတွင် Chrome ကို အပ်ဒိတ်လုပ်ပါ</translation> <translation id="2386255080630008482">ဆာဗာ၏ လက်မှတ်မှာ ရုပ်သိမ်းခံခဲ့ရသည်။</translation> +<translation id="239203817277685015">အသေးစိတ်ရှင်းပြပါ</translation> <translation id="239293030466334554">အမိုးဖွင့်ကားများ</translation> <translation id="2392959068659972793">တန်ဖိုး သတ်မှတ်မထားသည့် မူဝါဒများ ပြရန်</translation> <translation id="239429038616798445">ဤပစ္စည်းပို့ခြင်းနည်းလမ်းသည် မရနိုင်ပါ။ အခြားနည်းလမ်းတစ်ခုကို ရွေးပါ။</translation> @@ -976,6 +978,7 @@ <translation id="2938225289965773019"><ph name="PROTOCOL" /> လင့်များ ဖွင့်ရန်</translation> <translation id="2941878205777356567">၉ x ၁၂ လက်မ စာအိတ်</translation> <translation id="2941952326391522266">ဒီဆာဗာက <ph name="DOMAIN" /> ဖြစ်တာကို သက်သေထူ မပြနိုင်ခဲ့ပါ၊ ၎င်း၏ လုံခြုံရေး လက်မှတ်မှာ<ph name="DOMAIN2" />ထံမှ ဖြစ်သည်။ ဖွဲ့စည်းစီစဉ်မှု အမှားကြောင့် သို့မဟုတ် တိုက်ခိုက်လိုသူက သင်၏ ချိတ်ဆက်မှုကို ကြားဖြတ်ယူနေ၍ ထိုသို့ ဖြစ်လာနိုင်ခဲ့ပါသည်။</translation> +<translation id="2942492342931589800">ပေါ့ပေါ့ပါးပါး</translation> <translation id="2942515540157583425">IT နှင့် နည်းပညာအလုပ်</translation> <translation id="2943895734390379394">အပ်လုဒ်လုပ်ချိန်-</translation> <translation id="2945026002409061480">အွန်လိုင်း ကွန်မြူနတီများ</translation> @@ -1221,6 +1224,7 @@ <translation id="3432601291244612633">စာမျက်နှာကို ပိတ်ရန်</translation> <translation id="3433111389595862568">ပူးတွဲထုတ်လုပ်ခြင်းနှင့် အစည်းအဝေးလုပ်ခြင်းဆိုင်ရာ ဆော့ဖ်ဝဲ</translation> <translation id="3433144818443565002">အသံနှင့် ဗီဒီယို ချတ်လုပ်ခြင်း</translation> +<translation id="3434025015623587566">Google Password Manager သည် သုံးခွင့်ထပ်လိုသည်</translation> <translation id="343474037147570563">သင်အပ်လုဒ်လုပ်သည့် (သို့) တွဲချိတ်သည့် ဖိုင်များကို စိတ်ဖြာလေ့လာရန် Google Cloud (သို့) ပြင်ပအဖွဲ့များသို့ ပို့သည်။ ဥပမာအားဖြင့် သတိထားရမည့်ဒေတာ (သို့) မဲလ်ဝဲ ရှာဖွေရန် ၎င်းတို့ကို စကင်ဖတ်ပြီး ကုမ္ပဏီမူဝါဒများအရ သိမ်းနိုင်၍ သင့်စီမံခန့်ခွဲသူက မြင်နိုင်ပါသည်။</translation> <translation id="3435557549311968410">ဆက်တိုက် (အတို)</translation> <translation id="3435738964857648380">လုံခြုံရေး</translation> @@ -1233,6 +1237,7 @@ <translation id="3447661539832366887">ဤကိရိယာ ပိုင်ရှင်သည် ဒိုင်နိုဆောဂိမ်းအား ပိတ်ထား၏။</translation> <translation id="3447884698081792621">အသိအမှတ်ပြုလက်မှတ်ကို ပြရန် (<ph name="ISSUER" /> က ထုတ်ပေးထားသည်)</translation> <translation id="3450323514459570273">သင့် MIDI စက်များကို ထိန်းချုပ်ရန်နှင့် ပရိုဂရမ်ပြန်လုပ်ရန် တောင်းဆိုနိုင်သည်</translation> +<translation id="3452151267620065789">တိုးတက်မှု သိမ်းထားသည်</translation> <translation id="3452404311384756672">ကြားကာလ ရယူရန်:</translation> <translation id="3453962258458347894">ပြန်စမ်းကြည့်သည့် အကြိမ်ရေ</translation> <translation id="3461266716147554923">ကလစ်ဘုတ်သို့ မိတ္တူကူးထားသည့် စာသားနှင့် ပုံများကို <ph name="URL" /> က ကြည့်လိုသည်</translation> @@ -1315,6 +1320,7 @@ <translation id="361438452008624280">"<ph name="LANGUAGE_ID" />" စာရင်းထည့်သွင်းမှု- အမျိုးအမည်မသိ သို့မဟုတ် ပံ့ပိုးမထားသော ဘာသာစကား။</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />၊ Chrome ဆက်တင်များတွင် လုံခြုံရေး စစ်ဆေးမှု လုပ်ဆောင်ရန် ‘တဘ်ခလုတ်’ ပြီးနောက် Enter နှိပ်ပါ</translation> <translation id="3615309852743236517">ခြေသည်း လက်သည်း သန့်ရှင်းရေး</translation> +<translation id="3617072447978270288">ပြန်လည်ထုတ်လုပ်ရန်</translation> <translation id="3620239073311576716">တူညီဝတ်စုံနှင့် လုပ်ငန်းခွင်ဝတ်စုံ</translation> <translation id="36224234498066874">ဘရောက်စ်ဒေတာ ရှင်းထုတ်ရန်...</translation> <translation id="362276910939193118">မှတ်တမ်း အပြည့် ပြရန်</translation> @@ -1336,6 +1342,7 @@ <translation id="3650594806107685466">သင့်ကတ် လုံခြုံမှုရှိစေရန် <ph name="SIDE_OF_CARD" /> ရှိ CVC နံပါတ်ထည့်ပါ</translation> <translation id="3650917416636556301">တောင်တက်ခြင်းနှင့် တဲထိုးစခန်းချခြင်း</translation> <translation id="3653033846669030038">အစီအစဉ်များခင်းကျင်းရာ အပန်းဖြေဥယျာဉ်</translation> +<translation id="3654980960391973513">ထုတ်ရန်</translation> <translation id="3655241534245626312">ခွင့်ပြုချက် ဆက်တင်များသို့ သွားရန်</translation> <translation id="3655670868607891010">သင်သည် ဒါကို မကြာခဏ မြင်နေရလျှင်၊ <ph name="HELP_LINK" />ဒါကို စမ်းကြည့်ပါ။</translation> <translation id="365641980390710834">ပေါ့ပေါ့ပါးပါး အဝတ်အစား</translation> @@ -1969,6 +1976,7 @@ <translation id="4918221908152712722"><ph name="APP_NAME" /> ကို ထည့်သွင်းပါ (ဒေါင်းလုဒ်လုပ်ရန် မလိုပါ)</translation> <translation id="4920457992177678649">အပန်းဖြေ အငှားအိမ်နှင့် ရေတိုတည်းခိုစရာ</translation> <translation id="4920710383559189047">စွပ်အိတ်</translation> +<translation id="4922104989726031751">သင်၏ လည်ပတ်သည့်စနစ်ဖြင့် Password Manager သုံးရန် Chromium ပြန်ဖွင့်ပြီး ကွန်ပျူတာ၏ စကားဝှက်မန်နေဂျာကို သုံးခွင့်ပြုပါ။ ပြန်ဖွင့်ပြီးနောက် သင့်တဘ်များ ပြန်ပွင့်ပါမည်။</translation> <translation id="4923459931733593730">ငွေပေးချေမှု</translation> <translation id="4926049483395192435">ဖေါ်ပြပေးရန် လိုသည်။</translation> <translation id="4926159001844873046"><ph name="SITE" /> က ဆိုထားသည်မှာ</translation> @@ -2571,6 +2579,7 @@ <translation id="6157754950574419155">မှတ်တမ်းမှ အားလုံးဖယ်ရှားရန်</translation> <translation id="6157877588268064908">ပစ္စည်းပို့ခြင်းနည်းလမ်းနှင့် သတ်မှတ်ချက်ချက်များကို ကြည့်ရန် လိပ်စာရွေးပါ</translation> <translation id="6159554577634054750">ဖျက်ပိုး နှိမ်နင်းခြင်း</translation> +<translation id="6159908896951210943">ရုံးသုံး</translation> <translation id="6160391204859821737">ကြော်ငြာဆိုင်ရာ အချက်အလက်လုံခြုံမှု အင်္ဂါရပ် ဖွင့်ရန်</translation> <translation id="6165508094623778733">ပိုမိုလေ့လာရန်</translation> <translation id="6167577165590485365">ရယူရန် နောက်ဆုံးကြိုးပမ်းချိန်-</translation> @@ -2608,6 +2617,7 @@ <translation id="6234122620015464377">မှတ်တမ်းတစ်ခုအပြီး ဖြတ်ထုတ်ရန်</translation> <translation id="6236290670123303279">ဆက်တင်များ စီမံခန့်ခွဲရန်</translation> <translation id="6240447795304464094">Google Pay အမှတ်တံဆိပ်</translation> +<translation id="6240964651812394252">သင်၏ လည်ပတ်သည့်စနစ်ဖြင့် Google Password Manager သုံးရန် Chrome ပြန်ဖွင့်ပြီး ကွန်ပျူတာ၏ စကားဝှက်မန်နေဂျာကို သုံးခွင့်ပြုပါ။ ပြန်ဖွင့်ပြီးနောက် သင့်တဘ်များ ပြန်ပွင့်ပါမည်။</translation> <translation id="6241121617266208201">အကြံပြုချက်များကို ဝှက်ရန်</translation> <translation id="624499991300733384">ပုံနှိပ်မှုဆိုင်ရာ ပြင်ဆင်ဖွဲ့စည်းသည့် ဝန်ဆောင်မှု</translation> <translation id="6251906504834538140">{0,plural, =1{ဖိုင်ကို ရွှေ့ခွင့် ပိတ်ထားသည်}other{ဖိုင် <ph name="FILE_COUNT" /> ဖိုင်ကို ရွှေ့ခွင့် ပိတ်ထားသည်}}</translation> @@ -2618,6 +2628,7 @@ <translation id="6263376278284652872"><ph name="DOMAIN" /> စာညှပ်များ</translation> <translation id="6264376385120300461">မည်သို့ပင်ဖြစ်စေ ဒေါင်းလုဒ်လုပ်ရန်</translation> <translation id="6264485186158353794">လုံခြုံရာ နောက်သို့</translation> +<translation id="6264636978858465832">Password Manager သည် သုံးခွင့်ထပ်လိုသည်</translation> <translation id="6265794661083428563"><ph name="POLICY_NAME" /> မူဝါဒ သတ်မှတ်ချက်ကို မိတ္တူကူးရန်</translation> <translation id="6266934640124581640">စိမ်းပြာဖျော့</translation> <translation id="6270066318535733958">လှေစီးခြင်း</translation> @@ -3217,6 +3228,7 @@ <translation id="7422347648202898039">လေဘယ်လ် (အစုရှယ်ယာလက်မှတ်)</translation> <translation id="7423283032694727565">Chrome ဆက်တင်များတွင် သင့်ကွတ်ကီးသတ်မှတ်ချက်များကို စီမံရန်အတွက် ‘ကွတ်ကီးစီမံရန်’ ခလုတ်ကို နှိပ်နိုင်သည်</translation> <translation id="7424421098814895617">‘လိပ်စာဖျက်ရန်’ ရွေးစရာကို ရွေးထားသည်</translation> +<translation id="7425037327577270384">ကူရေးပေးရန်</translation> <translation id="7427366580982928791">ကလေးအတွက် အင်တာနက်လုံခြုံမှု</translation> <translation id="7429429656042611765">အိတ်ဇက်ကူတစ်ဆိုဒ်</translation> <translation id="7432774160230062882">သင့်ငွေချေအချက်အလက်တွင် Chromium ကဖြည့်နိုင်ရန် သင်ဖြစ်ကြောင်း အတည်ပြုနေသည်။</translation> @@ -3283,6 +3295,7 @@ <translation id="7529884293139707752">အိမ်တွင်းစာသင်ကြားခြင်း</translation> <translation id="7534987659046836932">C7 စာအိတ်</translation> <translation id="7535087603100972091">တန်ဖိုး</translation> +<translation id="753556296624075801">Google က ပံ့ပိုးသည်</translation> <translation id="7537536606612762813">မလုပ်မနေရ</translation> <translation id="7542995811387359312">ဒီပုံစံသည် စိတ်ချရသည့် ချိတ်ဆက်မှုကို မသုံးသောကြောင့် အကြွေးကဒ် အလိုအလျောက် ဖြည့်မှုကို ပိတ်ထားသည်။</translation> <translation id="7543525346216957623">သင့်မိဘကို မေးပါ</translation> @@ -3466,6 +3479,7 @@ <translation id="7871445724586827387">သင့် Google Account စကားဝှက် ပြောင်းရန်</translation> <translation id="7877007680666472091">ကာကွယ်ထားသည့် အကြောင်းအရာ ID များ</translation> <translation id="7878562273885520351">သင့်စကားဝှက် အခိုးခံထားရနိုင်သည်</translation> +<translation id="7878966190323222027">ရှေ့ဆက်ရန် ပြန်ဖွင့်ပါ</translation> <translation id="7880146494886811634">လိပ်စာ သိမ်းပါ</translation> <translation id="7882421473871500483">အညို</translation> <translation id="7882995332186050355">ကုန်တင်ကားနှင့် နောက်တွဲယာဉ်များ</translation> @@ -3996,6 +4010,7 @@ <translation id="8942355029279167844">သင်၏ စီမံခန့်ခွဲသူသည် ထုတ်ကုန်အသုံးပြုမှု ပိုမိုကောင်းမွန်စေရန်အတွက် အမှားရှာပြင်ခြင်းဒေတာများကို စုဆောင်းရန် <ph name="APP_NAME" /> ကို ခွင့်ပြုထားသည်။ နောက်ထပ်အချက်အလက်များအတွက် <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" /> တွင် ကြည့်ပါ။</translation> <translation id="8943282376843390568">သံပုရာ</translation> <translation id="8944485226638699751">ကန့်သတ်ထားသည်</translation> +<translation id="8949410982325929394">သံစဉ်</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">ဥပဒေနှင့် အစိုးရ</translation> <translation id="8954252855949068147">အဝတ်အစား</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 281bacae..6f4bb2f 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -1222,6 +1222,7 @@ <translation id="3432601291244612633">Lukk siden</translation> <translation id="3433111389595862568">Samarbeids- og konferanseprogramvare</translation> <translation id="3433144818443565002">Tale- og videochat</translation> +<translation id="3434025015623587566">Google Passordlagring trenger mer tilgang</translation> <translation id="343474037147570563">Filer du laster opp eller legger ved, sendes til Google Cloud eller tredjeparter for analyse. De kan for eksempel bli skannet for sensitive data eller skadelig programvare, og de kan bli lagret i henhold til bedriftens retningslinjer og være synlige for administratoren din.</translation> <translation id="3435557549311968410">Kontinuerlig (kort)</translation> <translation id="3435738964857648380">Sikkerhet</translation> @@ -1974,6 +1975,7 @@ <translation id="4918221908152712722">Installer <ph name="APP_NAME" /> (ingen nedlasting nødvendig)</translation> <translation id="4920457992177678649">Ferieboliger og korte opphold</translation> <translation id="4920710383559189047">Omslag</translation> +<translation id="4922104989726031751">For å bruke Passordlagring med operativsystemet ditt, start Chromium på nytt og gi tilgang til passordlagringen på datamaskinen. Fanene dine åpnes på nytt når du starter på nytt.</translation> <translation id="4923459931733593730">Betaling</translation> <translation id="4926049483395192435">Må angis.</translation> <translation id="4926159001844873046">På <ph name="SITE" /> står det</translation> @@ -2615,6 +2617,7 @@ <translation id="6234122620015464377">Beskjær etter hvert dokument</translation> <translation id="6236290670123303279">Administrer innstillinger</translation> <translation id="6240447795304464094">Google Pay-logo</translation> +<translation id="6240964651812394252">For å bruke Google Passordlagring med operativsystemet ditt, start Chrome på nytt og gi tilgang til datamaskinens passordlagring. Fanene dine åpnes på nytt når du starter på nytt.</translation> <translation id="6241121617266208201">Skjul forslag</translation> <translation id="624499991300733384">Utskriftskomposisjonstjeneste</translation> <translation id="6251906504834538140">{0,plural, =1{Filen er blokkert for flytting}other{<ph name="FILE_COUNT" /> filer er blokkert for flytting}}</translation> @@ -2625,6 +2628,7 @@ <translation id="6263376278284652872"><ph name="DOMAIN" />-bokmerker</translation> <translation id="6264376385120300461">Last ned likevel</translation> <translation id="6264485186158353794">Tilbake til trygg grunn</translation> +<translation id="6264636978858465832">Passordlagring trenger mer tilgang</translation> <translation id="6265794661083428563">Kopiér verdien av <ph name="POLICY_NAME" />-regelen</translation> <translation id="6266934640124581640">Lys blågrønn</translation> <translation id="6270066318535733958">Båtsport</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index a247ae8..0aa2727 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Planejamento de eventos</translation> <translation id="1634828734222219955">Total</translation> <translation id="163669211644121865">Declaração e planejamento de impostos</translation> +<translation id="163826442096818926">Encurtar</translation> <translation id="1639239467298939599">Carregando</translation> <translation id="1640180200866533862">Políticas de usuário</translation> <translation id="1640244768702815859">Tente <ph name="BEGIN_LINK" />visitar a página inicial do site<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Site</translation> <translation id="2385809941344967209">Atualize o navegador nas configurações do Chrome</translation> <translation id="2386255080630008482">O certificado do servidor foi revogado.</translation> +<translation id="239203817277685015">Detalhar</translation> <translation id="239293030466334554">Conversíveis</translation> <translation id="2392959068659972793">Mostrar políticas sem valor definido</translation> <translation id="239429038616798445">Esse método de envio não está disponível. Tente um método diferente.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Abrir links de <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Envelope de 23 cm x 30 cm</translation> <translation id="2941952326391522266">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança é de <ph name="DOMAIN2" />. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation> +<translation id="2942492342931589800">Casual</translation> <translation id="2942515540157583425">Vagas de emprego nas áreas técnica e de TI</translation> <translation id="2943895734390379394">Tempo de upload:</translation> <translation id="2945026002409061480">Comunidades on-line</translation> @@ -1231,6 +1234,7 @@ <translation id="3447661539832366887">O proprietário deste dispositivo desativou o jogo do dinossauro.</translation> <translation id="3447884698081792621">Mostrar certificado (emitido por <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Pode pedir para controlar e reprogramar seus dispositivos MIDI</translation> +<translation id="3452151267620065789">Progresso salvo</translation> <translation id="3452404311384756672">Buscar intervalo:</translation> <translation id="3453962258458347894">Número de novas tentativas</translation> <translation id="3461266716147554923"><ph name="URL" /> quer ver os textos e imagens copiados para a área de transferência</translation> @@ -1314,6 +1318,7 @@ <translation id="361438452008624280">Entrada "<ph name="LANGUAGE_ID" />": idioma desconhecido ou não compatível.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione Tab e depois Enter para executar a confirmação de segurança nas configurações do Chrome</translation> <translation id="3615309852743236517">Manicure e pedicure</translation> +<translation id="3617072447978270288">Gerar novamente</translation> <translation id="3620239073311576716">Uniformes e roupas de trabalho</translation> <translation id="36224234498066874">Remover dados de navegação...</translation> <translation id="362276910939193118">Mostrar histórico completo</translation> @@ -1336,6 +1341,7 @@ <translation id="3650594806107685466">Por questões de segurança, insira o CVC que fica na <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Caminhadas e acampamento</translation> <translation id="3653033846669030038">Parques temáticos</translation> +<translation id="3654980960391973513">Gerar</translation> <translation id="3655241534245626312">Acessar configurações de permissão</translation> <translation id="3655670868607891010">Caso veja esta página com frequência, tente <ph name="HELP_LINK" />.</translation> <translation id="365641980390710834">Roupas casuais</translation> @@ -2571,6 +2577,7 @@ <translation id="6157754950574419155">Remover todos do histórico</translation> <translation id="6157877588268064908">Para acessar métodos e requisitos de envio, selecione um endereço</translation> <translation id="6159554577634054750">Controle de pragas</translation> +<translation id="6159908896951210943">Formal</translation> <translation id="6160391204859821737">Ativar um recurso de privacidade de anúncios</translation> <translation id="6165508094623778733">Saiba mais</translation> <translation id="6167577165590485365">Última tentativa de busca:</translation> @@ -3216,6 +3223,7 @@ <translation id="7422347648202898039">Rótulos (segurança)</translation> <translation id="7423283032694727565">Botão "Gerenciar cookies". Ative para gerenciar suas preferências de cookies nas configurações do Chrome</translation> <translation id="7424421098814895617">A opção de excluir endereço foi selecionada</translation> +<translation id="7425037327577270384">Quero ajuda para escrever</translation> <translation id="7427366580982928791">Segurança na Internet para crianças</translation> <translation id="7429429656042611765">Executivo</translation> <translation id="7432774160230062882">Confirme sua identidade no Chromium para preencher suas informações de pagamento.</translation> @@ -3282,6 +3290,7 @@ <translation id="7529884293139707752">Educação domiciliar</translation> <translation id="7534987659046836932">Envelope C7</translation> <translation id="7535087603100972091">Valor</translation> +<translation id="753556296624075801">Tecnologia do Google</translation> <translation id="7537536606612762813">Obrigatória</translation> <translation id="7542995811387359312">O preenchimento automático do cartão de crédito está desativado porque este formulário não usa uma conexão segura.</translation> <translation id="7543525346216957623">Peça para seu responsável</translation> @@ -3465,6 +3474,7 @@ <translation id="7871445724586827387">Mudar a senha da sua Conta do Google</translation> <translation id="7877007680666472091">IDs de conteúdo protegido</translation> <translation id="7878562273885520351">Sua senha pode estar comprometida</translation> +<translation id="7878966190323222027">Abra de novo para continuar</translation> <translation id="7880146494886811634">Salvar endereço</translation> <translation id="7882421473871500483">Marrom</translation> <translation id="7882995332186050355">Trailers e caminhões de carga</translation> @@ -3995,6 +4005,7 @@ <translation id="8942355029279167844">Seu administrador permitiu que <ph name="APP_NAME" /> coletasse dados de diagnósticos para melhorar a experiência com o produto. Veja mais informações em <ph name="BEGIN_LINK" />https://www.parallels.com/br/pcep<ph name="END_LINK" />.</translation> <translation id="8943282376843390568">Verde-limão</translation> <translation id="8944485226638699751">Limitado</translation> +<translation id="8949410982325929394">Tom</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Leis e governo</translation> <translation id="8954252855949068147">Vestuário</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 4486029..569f354 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Planeamento de eventos</translation> <translation id="1634828734222219955">Total</translation> <translation id="163669211644121865">Preparação e planeamento de impostos</translation> +<translation id="163826442096818926">Encurtar</translation> <translation id="1639239467298939599">A carregar…</translation> <translation id="1640180200866533862">Políticas do utilizador</translation> <translation id="1640244768702815859">Experimente <ph name="BEGIN_LINK" />aceder à página inicial do site<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Website</translation> <translation id="2385809941344967209">Atualize o Chrome nas definições do Chrome.</translation> <translation id="2386255080630008482">O certificado do servidor foi revogado.</translation> +<translation id="239203817277685015">Elaborar</translation> <translation id="239293030466334554">Conversíveis</translation> <translation id="2392959068659972793">Apresentar políticas sem valor definido</translation> <translation id="239429038616798445">Este método de envio não está disponível. Experimente um método diferente.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Abrir links de <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Envelope 9 x 12 pol.</translation> <translation id="2941952326391522266">Este servidor não conseguiu provar que é o domínio <ph name="DOMAIN" />; o respetivo certificado de segurança é do domínio <ph name="DOMAIN2" />. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação.</translation> +<translation id="2942492342931589800">Casual</translation> <translation id="2942515540157583425">Empregos na área de TI e tecnologia</translation> <translation id="2943895734390379394">Hora do carregamento:</translation> <translation id="2945026002409061480">Comunidades online</translation> @@ -1231,6 +1234,7 @@ <translation id="3447661539832366887">O proprietário deste dispositivo desativou o jogo do dinossauro.</translation> <translation id="3447884698081792621">Mostrar certificado (emitido por <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Pode pedir para controlar e reprogramar os seus dispositivos MIDI</translation> +<translation id="3452151267620065789">Progresso guardado</translation> <translation id="3452404311384756672">Intervalo de obtenção:</translation> <translation id="3453962258458347894">Número de tentativas</translation> <translation id="3461266716147554923"><ph name="URL" /> quer ver o texto e as imagens copiados para a área de transferência.</translation> @@ -1314,6 +1318,7 @@ <translation id="361438452008624280">Entrada da lista "<ph name="LANGUAGE_ID" />": idioma desconhecido ou não suportado.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, prima Tab e, em seguida, Enter para executar a verificação de segurança nas definições do Chrome</translation> <translation id="3615309852743236517">Manicures e pedicures</translation> +<translation id="3617072447978270288">Gerar novamente</translation> <translation id="3620239073311576716">Uniformes e vestuário de trabalho</translation> <translation id="36224234498066874">Limpar dados de navegação...</translation> <translation id="362276910939193118">Mostrar histórico completo</translation> @@ -1336,6 +1341,7 @@ <translation id="3650594806107685466">Para ajudar a manter o cartão seguro, introduza o Código de Segurança/CVC que se encontra no <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Caminhadas e campismo</translation> <translation id="3653033846669030038">Parques temáticos</translation> +<translation id="3654980960391973513">Gerar</translation> <translation id="3655241534245626312">Aceder às definições de autorização</translation> <translation id="3655670868607891010">Se vê isto com frequência, experimente <ph name="HELP_LINK" />.</translation> <translation id="365641980390710834">Vestuário casual</translation> @@ -2571,6 +2577,7 @@ <translation id="6157754950574419155">Remover tudo do histórico</translation> <translation id="6157877588268064908">Para ver os métodos de envio e os requisitos, selecione um endereço</translation> <translation id="6159554577634054750">Controlo de pragas</translation> +<translation id="6159908896951210943">Formal</translation> <translation id="6160391204859821737">Ative uma funcionalidade de privacidade dos anúncios</translation> <translation id="6165508094623778733">Saiba mais</translation> <translation id="6167577165590485365">Última tentativa de obtenção:</translation> @@ -3215,6 +3222,7 @@ <translation id="7422347648202898039">Etiquetas (segurança)</translation> <translation id="7423283032694727565">Botão Gerir cookies; ative para gerir as suas preferências de cookies nas definições do Chrome</translation> <translation id="7424421098814895617">A opção de eliminação da morada foi selecionada</translation> +<translation id="7425037327577270384">Ajuda-me a escrever</translation> <translation id="7427366580982928791">Segurança das crianças na Internet</translation> <translation id="7429429656042611765">Executive</translation> <translation id="7432774160230062882">Valide a sua identidade para que o Chromium possa preencher as informações de pagamento.</translation> @@ -3281,6 +3289,7 @@ <translation id="7529884293139707752">Ensino doméstico</translation> <translation id="7534987659046836932">Envelope C7</translation> <translation id="7535087603100972091">Valor</translation> +<translation id="753556296624075801">Tecnologia da Google</translation> <translation id="7537536606612762813">Obrigatório</translation> <translation id="7542995811387359312">O preenchimento automático de cartões de crédito está desativado, porque este formulário não utiliza uma ligação segura.</translation> <translation id="7543525346216957623">Pede aos teus pais</translation> @@ -3464,6 +3473,7 @@ <translation id="7871445724586827387">Altere a palavra-passe da sua Conta Google</translation> <translation id="7877007680666472091">IDs de conteúdo protegido</translation> <translation id="7878562273885520351">A palavra-passe pode estar comprometida</translation> +<translation id="7878966190323222027">Reabrir para continuar</translation> <translation id="7880146494886811634">Guarde o endereço</translation> <translation id="7882421473871500483">Castanho</translation> <translation id="7882995332186050355">Camiões e reboques de carga</translation> @@ -3994,6 +4004,7 @@ <translation id="8942355029279167844">O seu administrador autorizou a app <ph name="APP_NAME" /> a recolher dados de diagnóstico para melhorar a experiência do produto. Veja <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" /> para obter mais informações.</translation> <translation id="8943282376843390568">Lima</translation> <translation id="8944485226638699751">Conteúdo visível por um grupo limitado de pessoas ou um grupo</translation> +<translation id="8949410982325929394">Tom</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Legislação e governo</translation> <translation id="8954252855949068147">Vestuário</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index ba468e3..dbbc435 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -1431,7 +1431,7 @@ <translation id="3823019343150397277">IBAN</translation> <translation id="3823402221513322552">Browserul este gestionat de <ph name="BROWSER_DOMAIN" />, iar profilul este gestionat de <ph name="PROFILE_DOMAIN" /></translation> <translation id="382518646247711829">Dacă utilizați un server proxy...</translation> -<translation id="3826050100957962900">Third-party sign-in</translation> +<translation id="3826050100957962900">Conectarea prin terți</translation> <translation id="3827112369919217609">Absolută</translation> <translation id="3827666161959873541">Filme pentru toată familia</translation> <translation id="3828924085048779000">Trebuie să fie introdusă expresia de acces.</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 40d9ac4..345e360d 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -735,7 +735,7 @@ <translation id="2404884497378469141">Попробуйте скопировать файлы ещё раз.</translation> <translation id="2413155254802890957">Старый</translation> <translation id="2413528052993050574">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Его сертификат безопасности может быть отозван. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation> -<translation id="2414886740292270097">Темная</translation> +<translation id="2414886740292270097">Тёмная</translation> <translation id="2429716554270894715">Ткань (водонепроницаемая)</translation> <translation id="2436186046335138073">Использовать <ph name="HANDLER_HOSTNAME" /> для обработки ссылок типа "<ph name="PROTOCOL" />"?</translation> <translation id="2438874542388153331">Четыре отверстия справа</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 12ac4c5..d7695d5 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Plánovanie podujatí</translation> <translation id="1634828734222219955">Celkove</translation> <translation id="163669211644121865">Daňová príprava a plánovanie</translation> +<translation id="163826442096818926">Skrátiť</translation> <translation id="1639239467298939599">Načítava sa</translation> <translation id="1640180200866533862">Pravidlá pre používateľa</translation> <translation id="1640244768702815859">Skúste <ph name="BEGIN_LINK" />navštíviť domovskú stránku webu<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Web</translation> <translation id="2385809941344967209">Aktualizovať Chrome v jeho nastaveniach</translation> <translation id="2386255080630008482">Certifikát servera bol zrušený.</translation> +<translation id="239203817277685015">Generovať podrobnejšiu verziu</translation> <translation id="239293030466334554">Kabriolety</translation> <translation id="2392959068659972793">Zobraziť pravidlá bez nastavenej hodnoty</translation> <translation id="239429038616798445">Tento spôsob dodania nie je k dispozícii. Skúste inú možnosť.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Otvárať odkazy protokolu <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Obálka 228,6 mm × 304,8 mm</translation> <translation id="2941952326391522266">Server nedokáže overiť, či ide o doménu <ph name="DOMAIN" />, jej bezpečnostný certifikát pochádza z domény <ph name="DOMAIN2" />. Môže to byť spôsobené nesprávnou konfiguráciou alebo tým, že vaše pripojenie zachytil útočník.</translation> +<translation id="2942492342931589800">Jednoduché</translation> <translation id="2942515540157583425">Práca v oblasti IT a techniky</translation> <translation id="2943895734390379394">Čas nahrania:</translation> <translation id="2945026002409061480">Online komunity</translation> @@ -1216,6 +1219,7 @@ <translation id="3432601291244612633">Zavrieť stránku</translation> <translation id="3433111389595862568">Softvér na spoluprácu a konferencie</translation> <translation id="3433144818443565002">Hlasové hovory a videohovory</translation> +<translation id="3434025015623587566">Správca hesiel Google potrebuje rozsiahlejší prístup</translation> <translation id="343474037147570563">Súbory, ktoré nahráte alebo priložíte, sa odošlú na analýzu do služby Google Cloud alebo tretím stranám. V rámci nej môžu byť napríklad podrobené kontrole prítomnosti citlivých údajov alebo malvéru, pričom môžu byť uložené podľa firemných pravidiel a viditeľné pre vášho správcu.</translation> <translation id="3435557549311968410">Nepretržité (krátke)</translation> <translation id="3435738964857648380">Bezpečnosť</translation> @@ -1228,6 +1232,7 @@ <translation id="3447661539832366887">Vlastník tohto zariadenia vypol hru Dinosaur.</translation> <translation id="3447884698081792621">Zobraziť certifikát (od vydavateľa <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Môže žiadať o povolenie ovládať a preprogramovať zariadenia MIDI</translation> +<translation id="3452151267620065789">Postup bol uložený</translation> <translation id="3452404311384756672">Interval načítania:</translation> <translation id="3453962258458347894">Počet opakovaných pokusov</translation> <translation id="3461266716147554923">Web <ph name="URL" /> chce získať prístup k textu a obrázkom pridaným do schránky</translation> @@ -1311,6 +1316,7 @@ <translation id="361438452008624280">Položka zoznamu „<ph name="LANGUAGE_ID" />“: neznámy alebo nepodporovaný jazyk.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, postupným stlačením klávesov Tab a Enter spustite kontrolu bezpečnosti v Chrome</translation> <translation id="3615309852743236517">Manikúra a pedikúra</translation> +<translation id="3617072447978270288">Znova generovať</translation> <translation id="3620239073311576716">Uniformy a pracovné odevy</translation> <translation id="36224234498066874">Vymazať dáta prehliadania...</translation> <translation id="362276910939193118">Zobraziť celú históriu</translation> @@ -1332,6 +1338,7 @@ <translation id="3650594806107685466">Ak chcete zachovať bezpečnosť svojej karty, zadajte overovací kód karty (<ph name="SIDE_OF_CARD" />)</translation> <translation id="3650917416636556301">Turistika a kemping</translation> <translation id="3653033846669030038">Zábavné parky</translation> +<translation id="3654980960391973513">Generovať</translation> <translation id="3655241534245626312">Prejsť do nastavení povolenia</translation> <translation id="3655670868607891010">Ak sa vám táto stránka zobrazuje často, skúste použiť tieto stránky <ph name="HELP_LINK" />.</translation> <translation id="365641980390710834">Odevy na voľný čas</translation> @@ -1964,6 +1971,7 @@ <translation id="4918221908152712722">Nainštalujte si <ph name="APP_NAME" /> (bez nutnosti stiahnutia)</translation> <translation id="4920457992177678649">Rekreačný a krátkodobý prenájom</translation> <translation id="4920710383559189047">Obal</translation> +<translation id="4922104989726031751">Ak chcete používať Správcu hesiel so svojím operačným systémom, znova spustite Chromium a povoľte prístup k Správcovi hesiel v počítači. Po opätovnom spustení sa karty znova otvoria.</translation> <translation id="4923459931733593730">Platba</translation> <translation id="4926049483395192435">Musí byť určená.</translation> <translation id="4926159001844873046">Správa z webu <ph name="SITE" /></translation> @@ -2566,6 +2574,7 @@ <translation id="6157754950574419155">Odstrániť všetko z histórie</translation> <translation id="6157877588268064908">Ak chcete zobraziť spôsoby a požiadavky dodania, vyberte adresu</translation> <translation id="6159554577634054750">Hubenie škodcov</translation> +<translation id="6159908896951210943">Formálny</translation> <translation id="6160391204859821737">Zapnutie funkcie ochrany súkromia pri reklamách</translation> <translation id="6165508094623778733">Ďalšie informácie</translation> <translation id="6167577165590485365">Posledný pokus o načítanie:</translation> @@ -2603,6 +2612,7 @@ <translation id="6234122620015464377">Po každom dokumente orezať</translation> <translation id="6236290670123303279">Spravovať nastavenia</translation> <translation id="6240447795304464094">Logo Google Pay</translation> +<translation id="6240964651812394252">Ak chcete používať Správcu hesiel so svojím operačným systémom, znova spustite Chrome a povoľte prístup k Správcovi hesiel v počítači. Po opätovnom spustení sa karty znova otvoria.</translation> <translation id="6241121617266208201">Skryť návrhy</translation> <translation id="624499991300733384">Služba vykresľovania tlače</translation> <translation id="6251906504834538140">{0,plural, =1{Presun súboru bol zablokovaný}few{Presun <ph name="FILE_COUNT" /> súborov bol zablokovaný}many{<ph name="FILE_COUNT" /> files blocked from moving}other{Presun <ph name="FILE_COUNT" /> súborov bol zablokovaný}}</translation> @@ -2613,6 +2623,7 @@ <translation id="6263376278284652872">Záložky domény <ph name="DOMAIN" /></translation> <translation id="6264376385120300461">Napriek tomu stiahnuť</translation> <translation id="6264485186158353794">Späť do bezpečia</translation> +<translation id="6264636978858465832">Správca hesiel potrebuje rozsiahlejší prístup</translation> <translation id="6265794661083428563">Skopírovať hodnotu pravidla <ph name="POLICY_NAME" /></translation> <translation id="6266934640124581640">Svetlá modrozelená</translation> <translation id="6270066318535733958">Plavba loďou</translation> @@ -3211,6 +3222,7 @@ <translation id="7422347648202898039">Štítky (bezpečnostné)</translation> <translation id="7423283032694727565">Tlačidlo Spravovať súbory cookie, ktorého aktivovaním môžete spravovať predvoľby súborov cookie v nastaveniach Chromu</translation> <translation id="7424421098814895617">Bola vybraná možnosť Odstrániť adresu</translation> +<translation id="7425037327577270384">Asistent písania</translation> <translation id="7427366580982928791">Bezpečnosť detí na internete</translation> <translation id="7429429656042611765">Executive</translation> <translation id="7432774160230062882">Overte svoju totožnosť, aby Chromium mohol dopĺňať vaše platobné údaje.</translation> @@ -3277,6 +3289,7 @@ <translation id="7529884293139707752">Domáce vzdelávanie</translation> <translation id="7534987659046836932">Obálka C7</translation> <translation id="7535087603100972091">Hodnota</translation> +<translation id="753556296624075801">Používa technológiu Google</translation> <translation id="7537536606612762813">Povinné</translation> <translation id="7542995811387359312">Automatické dopĺňanie údajov o kreditnej karte je zakázané, pretože tento formulár nepoužíva zabezpečené pripojenie.</translation> <translation id="7543525346216957623">Opýtajte sa rodiča</translation> @@ -3460,6 +3473,7 @@ <translation id="7871445724586827387">Zmeniť heslo účtu Google</translation> <translation id="7877007680666472091">identifikátory chráneného obsahu</translation> <translation id="7878562273885520351">Vaše heslo mohlo byť napadnuté</translation> +<translation id="7878966190323222027">Ak chcete pokračovať, znova otvorte</translation> <translation id="7880146494886811634">Uloženie adresy</translation> <translation id="7882421473871500483">Hnedá</translation> <translation id="7882995332186050355">Nákladné vozidlá a ťahače</translation> @@ -3990,6 +4004,7 @@ <translation id="8942355029279167844">Váš správca povolil aplikácii <ph name="APP_NAME" /> zhromažďovať diagnostické údaje na zlepšenie prostredia služby. Viac sa dozviete na <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" />.</translation> <translation id="8943282376843390568">Limetková</translation> <translation id="8944485226638699751">Obmedzené</translation> +<translation id="8949410982325929394">Tón</translation> <translation id="8949493680961858543">A1×4</translation> <translation id="8951415078585015151">Právo a štátna správa</translation> <translation id="8954252855949068147">Odevy</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index eab767d0..691a141 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -117,7 +117,7 @@ <translation id="1206967143813997005">Neveljaven prvotni podpis</translation> <translation id="1209206284964581585">Zaenkrat skrij</translation> <translation id="121201262018556460">Poskusili ste dostopati do domene <ph name="DOMAIN" />, vendar ima strežnik potrdilo s šibkim ključem. Napadalec je morda dešifriral zasebni ključ in strežnik morda ni tisti, ki ste ga pričakovali (morda komunicirate z napadalcem).</translation> -<translation id="1212527389003717329">Prenos se je začel. Če si želite ogledati, pridržite |<ph name="ACCELERATOR" />|.</translation> +<translation id="1212527389003717329">Prenos se je začel. Če si ga želite ogledati, pridržite |<ph name="ACCELERATOR" />|.</translation> <translation id="1219129156119358924">Varnost sistema</translation> <translation id="1222060260947439312">Desni pladenj</translation> <translation id="1224330468394120478">A3x6</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index 290fb524..27264f5e 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -117,7 +117,7 @@ <translation id="1206967143813997005">Neispravan potpis inicijalima</translation> <translation id="1209206284964581585">Sakrij za sada</translation> <translation id="121201262018556460">Pokušali ste da kontaktirate <ph name="DOMAIN" />, ali je server poslao sertifikat koji sadrži slab ključ. Moguće je da je napadač otkrio privatni ključ i da server možda nije onaj koji mislite da jeste (možda komunicirate sa napadačem).</translation> -<translation id="1212527389003717329">Preuzimanje je počelo. Da biste je videli, pritisnite i zadržite |<ph name="ACCELERATOR" />|.</translation> +<translation id="1212527389003717329">Preuzimanje je počelo. Da biste ga videli, pritisnite i zadržite |<ph name="ACCELERATOR" />|.</translation> <translation id="1219129156119358924">Bezbednost sistema</translation> <translation id="1222060260947439312">Desna fioka</translation> <translation id="1224330468394120478">A3x6</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index f428179..ef371d6 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -117,7 +117,7 @@ <translation id="1206967143813997005">Неисправан потпис иницијалима</translation> <translation id="1209206284964581585">Сакриј за сада</translation> <translation id="121201262018556460">Покушали сте да контактирате <ph name="DOMAIN" />, али је сервер послао сертификат који садржи слаб кључ. Могуће је да је нападач открио приватни кључ и да сервер можда није онај који мислите да јесте (можда комуницирате са нападачем).</translation> -<translation id="1212527389003717329">Преузимање је почело. Да бисте је видели, притисните и задржите |<ph name="ACCELERATOR" />|.</translation> +<translation id="1212527389003717329">Преузимање је почело. Да бисте га видели, притисните и задржите |<ph name="ACCELERATOR" />|.</translation> <translation id="1219129156119358924">Безбедност система</translation> <translation id="1222060260947439312">Десна фиока</translation> <translation id="1224330468394120478">A3x6</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index ff3ff37..701b7d10 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -50,7 +50,7 @@ <translation id="1074497978438210769">Si salama</translation> <translation id="1075079914415273530">Kilimo na misitu</translation> <translation id="1075364221219156102">Tumia Ufunguo wa Siri</translation> -<translation id="1078033282564106222">Chaguo la nambari ya jengo limeteuliwa</translation> +<translation id="1078033282564106222">Chaguo la namba ya jengo limeteuliwa</translation> <translation id="1080116354587839789">Fanya itoshe kwenye upana</translation> <translation id="1081061862829655580">Trei ya 19</translation> <translation id="1089439967362294234">Badilisha Nenosiri</translation> @@ -261,7 +261,7 @@ <translation id="1462245070427461050">JIS B9</translation> <translation id="1462951478840426066">Kutumia fonti zilizo kwenye kompyuta yako ili uweze kuunda maudhui yenye usahihi wa hali ya juu</translation> <translation id="1467432559032391204">Kushoto</translation> -<translation id="1468653229182955856"><ph name="ONE_TIME_CODE" /> ndiyo nambari yako ya kuthibitisha ya <ph name="EMBEDDED_ORIGIN" /> ili uendelee kwenye <ph name="TOP_ORIGIN" /></translation> +<translation id="1468653229182955856"><ph name="ONE_TIME_CODE" /> ndiyo namba yako ya kuthibitisha ya <ph name="EMBEDDED_ORIGIN" /> ili uendelee kwenye <ph name="TOP_ORIGIN" /></translation> <translation id="1472675084647422956">Onyesha zaidi</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -479,7 +479,7 @@ <translation id="1875512691959384712">Fomu za Google</translation> <translation id="1876399092304384674">Kwa tarehe</translation> <translation id="187918866476621466">Fungua kurasa zinazoanza</translation> -<translation id="1880901968112404879">Ili ulipe haraka wakati ujao, hifadhi kadi, nambari yako ya usalama iliyosimbwa kwa njia fiche na anwani ya kutuma bili kwenye Akaunti yako ya Google</translation> +<translation id="1880901968112404879">Ili ulipe haraka wakati ujao, hifadhi kadi, namba yako ya usalama iliyosimbwa kwa njia fiche na anwani ya kutuma bili kwenye Akaunti yako ya Google</translation> <translation id="1883255238294161206">Kunja orodha</translation> <translation id="1884843295353628214">Jazz</translation> <translation id="1890171020361705182">Mchezo wa Dinosau. Dinosau asiyeonekana vizuri anayekimbia kwenye mandhari ya nchi yenye ukiwa huku akikwepa dungusi kakati na terosau wa aina ya "pterodactyl". Ukisikia kidokezo cha sauti, gusa ili uruke vikwazo.</translation> @@ -563,7 +563,7 @@ <translation id="2066915425250589881">kuomba yafutwe</translation> <translation id="2066969741541525119">Tovuti unayoelekea kuifungua imezuiwa na shirika lako</translation> <translation id="2068528718802935086">Watoto wachanga na watoto wenye umri wa miaka mitatu hadi mitano</translation> -<translation id="2071156619270205202">Huwezi kupata nambari ya kadi pepe kwa kutumia kadi hii.</translation> +<translation id="2071156619270205202">Huwezi kupata namba ya kadi pepe kwa kutumia kadi hii.</translation> <translation id="2071692954027939183">Arifa zimezuiwa kiotomatiki kwa sababu kwa kawaida huziruhusu</translation> <translation id="2071852865256799872">Kivinjari chako kinadhibitiwa na shirika lako na wasifu wako unadhibitiwa na <ph name="PROFILE_DOMAIN" /></translation> <translation id="2072275792380684364">Mitindo na ubunifu</translation> @@ -757,7 +757,7 @@ <translation id="2480300195898055381">Katika Akaunti yako ya Google, <ph name="USER_EMAIL" /></translation> <translation id="2482878487686419369">Arifa</translation> <translation id="248348093745724435">Sera za mashine</translation> -<translation id="2490199669743245365">Wadukuzi walio kwenye tovuti unayojaribu kutembelea huenda wakasakinisha programu hasidi inayoiba au kufuta vitu kama vile nenosiri, picha, ujumbe au nambari ya kadi yako ya mikopo. Chrome inapendekeza sana urudi kwenye ukurasa salama. <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="2490199669743245365">Wadukuzi walio kwenye tovuti unayojaribu kutembelea huenda wakasakinisha programu hasidi inayoiba au kufuta vitu kama vile nenosiri, picha, ujumbe au namba ya kadi yako ya mikopo. Chrome inapendekeza sana urudi kwenye ukurasa salama. <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="2491120439723279231">Cheti cha seva kina hitilafu.</translation> <translation id="2491414235131909199">Ukurasa huu umezuiwa na kiendelezi</translation> <translation id="2495083838625180221">Kichanganuzi cha JSON</translation> @@ -776,7 +776,7 @@ <translation id="2523886232349826891">Imehifadhiwa kwenye kifaa hiki pekee</translation> <translation id="2524461107774643265">Ongeza Maelezo Zaidi</translation> <translation id="2526280916094749336">Unaweza kutumia anwani zilizohifadhiwa kwenye bidhaa zote za Google. Anwani hii itahifadhiwa kwenye Akaunti yako ya Google, <ph name="ACCOUNT" />.</translation> -<translation id="2527451058878391043">CVC yako ipo kwenye sehemu ya mbele ya kadi yako. Ni msimbo wa tarakimu 4 uliopo sehemu ya juu kulia juu ya nambari ya kadi yako.</translation> +<translation id="2527451058878391043">CVC yako ipo kwenye sehemu ya mbele ya kadi yako. Ni msimbo wa tarakimu 4 uliopo sehemu ya juu kulia juu ya namba ya kadi yako.</translation> <translation id="2529899080962247600">Hupaswi kuweka zaidi ya vipengee <ph name="MAX_ITEMS_LIMIT" /> katika sehemu hii. Vipengee vyote vya ziada vitapuuzwa.</translation> <translation id="253493526287553278">Angalia maelezo ya kuponi ya ofa</translation> <translation id="2535585790302968248">Fungua kichupo fiche kipya ili uvinjari kwa faragha</translation> @@ -1141,7 +1141,7 @@ <translation id="3270847123878663523">Tendua Kupanga upya</translation> <translation id="3271648667212143903"><ph name="ORIGIN" /> inataka kuunganisha</translation> <translation id="3272091146646336650">Ukubwa wa Super B</translation> -<translation id="3272112314896217187">Weka nambari ya kuthibitisha iliyo na tarakimu <ph name="NUMBER_OF_DIGITS" /></translation> +<translation id="3272112314896217187">Weka namba ya kuthibitisha iliyo na tarakimu <ph name="NUMBER_OF_DIGITS" /></translation> <translation id="3272643614306383237">Chini ya MB 1. Huenda baadhi ya tovuti zikapakia polepole zaidi wakati mwingine utakapozitembelea.</translation> <translation id="3281350579597955952">{0,plural, =1{Sera ya msimamizi haipendekezi kufungua faili hii kwenye <ph name="DESTINATION_NAME" />}other{Sera ya msimamizi haipendekezi kufungua faili hizi kwenye <ph name="DESTINATION_NAME" />}}</translation> <translation id="3282085321714087552">Shirika lako, <ph name="ENROLLMENT_DOMAIN" />, limetuma maelezo fulani kwenye tovuti zifuatazo, kama vile mipangilio au sera.</translation> @@ -1352,7 +1352,7 @@ <translation id="3677008721441257057">Unamaanisha <a href="#" id="dont-proceed-link"><ph name="DOMAIN" /></a>?</translation> <translation id="3678029195006412963">Ombi halikutiwa sahihi</translation> <translation id="3678529606614285348">Fungua ukurasa kwenye dirisha fiche jipya (Ctrl-Shift-N)</translation> -<translation id="3678914302246317895">Weka nambari ya kuthibitisha iliyo na tarakimu <ph name="OTP_LENGTH" /></translation> +<translation id="3678914302246317895">Weka namba ya kuthibitisha iliyo na tarakimu <ph name="OTP_LENGTH" /></translation> <translation id="3681007416295224113">Maelezo ya cheti</translation> <translation id="3681421644246505351">Chrome hubaini mada zinazokuvutia kulingana na historia yako ya kuvinjari ya hivi karibuni.</translation> <translation id="3689867156802445220">Nambari ya jengo</translation> @@ -1393,7 +1393,7 @@ <translation id="3744212718085287312">Je, unataka kulipa kwa usalama zaidi ukitumia kadi pepe wakati ujao?</translation> <translation id="3744899669254331632">Huwezi kutembelea <ph name="SITE" /> sasa hivi kwa sababu tovuti ilituma kitambulisho kilichoharibika ambacho Chromium haiwezi kuchakata. Hitilafu na uvamizi wa mtandao kwa kawaida huwa vya muda, kwa hivyo ukurasa huu huenda utafanya kazi baadaye.</translation> <translation id="3748009735914587286">Chuma (Mng'ao Zaidi)</translation> -<translation id="3748148204939282805">Wavamizi kwenye <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> huenda wakakuhadaa ufanye kitu hatari kama vile kusakinisha programu au kuonyesha maelezo yako ya binafsi (kwa mfano, manenosiri, nambari za simu au kadi za mikopo). <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="3748148204939282805">Wavamizi kwenye <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> huenda wakakuhadaa ufanye kitu hatari kama vile kusakinisha programu au kuonyesha maelezo yako ya binafsi (kwa mfano, manenosiri, namba za simu au kadi za mikopo). <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="3748912308089554501">Sekta ya usafiri wa anga</translation> <translation id="3752543821772132562">Imepuuzwa kwa sababu <ph name="POLICY_NAME" /> haijawekwa.</translation> <translation id="3754210790023674521">Funga hali ya picha ndani ya picha</translation> @@ -1419,7 +1419,7 @@ <translation id="3799805948399000906">Imeomba fonti</translation> <translation id="3801265110651850478">Tuma ombi la “Usinifuatilie” pamoja na rekodi yako ya shughuli za kuvinjari</translation> <translation id="380329542618494757">Jina</translation> -<translation id="3806932344025766608">Huenda wadukuzi walio katika tovuti unayojaribu kutembelea wakakuhadaa ili usakinishe programu au ufichue vitu kama vile nenosiri, nambari ya simu au nambari ya kadi yako ya mikopo. Chrome inapendekeza sana urudi kwenye ukurasa salama. <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="3806932344025766608">Huenda wadukuzi walio katika tovuti unayojaribu kutembelea wakakuhadaa ili usakinishe programu au ufichue vitu kama vile nenosiri, namba ya simu au namba ya kadi yako ya mikopo. Chrome inapendekeza sana urudi kwenye ukurasa salama. <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="3807270098669886186">Watoa huduma za mawasiliano ya simu</translation> <translation id="3807366285948165054">Ugeuzaji wa Picha ya X</translation> <translation id="3807873520724684969">Imezuia maudhui hatari.</translation> @@ -1600,7 +1600,7 @@ <translation id="4203769790323223880">Ufikiaji wa kamera hauruhusiwi</translation> <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Kuangalia mipangilio ya kinga mtandao na kingavirusi<ph name="END_LINK" /></translation> <translation id="4209092469652827314">Kubwa</translation> -<translation id="4210602799576081649">Muda wa kutumia nambari hii ya kuthibitisha umeisha, omba utumiwe nambari mpya ya kuthibitisha</translation> +<translation id="4210602799576081649">Muda wa kutumia namba hii ya kuthibitisha umeisha, omba utumiwe namba mpya ya kuthibitisha</translation> <translation id="421066178035138955">Tumia data na vifaa vya uhalisia pepe</translation> <translation id="4213305257324635756">Filamu zilizohuishwa</translation> <translation id="4213500579045346575">Ujengaji misuli</translation> @@ -1730,7 +1730,7 @@ <translation id="4424024547088906515">Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; cheti chake cha usalama hakiaminiwi na Chrome. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako.</translation> <translation id="4425173294238317796">Laha ya uthibitishaji wa ufunguo wa siri</translation> <translation id="4425750422187370446">Mavazi ya Michezo</translation> -<translation id="443121186588148776">Mlango wa nambari ya ufuatiliaji</translation> +<translation id="443121186588148776">Mlango wa namba ya ufuatiliaji</translation> <translation id="4432688616882109544"><ph name="HOST_NAME" /> haikukubali cheti chako cha kuingia katika akaunti, au huenda hukutoa cheti.</translation> <translation id="4432792777822557199">Kurasa za <ph name="SOURCE_LANGUAGE" /> zitatafsiriwa katika <ph name="TARGET_LANGUAGE" /> kuanzia sasa</translation> <translation id="4433642172056592619">Imepuuzwa kwa sababu mtumiaji hahusishwi na udhibiti wa mashine au mashine haidhibitiwi.</translation> @@ -1841,7 +1841,7 @@ <translation id="4677585247300749148"><ph name="URL" /> inataka kushughulikia matukio ya zana za walio na matatizo ya kuona au kusikia</translation> <translation id="467809019005607715">Slaidi za Google</translation> <translation id="4682496302933121474">Ungependa kutafsiri ukurasa huu?</translation> -<translation id="468314109939257734">Angalia nambari yako ya kadi pepe</translation> +<translation id="468314109939257734">Angalia namba yako ya kadi pepe</translation> <translation id="4687718960473379118">Matangazo yanayopendekezwa na tovuti</translation> <translation id="469028408546145398">Kitufe cha 'Funga madirisha Fiche', washa ili ufunge madirisha yote Fiche yaliyofunguliwa kwa sasa</translation> <translation id="4691093235373904540">Uezekaji</translation> @@ -1876,7 +1876,7 @@ <translation id="4744603770635761495">Njia Tekelezi</translation> <translation id="4749011317274908093">Unavinjari katika hali fiche</translation> <translation id="4750671009706599284">simu hii</translation> -<translation id="4750917950439032686">Maelezo yako (kwa mfano, manenosiri, au nambari za kadi za mikopo) ni ya faragha yanapotumwa kwenye tovuti hii.</translation> +<translation id="4750917950439032686">Maelezo yako (kwa mfano, manenosiri, au namba za kadi za mikopo) ni ya faragha yanapotumwa kwenye tovuti hii.</translation> <translation id="4751249061288707459">Idhini ilisasishwa mara ya mwisho:</translation> <translation id="4751476147751820511">Vitambuzi vya mwendo au mwangaza</translation> <translation id="4754461935447132332">Hairuhusiwi kwenye tovuti zisizo salama</translation> @@ -1932,7 +1932,7 @@ <translation id="4850886885716139402">Mwonekano</translation> <translation id="4852429274334674023">Mifumo ya uendeshaji</translation> <translation id="4854853140771946034">Unda dokezo jipya katika Google Keep kwa haraka</translation> -<translation id="485902285759009870">Inathibitisha nambari...</translation> +<translation id="485902285759009870">Inathibitisha namba...</translation> <translation id="4864406669374375262">Imenakili mfuatano wa toleo kwenye ubao wa kunakili</translation> <translation id="486459320933704969">Ni lazima mzazi au mlezi akuruhusu kutembelea tovuti hii</translation> <translation id="4866506163384898554">Bonyeza |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| ili kuonyesha kiteuzi chako</translation> @@ -2077,7 +2077,7 @@ <translation id="5127934926273826089">Maua</translation> <translation id="5129534298163637277">Kidirisha cha kuthibitisha</translation> <translation id="5135404736266831032">Dhibiti anwani...</translation> -<translation id="5136841603454277753">Weka nambari sahihi ya kuthibitisha</translation> +<translation id="5136841603454277753">Weka namba sahihi ya kuthibitisha</translation> <translation id="5137761395480718572">Programu hii inaomba ruhusa ya kusakinisha vitambulisho vya Wi-Fi. Baada ya kuweka mipangilio, <ph name="DEVICE_TYPE" /> yako itaunganisha kiotomatiki kwenye mitandao ya Wi-Fi inayoshiriki. Ili uondoe vitambulisho hivi, ondoa programu. <ph name="LEARN_MORE" /></translation> <translation id="5138014172396933048">Kadi pepe haipatikani kwa sasa, tafadhali wasiliana na benki yako</translation> <translation id="5138227688689900538">Onyesha chache</translation> @@ -2151,7 +2151,7 @@ <translation id="5284295735376057059">Sifa za hati</translation> <translation id="528468243742722775">Mwisho</translation> <translation id="5285570108065881030">Onyesha manenosiri yote yaliyohifadhiwa</translation> -<translation id="5287456746628258573">Tovuti hii inatumia mipangilio ya usalama iliyopitwa na wakati, hali ambayo inaweza kuonyesha taarifa zako (kwa mfano, manenosiri au nambari za kadi za mikopo) zikitumwa kwenye tovuti hii.</translation> +<translation id="5287456746628258573">Tovuti hii inatumia mipangilio ya usalama iliyopitwa na wakati, hali ambayo inaweza kuonyesha taarifa zako (kwa mfano, manenosiri au namba za kadi za mikopo) zikitumwa kwenye tovuti hii.</translation> <translation id="5288108484102287882">Imethibitisha thamani za sera na kutoa maonyo</translation> <translation id="5288393065350884210">Uhasibu na ukaguzi</translation> <translation id="5289384342738547352">Kushughulikia hati nyingi</translation> @@ -2231,7 +2231,7 @@ <translation id="5463625433003343978">Inatafuta vifaa...</translation> <translation id="5464236009658034488">Vifaa vya Ofisi</translation> <translation id="5465724643247062031">Kioo (Kisichopitisha Mwanga)</translation> -<translation id="5466018172325111652">Je, hukupokea nambari ya kuthibitisha? <ph name="BEGIN_LINK" />Pata nambari mpya ya kuthibitisha<ph name="END_LINK" /></translation> +<translation id="5466018172325111652">Je, hukupokea namba ya kuthibitisha? <ph name="BEGIN_LINK" />Pata namba mpya ya kuthibitisha<ph name="END_LINK" /></translation> <translation id="5470230812924696184">Uhandisi wa ujenzi</translation> <translation id="5470861586879999274">Rudia kuhariri</translation> <translation id="5471337644440862957">Filamu za vichekesho</translation> @@ -2376,7 +2376,7 @@ <translation id="5743638595296120378">Ununuzi wa magari</translation> <translation id="5743898850056428078">Mashindano ya mbio za pikipiki</translation> <translation id="5745733273847572235">Inaweza kuomba maelezo ya mahali ulipo</translation> -<translation id="5745980000221562234">{NUM_CARDS,plural, =1{Tumia nambari pepe ya kadi hii}other{Chagua kadi}}</translation> +<translation id="5745980000221562234">{NUM_CARDS,plural, =1{Tumia namba pepe ya kadi hii}other{Chagua kadi}}</translation> <translation id="5752552348183096912">Marashi, pafyumu na manukato ya mwili</translation> <translation id="5754400531489347219">Wanyama vipenzi na wanyama wa kawaida</translation> <translation id="5759751709240058861">Kutumia na kusogeza kamera yako</translation> @@ -2384,7 +2384,7 @@ <translation id="5764725887548570807">Muundo halisi si sahihi.</translation> <translation id="5764920692828389743">Tuma kwa <ph name="EMAIL_ADDRESS" /></translation> <translation id="5765072501007116331">Chagua mahali ili uone njia za kusafirisha na mahitaji</translation> -<translation id="57689295674415555">Je, nambari ya kadi pepe haijajazwa?</translation> +<translation id="57689295674415555">Je, namba ya kadi pepe haijajazwa?</translation> <translation id="5772086939108830423">Tumia Ufunguo wa Siri kwenye Kifaa Tofauti</translation> <translation id="5776313857861697733">Kipaumbele</translation> <translation id="5776574724412881956">Je, kadi pepe haijajazwa? Bofya maelezo ya kadi pepe ili unakili kwenye ubao wa kunakili. <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation> @@ -2408,7 +2408,7 @@ <translation id="5813309815819933152">Vipindi vya televisheni vya maisha halisi</translation> <translation id="5813753398265398978">Fizikia</translation> <translation id="5817918615728894473">Oanisha</translation> -<translation id="5824687817967109979">{NUM_CARDS,plural, =1{Kadi hii itatozwa utakapolipa, lakini nambari yake halisi haitashirikiwa na tovuti hii. Kwa usalama zaidi, tutatengeneza CVC ya muda mfupi.}other{Kadi unayochagua itatozwa utakapolipa lakini, nambari yake halisi haitashirikiwa na tovuti hii. Kwa usalama zaidi, tutatengeneza CVC ya muda mfupi.}}</translation> +<translation id="5824687817967109979">{NUM_CARDS,plural, =1{Kadi hii itatozwa utakapolipa, lakini namba yake halisi haitashirikiwa na tovuti hii. Kwa usalama zaidi, tutatengeneza CVC ya muda mfupi.}other{Kadi unayochagua itatozwa utakapolipa lakini, namba yake halisi haitashirikiwa na tovuti hii. Kwa usalama zaidi, tutatengeneza CVC ya muda mfupi.}}</translation> <translation id="5826507051599432481">Jina la Kawaida (CN)</translation> <translation id="5829215001860862731">Hifadhi kwenye Akaunti</translation> <translation id="5830698870816298009">utumiaji na usogezaji wa kamera</translation> @@ -2708,7 +2708,7 @@ <translation id="6424600253695044005">Hifadhi ya Wingu</translation> <translation id="6425092077175753609">Usanifu bora</translation> <translation id="6427730057873428458">Mikunjo miwili sambamba</translation> -<translation id="6428450836711225518">Thibitisha nambari yako ya simu</translation> +<translation id="6428450836711225518">Thibitisha namba yako ya simu</translation> <translation id="6429267199680088961">A4 Tab</translation> <translation id="643051589346665201">Badilisha nenosiri la Google</translation> <translation id="6431119592588449664">Ripoti imepakiwa</translation> @@ -3324,7 +3324,7 @@ <translation id="7599089013883397081">Muda wa kupakua umeisha</translation> <translation id="7600965453749440009">Kamwe usitafsiri <ph name="LANGUAGE" /></translation> <translation id="7601297359530599375">Kwa kawaida huwa unaunganishwa kwenye tovuti hii kwa usalama, lakini Chrome haikuweza kutumia muunganisho salama wakati huu. Huenda mvamizi anajaribu kufuatilia au kurekebisha muunganisho wako wa mtandao. <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> -<translation id="7605377493722372900">Wadukuzi walio kwenye tovuti unayojaribu kutembelea huenda wakasakinisha programu hasidi inayoiba au kufuta vitu kama vile nenosiri, picha, ujumbe au nambari ya kadi yako ya mikopo.</translation> +<translation id="7605377493722372900">Wadukuzi walio kwenye tovuti unayojaribu kutembelea huenda wakasakinisha programu hasidi inayoiba au kufuta vitu kama vile nenosiri, picha, ujumbe au namba ya kadi yako ya mikopo.</translation> <translation id="7610193165460212391">Thamani imezidi masafa<ph name="VALUE" />.</translation> <translation id="7613889955535752492">Muda wa matumizi utakwisha: <ph name="EXPIRATION_MONTH" /> / <ph name="EXPIRATION_YEAR" /></translation> <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, bonyeza 'Tab' kisha 'Enter' ili uangalie na udhibiti manenosiri yako katika mipangilio ya Chrome</translation> @@ -3439,7 +3439,7 @@ <translation id="7802989406998618639">Weka msimbo wa usalama wenye tarakimu <ph name="NUMBER_OF_DIGITS" /> ulio katika <ph name="SIDE_OF_CARD" /> ili benki yako iweze kuthibitisha ni kuwa wewe</translation> <translation id="780301667611848630">Hapana</translation> <translation id="7805768142964895445">Hali</translation> -<translation id="7810410097247356677">Ili ulipe haraka wakati ujao, hifadhi kadi na nambari yako ya usalama iliyosimbwa kwa njia fiche kwenye kifaa chako</translation> +<translation id="7810410097247356677">Ili ulipe haraka wakati ujao, hifadhi kadi na namba yako ya usalama iliyosimbwa kwa njia fiche kwenye kifaa chako</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Ungependa kuondoa pendekezo la fomu kutoka kwenye Chrome?</translation> <translation id="781440967107097262">Ungependa kushiriki ubao wa kunakili?</translation> @@ -3476,7 +3476,7 @@ <translation id="7927971017714848357">Maeneo na mashamba yasiyoendelezwa</translation> <translation id="793209273132572360">Ungependa kusasisha anwani?</translation> <translation id="7932579305932748336">Koleza</translation> -<translation id="79338296614623784">Andika nambari sahihi ya simu</translation> +<translation id="79338296614623784">Andika namba sahihi ya simu</translation> <translation id="7934414805353235750"><ph name="URL" /> inataka kucheza maudhui yanayolindwa. Kitambulisho cha kifaa chako kitathibitishwa na Google.</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7937163678541954811">CVC ya kadi hii itasimbwa kwa njia fiche na kuhifadhiwa kwenye kifaa chako ili ulipe kwa haraka</translation> @@ -3531,7 +3531,7 @@ <translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation> <translation id="8022542098135319050">Wakala wa Safari na Huduma</translation> <translation id="8023231537967344568"><ph name="SET_CHROME_AS_DEFAULT_BROWSER_FOCUSED_FRIENDLY_MATCH_TEXT" />, Bonyeza 'Tab' kisha 'Enter' ili uifanye Chrome iwe kivinjari chaguomsingi cha mfumo</translation> -<translation id="8025119109950072390">Wavamizi kwenye tovuti hii wanaweza kukulaghai ili ufanye kitu hatari kama vile kusakinisha programu au kuonyesha maelezo yako binafsi (kwa mfano, manenosiri, nambari za simu au kadi za mikopo).</translation> +<translation id="8025119109950072390">Wavamizi kwenye tovuti hii wanaweza kukulaghai ili ufanye kitu hatari kama vile kusakinisha programu au kuonyesha maelezo yako binafsi (kwa mfano, manenosiri, namba za simu au kadi za mikopo).</translation> <translation id="8026334261755873520">Futa data ya kuvinjari</translation> <translation id="8027077570865220386">Trei ya 15</translation> <translation id="8027585818882015174">Kitufe cha 'Fanya ukaguzi wa usalama kwenye Chrome', washa ili ufanye ukaguzi wa usalama katika mipangilio ya Chrome</translation> @@ -3686,7 +3686,7 @@ <translation id="8296205692406981542">Hifadhi na bustani za maeneo</translation> <translation id="8297545700510100061">Vidakuzi na data nyingine ya tovuti hutumika kukumbuka taarifa zako, kwa mfano kukufanya uingie katika akaunti au kuweka mapendeleo ya matangazo. Ili udhibiti vidakuzi vya tovuti zote, angalia <ph name="SETTINGS" />.</translation> <translation id="8298115750975731693">Wi-Fi unayotumia (<ph name="WIFI_NAME" />) inaweza kukuhitaji kutembelea <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation> -<translation id="8301894345671534559">Weka nambari ya kuthibitisha</translation> +<translation id="8301894345671534559">Weka namba ya kuthibitisha</translation> <translation id="8303854710873047864">Sehemu ya "<ph name="SECTION" />" imeonyeshwa</translation> <translation id="830498451218851433">Kunja nusu</translation> <translation id="8308653357438598313">Utiririshaji wa Video wa Moja kwa Moja</translation> @@ -3716,7 +3716,7 @@ <translation id="8368001212524806591">Fuatilia bei</translation> <translation id="8368027906805972958">Kifaa kisichojulikana au kisichotumika (<ph name="DEVICE_ID" />)</translation> <translation id="8368476060205742148">Huduma za Google Play</translation> -<translation id="8369073279043109617">Pata nambari mpya ya kuthibitisha</translation> +<translation id="8369073279043109617">Pata namba mpya ya kuthibitisha</translation> <translation id="8371841335382565017">Onyesha orodha ya kifaa ya kutuma maudhui</translation> <translation id="8371889962595521444">Vyeti maalum vya msingi</translation> <translation id="8374636051559112948">Unatofautiana</translation> @@ -3739,7 +3739,7 @@ <translation id="8412392972487953978">Lazima uingize kaulisiri ile ile mara mbili.</translation> <translation id="8416694386774425977">Mipangilio ya mtandao si sahihi na haikuweza kupakiwa. Maelezo ya ziada: <ph name="DEBUG_INFO" /></translation> <translation id="8416874502399604126">Maikrofoni inaruhusiwa wakati huu</translation> -<translation id="8422228580902424274">Huenda wadukuzi walio katika tovuti hii wanajaribu kukuhadaa ili usakinishe programu au ufichue vitu kama vile nenosiri, nambari ya simu au nambari ya kadi yako ya mikopo.</translation> +<translation id="8422228580902424274">Huenda wadukuzi walio katika tovuti hii wanajaribu kukuhadaa ili usakinishe programu au ufichue vitu kama vile nenosiri, namba ya simu au namba ya kadi yako ya mikopo.</translation> <translation id="8424582179843326029"><ph name="FIRST_LABEL" /> <ph name="SECOND_LABEL" /> <ph name="THIRD_LABEL" /></translation> <translation id="8425213833346101688">Badilisha</translation> <translation id="8427848540066057481">Milimita 500 x 750</translation> @@ -3898,7 +3898,7 @@ <translation id="8737685506611670901">Kufungua viungo vya <ph name="PROTOCOL" /> badala ya <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8738058698779197622">Ili kutambua muunganisho salama, saa yako inahitaji kuwekwa sahihi. Hii ni kwa sababu vyeti ambavyo tovuti hutumia kujitambua ni sahihi kwa vipindi mahususi pekee. Kwa kuwa saa ya kifaa chako si sahihi, Chromium haiwezi kuthibitisha vyeti hivi.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> <abbr id="dnsDefinition">anwani ya DNS</abbr> haikupatikana. Tatizo linachunguzwa.</translation> -<translation id="8742371904523228557"><ph name="ONE_TIME_CODE" /> ni nambari yako ya <ph name="ORIGIN" /></translation> +<translation id="8742371904523228557"><ph name="ONE_TIME_CODE" /> ni namba yako ya <ph name="ORIGIN" /></translation> <translation id="874918643257405732">Alamisha kichupo hiki</translation> <translation id="8751426954251315517">Tafadhali jaribu tena baadaye</translation> <translation id="8753913772043329557">Kumbukumbu za Sera</translation> @@ -3966,7 +3966,7 @@ <translation id="8870700989640064057">Ungependa kuchapisha faili ya siri?</translation> <translation id="8871553383647848643">Weka mapendeleo ya mwonekano wa kivinjari chako</translation> <translation id="8874790741333031443">Jaribu kuruhusu kwa muda vidakuzi vya washirika wengine, hatua hii inamaanisha kuwa ulinzi wa kuvinjari utapungua lakini vipengele vya tovuti vina uwezekano mkubwa wa kufanya kazi inavyotarajiwa.</translation> -<translation id="8874824191258364635">Andika nambari sahihi ya kadi</translation> +<translation id="8874824191258364635">Andika namba sahihi ya kadi</translation> <translation id="8876033571432926051">Michezo ya kawaida</translation> <translation id="8877780815363510165">Uvuvi</translation> <translation id="8884537526797090108">Huwezi kurekodi maudhui ya siri</translation> @@ -4001,7 +4001,7 @@ <translation id="8968766641738584599">Hifadhi kadi</translation> <translation id="8970887620466824814">Hitilafu imetokea.</translation> <translation id="8971063699422889582">Cheti cha seva kimechina.</translation> -<translation id="8975012916872825179">Hujumuisha maelezo kama nambari za simu, anwani za barua pepe na anwani za mahali bidhaa zitakapopelekwa</translation> +<translation id="8975012916872825179">Hujumuisha maelezo kama namba za simu, anwani za barua pepe na anwani za mahali bidhaa zitakapopelekwa</translation> <translation id="8975263830901772334">Majina ya faili ambazo unachapisha</translation> <translation id="8978053250194585037">Mfumo wa Kuvinjari Salama kwenye Google umegundua <ph name="BEGIN_LINK" />jaribio la kuiba data ya binafsi<ph name="END_LINK" /> kwenye <ph name="SITE" /> hivi majuzi. Tovuti zanazoiba data ya binafsi huiga tovuti nyingine ili kukuhadaa.</translation> <translation id="8982884016487650216">Imekamilisha kupakia PDF</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 86b3126..bfd9ef5 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -344,6 +344,7 @@ <translation id="1633941398432788136">ఈవెంట్ ప్లానింగ్</translation> <translation id="1634828734222219955">మొత్తం</translation> <translation id="163669211644121865">ట్యాక్స్ రూపకల్పన & ప్లానింగ్</translation> +<translation id="163826442096818926">షార్ట్గా చేయండి</translation> <translation id="1639239467298939599">లోడ్ చేస్తోంది</translation> <translation id="1640180200866533862">వినియోగదారు విధానాలు</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />సైట్ యొక్క హోమ్పేజీని సందర్శించడం<ph name="END_LINK" /> ప్రయత్నించండి.</translation> @@ -719,6 +720,7 @@ <translation id="238459632961158867">వెబ్సైట్</translation> <translation id="2385809941344967209">మీ Chrome సెట్టింగ్ల నుండి Chromeను అప్డేట్ చేయండి</translation> <translation id="2386255080630008482">సర్వర్ ప్రమాణపత్రం రద్దు చేయబడింది.</translation> +<translation id="239203817277685015">విశదీకరించండి</translation> <translation id="239293030466334554">కన్వర్టిబుల్స్</translation> <translation id="2392959068659972793">విలువ సెట్ చేయని విధానాలను చూపు</translation> <translation id="239429038616798445">ఈ రవాణా పద్ధతి అందుబాటులో లేదు. వేరే పద్ధతిని ప్రయత్నించండి.</translation> @@ -966,6 +968,7 @@ <translation id="2938225289965773019"><ph name="PROTOCOL" /> లింక్లను తెరవండి</translation> <translation id="2941878205777356567">9 x 12 అంగుళాల ఎన్వలప్</translation> <translation id="2941952326391522266">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం <ph name="DOMAIN2" /> నుండి జారీ చేయబడింది. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation> +<translation id="2942492342931589800">సాధారణం</translation> <translation id="2942515540157583425">IT & టెక్నికల్ ఉద్యోగాలు</translation> <translation id="2943895734390379394">అప్లోడ్ సమయం:</translation> <translation id="2945026002409061480">ఆన్లైన్ కమ్యూనిటీలు</translation> @@ -1226,6 +1229,7 @@ <translation id="3447661539832366887">ఈ పరికర యజమాని డైనోసార్ గేమ్ను ఆఫ్ చేశారు.</translation> <translation id="3447884698081792621">సర్టిఫికేట్ను చూపు (<ph name="ISSUER" /> ద్వారా జారీ చేయబడింది)</translation> <translation id="3450323514459570273">మీ MIDI పరికరాలను కంట్రోల్ చేయడానికి, రీప్రోగ్రామ్ చేయమని అడగవచ్చు</translation> +<translation id="3452151267620065789">ప్రోగ్రెస్ సేవ్ అయ్యింది</translation> <translation id="3452404311384756672">విరామాన్ని పొందండి:</translation> <translation id="3453962258458347894">పునఃప్రయత్నాల సంఖ్య</translation> <translation id="3461266716147554923"><ph name="URL" /> క్లిప్బోర్డ్కు కాపీ చేసిన వచనం మరియు చిత్రాలను చూడాలనుకుంటోంది.</translation> @@ -1309,6 +1313,7 @@ <translation id="361438452008624280">లిస్ట్ నమోదు "<ph name="LANGUAGE_ID" />": తెలియని లేదా మద్దతు లేని భాష.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome సెట్టింగ్లలో భద్రతా తనిఖీని రన్ చేయడానికి 'Tab'ను నొక్కి ఆపై 'Enter'ను నొక్కండి</translation> <translation id="3615309852743236517">మ్యానిక్యూర్లు & పెడిక్యూర్లు</translation> +<translation id="3617072447978270288">రీ-జెనరేట్ చేయండి</translation> <translation id="3620239073311576716">యూనిఫామ్లు & పనికి వెళ్లేటపుడు వేసుకునే దుస్తులు</translation> <translation id="36224234498066874">బ్రౌజింగ్ డేటాను క్లియర్ చేయండి...</translation> <translation id="362276910939193118">పూర్తి హిస్టరీని చూపించు</translation> @@ -1331,6 +1336,7 @@ <translation id="3650594806107685466">మీ కార్డ్ను సురక్షితంగా ఉంచడంలో సహాయపడటానికి, <ph name="SIDE_OF_CARD" /> ఉన్న CVCని ఎంటర్ చేయండి</translation> <translation id="3650917416636556301">హైకింగ్ & క్యాంపింగ్</translation> <translation id="3653033846669030038">థీమ్ పార్క్లు</translation> +<translation id="3654980960391973513">జెనరేట్ చేయండి</translation> <translation id="3655241534245626312">అనుమతి సెట్టింగ్లకు వెళ్లండి</translation> <translation id="3655670868607891010">మీరు దీన్ని తరచుగా చూస్తుంటే, ఈ <ph name="HELP_LINK" />ని ప్రయత్నించండి.</translation> <translation id="365641980390710834">సాధారణ దుస్తులు</translation> @@ -2566,6 +2572,7 @@ <translation id="6157754950574419155">హిస్టరీ నుండి అన్నింటినీ తీసివేయండి</translation> <translation id="6157877588268064908">రవాణా పద్ధతులు మరియు అవసరాలను చూడాలంటే, అడ్రస్ను ఎంచుకోండి</translation> <translation id="6159554577634054750">తెగుళ్ల నియంత్రణ</translation> +<translation id="6159908896951210943">గౌరవప్రదం</translation> <translation id="6160391204859821737">యాడ్ల విషయంలో గోప్యత ఫీచర్ను ఆన్ చేయండి</translation> <translation id="6165508094623778733">మరింత తెలుసుకోండి</translation> <translation id="6167577165590485365">చివరిగా పొందడానికి ప్రయత్నించింది:</translation> @@ -3211,6 +3218,7 @@ <translation id="7422347648202898039">లేబుల్స్ (సెక్యూరిటీ)</translation> <translation id="7423283032694727565">'కుక్కీలను మేనేజ్ చేయండి' బటన్, Chrome సెట్టింగ్లలో మీ కుక్కీ ప్రాధాన్యతలను మేనేజ్ చేయడానికి దీన్ని యాక్టివేట్ చేయండి</translation> <translation id="7424421098814895617">అడ్రస్ను తొలగించే ఆప్షన్ను ఎంచుకున్నారు</translation> +<translation id="7425037327577270384">రాయడంలో నాకు సహాయపడండి</translation> <translation id="7427366580982928791">పిల్లలకు ఇంటర్నెట్ భద్రత</translation> <translation id="7429429656042611765">ఎగ్జిక్యూటివ్</translation> <translation id="7432774160230062882">ఇది మీరేనని వెరిఫై చేయండి, తద్వారా Chromium మీ పేమెంట్ సమాచారాన్ని ఫిల్ చేయగలదు.</translation> @@ -3277,6 +3285,7 @@ <translation id="7529884293139707752">ఇంటి వద్దనే చదువు నేర్చుకోవడం</translation> <translation id="7534987659046836932">ఎన్వలప్ C7</translation> <translation id="7535087603100972091">విలువ</translation> +<translation id="753556296624075801">Google అందిస్తోంది</translation> <translation id="7537536606612762813">తప్పనిసరి</translation> <translation id="7542995811387359312">ఈ ఫారమ్ సురక్షిత కనెక్షన్ను ఉపయోగించనందున క్రెడిట్ కార్డ్ వివరాలను ఆటోమేటిక్గా పూర్తి చేయడం ఆపివేయబడింది.</translation> <translation id="7543525346216957623">మీ తల్లి/తండ్రిని అడగండి</translation> @@ -3460,6 +3469,7 @@ <translation id="7871445724586827387">మీ Google ఖాతా పాస్వర్డ్ను మార్చండి</translation> <translation id="7877007680666472091">సురక్షితమైన కంటెంట్ IDలు</translation> <translation id="7878562273885520351">మీ పాస్వర్డ్ ఎవరికైనా తెలిసిపోయి ఉండవచ్చు</translation> +<translation id="7878966190323222027">కొనసాగించడానికి మళ్లీ తెరవండి</translation> <translation id="7880146494886811634">అడ్రస్ను సేవ్ చేయండి</translation> <translation id="7882421473871500483">గోధుమ రంగు</translation> <translation id="7882995332186050355">సరుకు రవాణా చేసే ట్రక్కులు & ట్రయిలర్లు</translation> @@ -3989,6 +3999,7 @@ <translation id="8942355029279167844">ప్రోడక్ట్ అనుభవాన్ని మెరుగుపరచడం కోసం, <ph name="APP_NAME" />కు సమస్య విశ్లేషణ డేటాను సేకరించడానికి మీ అడ్మినిస్ట్రేటర్ అనుమతిచ్చారు. మరింత సమాచారం కోసం <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" />ను చూడండి.</translation> <translation id="8943282376843390568">నిమ్మపండు రంగు</translation> <translation id="8944485226638699751">పరిమితం</translation> +<translation id="8949410982325929394">టోన్</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">చట్టం & ప్రభుత్వం</translation> <translation id="8954252855949068147">దుస్తులు</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 71a4101..fd39e31 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Планування подій</translation> <translation id="1634828734222219955">Усього</translation> <translation id="163669211644121865">Підготовка та планування податків</translation> +<translation id="163826442096818926">Лаконічний</translation> <translation id="1639239467298939599">Завантаження</translation> <translation id="1640180200866533862">Правила користувача</translation> <translation id="1640244768702815859">Спробуйте <ph name="BEGIN_LINK" />відкрити головну сторінку цього сайту<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Веб-сайт</translation> <translation id="2385809941344967209">Оновити веб-переглядач Chrome у його налаштуваннях</translation> <translation id="2386255080630008482">Сертифікат сервера відкликано.</translation> +<translation id="239203817277685015">Докладний</translation> <translation id="239293030466334554">Кабріолети</translation> <translation id="2392959068659972793">Показувати правила, для яких не встановлено значення</translation> <translation id="239429038616798445">Цей спосіб відправлення недоступний. Виберіть інший спосіб.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Відкрити посилання протоколу <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Конверт 9 x 12 дюймів</translation> <translation id="2941952326391522266">Цей сервер не зміг довести, що він – домен <ph name="DOMAIN" />. Його сертифікат безпеки походить із домену <ph name="DOMAIN2" />. Імовірні причини: неправильна конфігурація або хтось намагається перехопити ваше з’єднання.</translation> +<translation id="2942492342931589800">Невимушений</translation> <translation id="2942515540157583425">Вакансії у сфері інформаційних технологій і комп’ютерної техніки</translation> <translation id="2943895734390379394">Час завантаження:</translation> <translation id="2945026002409061480">Онлайн-спільноти</translation> @@ -1219,6 +1222,7 @@ <translation id="3432601291244612633">Закрити сторінку</translation> <translation id="3433111389595862568">Програмне забезпечення для спільної роботи й відеоконференцій</translation> <translation id="3433144818443565002">Голосові й відеочати</translation> +<translation id="3434025015623587566">Google Менеджеру паролів потрібен додатковий доступ</translation> <translation id="343474037147570563">Файли, які ви додаєте або долучаєте, надсилаються на аналіз у Google Cloud або стороннім сервісам. Наприклад, їх можуть сканувати на наявність конфіденційних даних або зловмисного програмного забезпечення, а також зберігати відповідно до правил компанії. Крім того, їх може переглядати адміністратор.</translation> <translation id="3435557549311968410">Безперервний друк (короткий)</translation> <translation id="3435738964857648380">Безпека</translation> @@ -1231,6 +1235,7 @@ <translation id="3447661539832366887">Власник цього пристрою вимкнув гру з динозавром.</translation> <translation id="3447884698081792621">Показати сертифікат (видавець: <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">Може просити дозвіл керувати пристроями MIDI й перепрограмовувати їх</translation> +<translation id="3452151267620065789">Прогрес збережено</translation> <translation id="3452404311384756672">Інтервал отримання:</translation> <translation id="3453962258458347894">Кількість повторних спроб</translation> <translation id="3461266716147554923">Сайт <ph name="URL" /> хоче переглядати тексти й зображення в буфері обміну</translation> @@ -1314,6 +1319,7 @@ <translation id="361438452008624280">Пункт списку <ph name="LANGUAGE_ID" />: мова невідома або не підтримується.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />; натисніть Tab, а потім – Enter, щоб виконати перевірку безпеки в налаштуваннях Chrome</translation> <translation id="3615309852743236517">Манікюр і педикюр</translation> +<translation id="3617072447978270288">Згенерувати повторно</translation> <translation id="3620239073311576716">Уніформа й робочий одяг</translation> <translation id="36224234498066874">Очистити історію…</translation> <translation id="362276910939193118">Показати всю історію</translation> @@ -1336,6 +1342,7 @@ <translation id="3650594806107685466">Для захисту введіть код CVC, указаний на <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Піший туризм і автотуризм</translation> <translation id="3653033846669030038">Тематичні парки</translation> +<translation id="3654980960391973513">Створити</translation> <translation id="3655241534245626312">Перейти на сторінку дозволів</translation> <translation id="3655670868607891010">Якщо ви бачите це часто, спробуйте <ph name="HELP_LINK" />.</translation> <translation id="365641980390710834">Повсякденний одяг</translation> @@ -1968,6 +1975,7 @@ <translation id="4918221908152712722">Установіть додаток <ph name="APP_NAME" /> (його не потрібно завантажувати)</translation> <translation id="4920457992177678649">Оренда житла для відпочинку й короткотермінового проживання</translation> <translation id="4920710383559189047">Накладки</translation> +<translation id="4922104989726031751">Щоб використовувати Менеджер паролів у вашій операційній системі, перезапустіть Chromium і надайте доступ до додатка, що керує паролями на цьому комп’ютері. Після перезапуску поточні вкладки відкриються знову.</translation> <translation id="4923459931733593730">Оплата</translation> <translation id="4926049483395192435">Потрібно вказати.</translation> <translation id="4926159001844873046">Повідомлення з <ph name="SITE" /></translation> @@ -2571,6 +2579,7 @@ <translation id="6157754950574419155">Видалити всю історію</translation> <translation id="6157877588268064908">Укажіть адресу, щоб переглянути способи відправлення та вимоги.</translation> <translation id="6159554577634054750">Боротьба зі шкідниками</translation> +<translation id="6159908896951210943">Формальний</translation> <translation id="6160391204859821737">Увімкнути функції конфіденційності в рекламі</translation> <translation id="6165508094623778733">Докладніше</translation> <translation id="6167577165590485365">Остання спроба отримання:</translation> @@ -2608,6 +2617,7 @@ <translation id="6234122620015464377">Обрізати після кожного документа</translation> <translation id="6236290670123303279">Керувати налаштуваннями</translation> <translation id="6240447795304464094">Логотип Google Pay</translation> +<translation id="6240964651812394252">Щоб використовувати Менеджер паролів у вашій операційній системі, перезапустіть Chrome і надайте доступ до додатка, що керує паролями на цьому комп’ютері. Після перезапуску поточні вкладки відкриються знову.</translation> <translation id="6241121617266208201">Сховати пропозиції</translation> <translation id="624499991300733384">Сервіс компонування друку</translation> <translation id="6251906504834538140">{0,plural, =1{Файл заборонено переміщувати}one{<ph name="FILE_COUNT" /> файл заборонено переміщувати}few{<ph name="FILE_COUNT" /> файли заборонено переміщувати}many{<ph name="FILE_COUNT" /> файлів заборонено переміщувати}other{<ph name="FILE_COUNT" /> файлу заборонено переміщувати}}</translation> @@ -2618,6 +2628,7 @@ <translation id="6263376278284652872">Закладки <ph name="DOMAIN" /></translation> <translation id="6264376385120300461">Усе одно завантажити</translation> <translation id="6264485186158353794">Повернутися на безпечну сторінку</translation> +<translation id="6264636978858465832">Менеджеру паролів потрібен додатковий доступ</translation> <translation id="6265794661083428563">Скопіювати значення правила <ph name="POLICY_NAME" /></translation> <translation id="6266934640124581640">Світло-бірюзовий</translation> <translation id="6270066318535733958">Веслувальний спорт</translation> @@ -3216,6 +3227,7 @@ <translation id="7422347648202898039">Етикетки (захисні)</translation> <translation id="7423283032694727565">Кнопка "Керувати файлами cookie"; активуйте, щоб керувати параметрами файлів cookie в налаштуваннях Chrome</translation> <translation id="7424421098814895617">Вибрано опцію "Видалити адресу"</translation> +<translation id="7425037327577270384">Допомога з текстом</translation> <translation id="7427366580982928791">Безпека дітей в Інтернеті</translation> <translation id="7429429656042611765">Executive</translation> <translation id="7432774160230062882">Підтвердьте свою особу в Chromium, щоб автоматично заповнити платіжну інформацію.</translation> @@ -3282,6 +3294,7 @@ <translation id="7529884293139707752">Домашнє навчання</translation> <translation id="7534987659046836932">Конверт C7</translation> <translation id="7535087603100972091">Яскравість</translation> +<translation id="753556296624075801">Технологія Google</translation> <translation id="7537536606612762813">Обов’язкове</translation> <translation id="7542995811387359312">Автоматичне заповнення кредитної картки вимкнено, оскільки ця форма не використовує безпечне з'єднання.</translation> <translation id="7543525346216957623">Попросіть когось із батьків</translation> @@ -3465,6 +3478,7 @@ <translation id="7871445724586827387">Змініть пароль облікового запису Google</translation> <translation id="7877007680666472091">ідентифікатори захищеного контенту</translation> <translation id="7878562273885520351">Ваш пароль можуть зламати</translation> +<translation id="7878966190323222027">Щоб продовжити, відкрийте знову</translation> <translation id="7880146494886811634">Збережіть адресу</translation> <translation id="7882421473871500483">Коричневий</translation> <translation id="7882995332186050355">Вантажні автомобілі й трейлери</translation> @@ -3995,6 +4009,7 @@ <translation id="8942355029279167844">Адміністратор надав додатку <ph name="APP_NAME" /> дозвіл збирати дані діагностики, щоб покращувати роботу продукту. Докладніше читайте на сторінці <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" />.</translation> <translation id="8943282376843390568">Лаймовий</translation> <translation id="8944485226638699751">Обмежено</translation> +<translation id="8949410982325929394">Тон</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Закон і уряд</translation> <translation id="8954252855949068147">Одяг</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb index aea1a50..18be061 100644 --- a/components/strings/components_strings_uz.xtb +++ b/components/strings/components_strings_uz.xtb
@@ -348,6 +348,7 @@ <translation id="1633941398432788136">Tadbirlarni rejalashtirish</translation> <translation id="1634828734222219955">Jami</translation> <translation id="163669211644121865">Soliqlarni rejalashtirish</translation> +<translation id="163826442096818926">Qisqartirish</translation> <translation id="1639239467298939599">Yuklanmoqda</translation> <translation id="1640180200866533862">Foydalanuvchi qoidalari</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />Saytning bosh sahifasiga kirishga<ph name="END_LINK" /> urinib ko‘ring.</translation> @@ -723,6 +724,7 @@ <translation id="238459632961158867">Sayt</translation> <translation id="2385809941344967209">Chrome brauzerini Chrome sozlamalari orqali yangilash</translation> <translation id="2386255080630008482">Server sertifikati bekor qilingan.</translation> +<translation id="239203817277685015">Aniqlashtirish</translation> <translation id="239293030466334554">Kabrioletlar</translation> <translation id="2392959068659972793">Qiymati belgilanmagan qoidalarni ko‘rsatish</translation> <translation id="239429038616798445">Bu yetkazib berish usuli hozirda ishlamaydi. Boshqa usulni tanlang.</translation> @@ -970,6 +972,7 @@ <translation id="2938225289965773019"><ph name="PROTOCOL" /> havolalarini ochish</translation> <translation id="2941878205777356567">Envelope 9 x 12 in</translation> <translation id="2941952326391522266">Bu <ph name="DOMAIN" /> serveri ekanligini tasdiqlab bo‘lmadi. Uning havfsizlik sertifikati <ph name="DOMAIN2" /> tomonidan berilgan. Server noto‘g‘ri sozlangan yoki kimdir ma’lumotlaringizni o‘g‘rilashga urinayotgan bo‘lishi mumkin.</translation> +<translation id="2942492342931589800">Erkin</translation> <translation id="2942515540157583425">IT va texnik sohadagi vakansiyalar</translation> <translation id="2943895734390379394">Yuklash vaqti:</translation> <translation id="2945026002409061480">Onlayn hamjamiyatlar</translation> @@ -1229,6 +1232,7 @@ <translation id="3447661539832366887">Bu qurilmaning egasi dinozavr o‘yinini o‘chirib qo‘ygan.</translation> <translation id="3447884698081792621">Sertifikatni ko‘rsatish (noshir: <ph name="ISSUER" />)</translation> <translation id="3450323514459570273">MIDI qurilmalarini boshqarish va qayta dasturlash uchun ruxsat soʻrashi mumkin</translation> +<translation id="3452151267620065789">Jarayon saqlandi</translation> <translation id="3452404311384756672">Yuklash oralig‘i:</translation> <translation id="3453962258458347894">Qayta urinishlar soni</translation> <translation id="3461266716147554923"><ph name="URL" /> klipbordga nusxalangan matn va rasmlarni ko‘rmoqchi</translation> @@ -1311,6 +1315,7 @@ <translation id="361438452008624280">“<ph name="LANGUAGE_ID" />” qiymati: Notanish yoki mos kelmaydigan til.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome sozlamalari orqali xavfsizlik tekshiruvini bajarish uchun avval Tab, keyin Enter tugmalarini bosing</translation> <translation id="3615309852743236517">Manikyur va pedikyurlar</translation> +<translation id="3617072447978270288">Qayta yaralish</translation> <translation id="3620239073311576716">Uniforma va ishchi kiyimlar</translation> <translation id="36224234498066874">Brauzer tarixini tozalash...</translation> <translation id="362276910939193118">To‘liq tarixni ko‘rsatish</translation> @@ -1332,6 +1337,7 @@ <translation id="3650594806107685466">Kartani himoyalash uchun uning <ph name="SIDE_OF_CARD" /> tomonidagi CVC kodni kiriting.</translation> <translation id="3650917416636556301">Sayr va kemping</translation> <translation id="3653033846669030038">Tematik parklar</translation> +<translation id="3654980960391973513">Yaratish</translation> <translation id="3655241534245626312">Ruxsat sozlamalarini ochish</translation> <translation id="3655670868607891010">Agar bu muammo tez-tez qaytarilib tursa, yechimini <ph name="HELP_LINK" /> sahifasidan izlang.</translation> <translation id="365641980390710834">Kazual kiyim-kechak</translation> @@ -2567,6 +2573,7 @@ <translation id="6157754950574419155">Barchasini tarixdan olib tashlash</translation> <translation id="6157877588268064908">Yetkazib berish usuli va talablari bilan tanishish uchun manzilni tanlang</translation> <translation id="6159554577634054750">Zararkunandalarga qarshi kurash</translation> +<translation id="6159908896951210943">Rasmiy</translation> <translation id="6160391204859821737">Reklamalarda maxfiylik funksiyasini yoqing</translation> <translation id="6165508094623778733">Batafsil</translation> <translation id="6167577165590485365">Oxirgi olishga urinish:</translation> @@ -3214,6 +3221,7 @@ <translation id="7422347648202898039">Yorliqlar (himoyalangan)</translation> <translation id="7423283032694727565">Cookie fayllarni boshqarish tugmasi, Chrome sozlamalari orqali cookie parametrlarini boshqarish uchun faollashtiring</translation> <translation id="7424421098814895617">Manzilni oʻchirish tanlandi</translation> +<translation id="7425037327577270384">Yozishda yordam ber</translation> <translation id="7427366580982928791">Bolalar uchun xavfsiz internet</translation> <translation id="7429429656042611765">Ijrochi</translation> <translation id="7432774160230062882">Chromium toʻlov axborotini kiritishi uchun shaxsingizni tasdiqlang.</translation> @@ -3280,6 +3288,7 @@ <translation id="7529884293139707752">Uyda yakka tartibda taʼlim</translation> <translation id="7534987659046836932">Envelope C7</translation> <translation id="7535087603100972091">Qiymat</translation> +<translation id="753556296624075801">Google texnologiyalarida ishlaydi</translation> <translation id="7537536606612762813">Majburiy</translation> <translation id="7542995811387359312">Bank kartasi ma’lumotlari avtomatik to‘ldirilishi o‘chiq, chunki bu saytdagi ulanish himoyalanmagan.</translation> <translation id="7543525346216957623">Ota-onangizdan so‘rang</translation> @@ -3463,6 +3472,7 @@ <translation id="7871445724586827387">Google hisobi parolini oʻzgartirish</translation> <translation id="7877007680666472091">himoyalangan kontent identifikatori</translation> <translation id="7878562273885520351">Parolingiz o‘g‘irlangan bo‘lishi mumkin</translation> +<translation id="7878966190323222027">Qaytadan ochib, davom ettiring</translation> <translation id="7880146494886811634">Manzilni saqlash</translation> <translation id="7882421473871500483">Jigarrang</translation> <translation id="7882995332186050355">Yuk mashinalari va tirkamalar</translation> @@ -3992,6 +4002,7 @@ <translation id="8942355029279167844">Mahsulot sifatini yaxshilash maqsadida <ph name="APP_NAME" /> diagnostika maʼlumotlarini jamlashiga Administrator tomonidan ruxsat berildi. Batafsil: <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" />.</translation> <translation id="8943282376843390568">Laym</translation> <translation id="8944485226638699751">Cheklangan</translation> +<translation id="8949410982325929394">Tovush</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Qonun va hukumat</translation> <translation id="8954252855949068147">Kiyim-kechak</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 2523de2..4eeae37 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -349,6 +349,7 @@ <translation id="1633941398432788136">Lập kế hoạch sự kiện</translation> <translation id="1634828734222219955">Tổng cộng</translation> <translation id="163669211644121865">Lập kế hoạch và chuẩn bị hồ sơ thuế</translation> +<translation id="163826442096818926">Rút ngắn</translation> <translation id="1639239467298939599">Đang tải</translation> <translation id="1640180200866533862">Chính sách người dùng</translation> <translation id="1640244768702815859">Hãy thử <ph name="BEGIN_LINK" />truy cập trang chủ của trang web<ph name="END_LINK" />.</translation> @@ -724,6 +725,7 @@ <translation id="238459632961158867">Trang web</translation> <translation id="2385809941344967209">Cập nhật Chrome từ phần cài đặt của Chrome</translation> <translation id="2386255080630008482">Chứng chỉ của máy chủ đã bị thu hồi.</translation> +<translation id="239203817277685015">Chi tiết</translation> <translation id="239293030466334554">Xe mui trần</translation> <translation id="2392959068659972793">Hiển thị chính sách không có giá trị được đặt</translation> <translation id="239429038616798445">Phương thức giao hàng này không có sẵn. Hãy thử một phương thức khác.</translation> @@ -971,6 +973,7 @@ <translation id="2938225289965773019">Mở đường liên kết <ph name="PROTOCOL" /></translation> <translation id="2941878205777356567">Phong bì 9 x 12 inch</translation> <translation id="2941952326391522266">Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này là từ <ph name="DOMAIN2" />. Điều này có thể do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn.</translation> +<translation id="2942492342931589800">Thông thường</translation> <translation id="2942515540157583425">Công việc CNTT và kỹ thuật</translation> <translation id="2943895734390379394">Thời gian tải lên:</translation> <translation id="2945026002409061480">Cộng đồng trực tuyến</translation> @@ -1219,6 +1222,7 @@ <translation id="3432601291244612633">Đóng trang</translation> <translation id="3433111389595862568">Phần mềm hội nghị và cộng tác</translation> <translation id="3433144818443565002">Trò chuyện thoại và video</translation> +<translation id="3434025015623587566">Trình quản lý mật khẩu của Google cần thêm quyền truy cập</translation> <translation id="343474037147570563">Tệp bạn tải lên hoặc đính kèm được gửi đến Google Cloud hoặc bên thứ ba để phân tích. Ví dụ: Các tệp này có thể được quét để tìm xem có dữ liệu nhạy cảm hoặc phần mềm độc hại hay không và có thể được lưu trữ dựa trên chính sách của công ty. Quản trị viên cũng có thể thấy các tệp này.</translation> <translation id="3435557549311968410">Liên tục (Ngắn)</translation> <translation id="3435738964857648380">Bảo mật</translation> @@ -1231,6 +1235,7 @@ <translation id="3447661539832366887">Chủ sở hữu của thiết bị này đã tắt trò chơi khủng long.</translation> <translation id="3447884698081792621">Hiển thị chứng chỉ (do <ph name="ISSUER" /> cấp)</translation> <translation id="3450323514459570273">Có thể yêu cầu điều khiển và lập trình lại thiết bị MIDI của bạn</translation> +<translation id="3452151267620065789">Đã lưu tiến trình</translation> <translation id="3452404311384756672">Khoảng thời gian tìm nạp:</translation> <translation id="3453962258458347894">Số lần thử lại</translation> <translation id="3461266716147554923"><ph name="URL" /> muốn xem văn bản và hình ảnh đã sao chép sang bảng nhớ tạm</translation> @@ -1314,6 +1319,7 @@ <translation id="361438452008624280">Mục nhập danh sách "<ph name="LANGUAGE_ID" />": Ngôn ngữ không xác định hoặc không được hỗ trợ.</translation> <translation id="3614934205542186002"><ph name="RUN_CHROME_SAFETY_CHECK_FOCUSED_FRIENDLY_MATCH_TEXT" />, nhấn phím Tab rồi nhấn phím Enter để chạy quy trình kiểm tra an toàn trong phần Cài đặt của Chrome</translation> <translation id="3615309852743236517">Chăm sóc móng tay và móng chân</translation> +<translation id="3617072447978270288">Tạo lại</translation> <translation id="3620239073311576716">Đồng phục và trang phục công sở</translation> <translation id="36224234498066874">Xóa DL duyệt web</translation> <translation id="362276910939193118">Hiển thị Toàn bộ Lịch sử</translation> @@ -1336,6 +1342,7 @@ <translation id="3650594806107685466">Để đảm bảo an toàn cho thẻ của bạn, hãy nhập số CVC có trên <ph name="SIDE_OF_CARD" /></translation> <translation id="3650917416636556301">Đi bộ đường dài và Cắm trại</translation> <translation id="3653033846669030038">Công viên giải trí</translation> +<translation id="3654980960391973513">Tạo</translation> <translation id="3655241534245626312">Chuyển đến phần cài đặt về quyền</translation> <translation id="3655670868607891010">Nếu bạn thường xuyên thấy thông báo này, hãy thử các <ph name="HELP_LINK" /> sau.</translation> <translation id="365641980390710834">Thường phục</translation> @@ -1968,6 +1975,7 @@ <translation id="4918221908152712722">Cài đặt <ph name="APP_NAME" /> (không cần tải xuống)</translation> <translation id="4920457992177678649">Nhà/căn hộ du lịch và nơi lưu trú ngắn hạn</translation> <translation id="4920710383559189047">Ống sleeve</translation> +<translation id="4922104989726031751">Để sử dụng Trình quản lý mật khẩu trên hệ điều hành của bạn, hãy chạy lại Chromium và cho phép truy cập vào trình quản lý mật khẩu trên máy tính. Các thẻ sẽ mở lại sau khi bạn chạy lại Chromium.</translation> <translation id="4923459931733593730">Thanh toán</translation> <translation id="4926049483395192435">Phải được chỉ định.</translation> <translation id="4926159001844873046"><ph name="SITE" /> cho biết</translation> @@ -2571,6 +2579,7 @@ <translation id="6157754950574419155">Xóa tất cả khỏi nhật ký</translation> <translation id="6157877588268064908">Để xem các yêu cầu và phương thức giao hàng, hãy chọn một địa chỉ</translation> <translation id="6159554577634054750">Kiểm soát vật gây hại</translation> +<translation id="6159908896951210943">Trang trọng</translation> <translation id="6160391204859821737">Bật một tính năng về quyền riêng tư trong quảng cáo</translation> <translation id="6165508094623778733">Tìm hiểu thêm</translation> <translation id="6167577165590485365">Lần tìm nạp mới nhất:</translation> @@ -2608,6 +2617,7 @@ <translation id="6234122620015464377">Cắt bỏ sau mỗi tài liệu</translation> <translation id="6236290670123303279">Quản lý chế độ cài đặt</translation> <translation id="6240447795304464094">Biểu trưng của Google Pay</translation> +<translation id="6240964651812394252">Để sử dụng Trình quản lý mật khẩu của Google trên hệ điều hành của bạn, hãy chạy lại Chrome và cho phép truy cập vào trình quản lý mật khẩu trên máy tính. Các thẻ sẽ mở lại sau khi bạn chạy lại Chrome.</translation> <translation id="6241121617266208201">Ẩn các nội dung đề xuất</translation> <translation id="624499991300733384">Dịch vụ bộ sắp xếp bản in</translation> <translation id="6251906504834538140">{0,plural, =1{Tệp đã bị chặn không cho di chuyển}other{<ph name="FILE_COUNT" /> tệp đã bị chặn không cho di chuyển}}</translation> @@ -2618,6 +2628,7 @@ <translation id="6263376278284652872">Dấu trang trên <ph name="DOMAIN" /></translation> <translation id="6264376385120300461">Vẫn tải xuống</translation> <translation id="6264485186158353794">Quay lại trang an toàn</translation> +<translation id="6264636978858465832">Trình quản lý mật khẩu cần thêm quyền truy cập</translation> <translation id="6265794661083428563">Sao chép giá trị của chính sách <ph name="POLICY_NAME" /></translation> <translation id="6266934640124581640">Xanh mòng két nhạt</translation> <translation id="6270066318535733958">Đi thuyền</translation> @@ -3216,6 +3227,7 @@ <translation id="7422347648202898039">Nhãn (An toàn)</translation> <translation id="7423283032694727565">Nút Quản lý cookie, hãy nhấn nút này để quản lý các lựa chọn ưu tiên về cookie trong phần cài đặt của Chrome</translation> <translation id="7424421098814895617">Đã chọn tuỳ chọn xoá địa chỉ</translation> +<translation id="7425037327577270384">Giúp tôi viết</translation> <translation id="7427366580982928791">Đảm bảo an toàn cho trẻ em khi sử dụng Internet</translation> <translation id="7429429656042611765">Executive</translation> <translation id="7432774160230062882">Xác minh danh tính của bạn để Chromium có thể giúp bạn điền thông tin thanh toán.</translation> @@ -3282,6 +3294,7 @@ <translation id="7529884293139707752">Học tại nhà</translation> <translation id="7534987659046836932">Phong bì C7</translation> <translation id="7535087603100972091">Giá trị</translation> +<translation id="753556296624075801">Do Google cung cấp</translation> <translation id="7537536606612762813">Bắt buộc</translation> <translation id="7542995811387359312">Tính năng tự động điền thẻ tín dụng đã bị vô hiệu hóa vì biểu mẫu này không sử dụng kết nối an toàn.</translation> <translation id="7543525346216957623">Hãy hỏi ý kiến cha mẹ của bạn</translation> @@ -3465,6 +3478,7 @@ <translation id="7871445724586827387">Thay đổi mật khẩu cho Tài khoản Google của bạn</translation> <translation id="7877007680666472091">giá trị nhận dạng cho nội dung được bảo vệ</translation> <translation id="7878562273885520351">Mật khẩu của bạn có thể bị xâm phạm</translation> +<translation id="7878966190323222027">Mở lại để tiếp tục</translation> <translation id="7880146494886811634">Lưu địa chỉ</translation> <translation id="7882421473871500483">Nâu</translation> <translation id="7882995332186050355">Xe tải và moóc chở hàng</translation> @@ -3995,6 +4009,7 @@ <translation id="8942355029279167844">Quản trị viên đã cho phép <ph name="APP_NAME" /> thu thập dữ liệu chẩn đoán để nâng cao trải nghiệm sử dụng sản phẩm. Hãy truy cập vào <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" /> để biết thêm thông tin.</translation> <translation id="8943282376843390568">Vàng chanh</translation> <translation id="8944485226638699751">Bị giới hạn</translation> +<translation id="8949410982325929394">Âm báo</translation> <translation id="8949493680961858543">A1x4</translation> <translation id="8951415078585015151">Luật pháp và chính phủ</translation> <translation id="8954252855949068147">Hàng may mặc</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 4cab158..6d68868 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -1439,7 +1439,7 @@ <translation id="3831065134033923230">檢查已儲存的密碼</translation> <translation id="3831915413245941253"><ph name="ENROLLMENT_DOMAIN" /> 的管理員已安裝支援額外功能的擴充功能。這些擴充功能可存取你的部分資料。</translation> <translation id="3832522519263485449">多孔 (左側)</translation> -<translation id="3835233591525155343">你的裝置使用狀態</translation> +<translation id="3835233591525155343">裝置使用狀態</translation> <translation id="3836246517890985658">小型廚具</translation> <translation id="384315386171052386">魚產與海鮮</translation> <translation id="3844725157150297127">RA1</translation> @@ -3847,7 +3847,7 @@ <translation id="8601456038554914806">水上運動器材</translation> <translation id="8606726445206553943">使用您的 MIDI 裝置</translation> <translation id="8606988009912891950">廣告主題可協助網站向你顯示相關廣告,同時保護你的瀏覽記錄和身分。Chrome 可以根據你近期的瀏覽記錄,記下你感興趣的主題。在此之後,你造訪的網站就可以要求 Chrome 提供相關主題,據此向你放送個人化廣告。</translation> -<translation id="8617269623452051934">你的裝置使用狀態</translation> +<translation id="8617269623452051934">裝置使用狀態</translation> <translation id="861775596732816396">粗細:4</translation> <translation id="8620276786115098679">Envelope Kaku 7</translation> <translation id="8623885649813806493">找不到相符的密碼。顯示所有已儲存的密碼。</translation>
diff --git a/components/sync/test/fake_server.h b/components/sync/test/fake_server.h index aa462cd..880a450 100644 --- a/components/sync/test/fake_server.h +++ b/components/sync/test/fake_server.h
@@ -252,9 +252,8 @@ syncer::ModelTypeSet committed_model_types) override; void OnHistoryCommit(const std::string& url) override; - // Returns all URLs that were committed to server-side history, which happens - // either through SESSIONS (if the "History" toggle is enabled) or through - // HISTORY. + // Returns all URLs that were committed to server-side history through the + // HISTORY data type. const std::set<std::string>& GetCommittedHistoryURLs() const; std::string GetStoreBirthday() const; @@ -300,8 +299,7 @@ // If set, the server will return HTTP errors. absl::optional<net::HttpStatusCode> http_error_status_code_; - // All URLs received via history sync (powered either by SESSIONS or by - // HISTORY). + // All URLs received via HISTORY sync. std::set<std::string> committed_history_urls_; // Used as the error_code field of ClientToServerResponse on all commit
diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManSupportProvider.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManSupportProvider.java index bc187a2d..f0c2ac7c 100644 --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManSupportProvider.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManSupportProvider.java
@@ -9,11 +9,13 @@ import org.jni_zero.CalledByNative; import org.chromium.base.PackageUtils; +import org.chromium.components.version_info.VersionInfo; import org.chromium.device.DeviceFeatureList; import org.chromium.device.DeviceFeatureMap; public class CredManSupportProvider { - private static final int GMSCORE_MIN_VERSION_CREDMAN = 234600000; + private static final int GMSCORE_MIN_VERSION_CANARY_DEV = 234600000; + private static final int GMSCORE_MIN_VERSION_BETA_STABLE = 240200000; private static @CredManSupport int sCredManSupport; @@ -34,8 +36,7 @@ sCredManSupport = CredManSupport.DISABLED; return sCredManSupport; } - int packageVersion = PackageUtils.getPackageVersion("com.google.android.gms"); - if (packageVersion != -1 && packageVersion < GMSCORE_MIN_VERSION_CREDMAN) { + if (hasOldGmsVersion()) { sCredManSupport = CredManSupport.DISABLED; return sCredManSupport; } @@ -56,4 +57,27 @@ return sCredManSupport; } + + private static boolean hasOldGmsVersion() { + assert !sOverrideVersionCheckForTesting : "Don't use in testing!"; + int gmsVersion = PackageUtils.getPackageVersion("com.google.android.gms"); + if (gmsVersion == -1) { + return true; // Couldn't get a GMS version. Assume insufficient GMS availability. + } + + final int requiredMinGmsVersion = + DeviceFeatureMap.getInstance() + .getFieldTrialParamByFeatureAsInt( + DeviceFeatureList.WEBAUTHN_ANDROID_CRED_MAN, + "min_gms_core_version_no_dots", + getMinGmsVersionForCurrentChannel()); + + return gmsVersion < requiredMinGmsVersion; + } + + private static int getMinGmsVersionForCurrentChannel() { + return (VersionInfo.isBetaBuild() || VersionInfo.isStableBuild()) + ? GMSCORE_MIN_VERSION_BETA_STABLE + : GMSCORE_MIN_VERSION_CANARY_DEV; + } }
diff --git a/components/webauthn/core/browser/BUILD.gn b/components/webauthn/core/browser/BUILD.gn index 53ed0414..c8b45e3 100644 --- a/components/webauthn/core/browser/BUILD.gn +++ b/components/webauthn/core/browser/BUILD.gn
@@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/features.gni") + source_set("browser") { sources = [ "passkey_model_type_controller.cc", @@ -51,7 +53,7 @@ static_library("test_support") { testonly = true - if (!is_ios) { + if (use_blink) { sources = [ "mock_internal_authenticator.cc", "mock_internal_authenticator.h",
diff --git a/content/browser/first_party_sets/first_party_set_parser.cc b/content/browser/first_party_sets/first_party_set_parser.cc index 358c0dd..5e2d4fb 100644 --- a/content/browser/first_party_sets/first_party_set_parser.cc +++ b/content/browser/first_party_sets/first_party_set_parser.cc
@@ -339,14 +339,22 @@ // Removes invalid site entries and aliases, and fixes up any lingering // singletons. Modifies the data in-place. void PostProcessSets(std::vector<SetsMap::value_type>& sets, - std::vector<Aliases::value_type>& aliases) const { + std::vector<Aliases::value_type>& aliases) { if (invalid_keys_.empty()) { return; } base::flat_set<net::SchemefulSite> possible_singletons; - // Erase invalid aliases, and collect canonical sites that are primaries - // and might become singletons. + + // Erase invalid members/primaries, and collect primary sites that might + // become singletons. + base::EraseIf( + sets, + [&](const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& pair) + -> bool { return IsInvalidEntry(pair, &possible_singletons); }); + + // Erase invalid aliases, and collect canonical sites that are primaries and + // might become singletons. base::EraseIf( aliases, [&](const std::pair<net::SchemefulSite, net::SchemefulSite>& pair) @@ -354,12 +362,6 @@ return IsInvalidAlias(pair, possible_singletons, sets); }); - // Erase invalid members/primaries, and collect more possible-singletons. - base::EraseIf( - sets, - [&](const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& pair) - -> bool { return IsInvalidEntry(pair, &possible_singletons); }); - if (possible_singletons.empty()) { return; } @@ -398,7 +400,7 @@ // Modifies the lists in-place. void PostProcessSetLists( base::expected<ParsedPolicySetLists, FirstPartySetsHandler::ParseError>& - lists_or_error) const { + lists_or_error) { if (!lists_or_error.has_value() || invalid_keys_.empty()) { return; } @@ -602,20 +604,27 @@ // set. bool IsInvalidEntry( const std::pair<net::SchemefulSite, net::FirstPartySetEntry> pair, - base::flat_set<net::SchemefulSite>* possible_singletons) const { + base::flat_set<net::SchemefulSite>* possible_singletons) { const net::SchemefulSite& key = pair.first; const net::FirstPartySetEntry& entry = pair.second; return base::ranges::any_of( invalid_keys_, [&](const net::SchemefulSite& invalid_key) -> bool { - const bool key_matches = invalid_key == key; - const bool primary_matches = invalid_key == entry.primary(); - if (key_matches && !primary_matches && possible_singletons) { + if (invalid_key == entry.primary()) { + // The primary is invalid, so we have to kill the whole set. So this + // non-primary site must also be considered invalid in the future. + invalid_keys_.insert(pair.first); + return true; + } + if (invalid_key == key) { // This is a member whose primary might end up being a // singleton, since it's losing at least one member (and it // itself isn't invalid). - possible_singletons->insert(entry.primary()); + if (possible_singletons) { + possible_singletons->insert(entry.primary()); + } + return true; } - return key_matches || primary_matches; + return false; }); }
diff --git a/content/browser/first_party_sets/first_party_set_parser_unittest.cc b/content/browser/first_party_sets/first_party_set_parser_unittest.cc index eeb898ee..cb85e3c 100644 --- a/content/browser/first_party_sets/first_party_set_parser_unittest.cc +++ b/content/browser/first_party_sets/first_party_set_parser_unittest.cc
@@ -419,6 +419,20 @@ {})); } +TEST(FirstPartySetParser, TruncatesPrimaryInvalidWithAlias) { + // Regression test for https://crbug.com/1510152. + // + // The primary and first service site get truncated down to the same TLD, so + // they get marked as invalid. Since the primary is invalid, that means we + // have to delete the whole set (including any aliases). + EXPECT_EQ( + ParseSets( + R"({"primary": "https://subdomain1..test",)" + R"("serviceSites": ["https://subdomain2..test","https://foo.test"],)" + R"("ccTLDs": {"https://foo.test": ["https://foo.cctld"]}})"), + net::GlobalFirstPartySets(kVersion, {}, {})); +} + TEST(FirstPartySetParser, TruncatesSubdomain_AssociatedSite) { net::SchemefulSite example(GURL("https://example.test")); net::SchemefulSite aaaa(GURL("https://aaaa.test"));
diff --git a/content/browser/permissions/permission_controller_impl.cc b/content/browser/permissions/permission_controller_impl.cc index a40da2c..88ba1a3 100644 --- a/content/browser/permissions/permission_controller_impl.cc +++ b/content/browser/permissions/permission_controller_impl.cc
@@ -77,6 +77,7 @@ case PermissionType::GEOLOCATION: case PermissionType::NOTIFICATIONS: case PermissionType::CAPTURED_SURFACE_CONTROL: + case PermissionType::SMART_CARD: return absl::nullopt; } }
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc index be9195d..60cb0a2 100644 --- a/content/browser/renderer_host/render_widget_host_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -632,6 +632,7 @@ } void TearDown() override { + sink_ = nullptr; view_.reset(); host_.reset(); delegate_.reset(); @@ -827,7 +828,7 @@ bool handle_mouse_event_ = false; base::TimeTicks last_simulated_event_time_; base::TimeDelta simulated_event_time_delta_; - raw_ptr<IPC::TestSink, DanglingUntriaged> sink_; + raw_ptr<IPC::TestSink> sink_; std::unique_ptr<FakeRenderFrameMetadataObserver> renderer_render_frame_metadata_observer_; MockWidget widget_;
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index 95efd0d..0430f29 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -6610,6 +6610,13 @@ text_input_client_ = nullptr; } + void TearDown() override { + // text_input_client_ may point at |parent_view_| or something else owned by + // RenderWidgetHostViewAuraTest and will get destroyed in TearDown(). + text_input_client_ = nullptr; + RenderWidgetHostViewAuraTest::TearDown(); + } + // Override from ui::InputMethodObserver. void OnFocus() override {} void OnBlur() override {} @@ -6620,7 +6627,7 @@ void OnInputMethodDestroyed(const ui::InputMethod* input_method) override {} protected: - raw_ptr<const ui::TextInputClient, DanglingUntriaged> text_input_client_; + raw_ptr<const ui::TextInputClient> text_input_client_; }; // This test is for notifying InputMethod for surrounding text changes.
diff --git a/content/browser/resources/traces_internals/trace_report.html b/content/browser/resources/traces_internals/trace_report.html index 241a30c..b0f1d70 100644 --- a/content/browser/resources/traces_internals/trace_report.html +++ b/content/browser/resources/traces_internals/trace_report.html
@@ -205,7 +205,7 @@ </template> <div class="trace-id-container"> <button class="clickable-field copiable" on-click="onCopyUuidClick_"> - [[trace.uuid.high]]-[[trace.uuid.low]] + [[tokenToString_(trace.uuid)]] </button> <div class="info">Trace ID</div> </div>
diff --git a/content/browser/resources/traces_internals/trace_report.ts b/content/browser/resources/traces_internals/trace_report.ts index d70d155..d1f9a51 100644 --- a/content/browser/resources/traces_internals/trace_report.ts +++ b/content/browser/resources/traces_internals/trace_report.ts
@@ -12,6 +12,7 @@ import {assert} from 'chrome://resources/js/assert.js'; import {BigBuffer} from 'chrome://resources/mojo/mojo/public/mojom/base/big_buffer.mojom-webui.js'; import {Time} from 'chrome://resources/mojo/mojo/public/mojom/base/time.mojom-webui.js'; +import {Token} from 'chrome://resources/mojo/mojo/public/mojom/base/token.mojom-webui.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {getTemplate} from './trace_report.html.js'; @@ -69,8 +70,7 @@ // Get the text field assert(this.trace.uuid.high); assert(this.trace.uuid.low); - navigator.clipboard.writeText( - `${this.trace.uuid.high}-${this.trace.uuid.low}`); + navigator.clipboard.writeText(`${this.tokenToString_(this.trace.uuid)}`); } private onCopyScenarioClick_(): void { @@ -155,11 +155,10 @@ const {trace} = await this.traceReportProxy_.handler.downloadTrace(this.trace.uuid); if (trace !== null) { - this.downloadData_( - `${this.trace.uuid.high}-${this.trace.uuid.low}.gz`, trace); + this.downloadData_(`${this.tokenToString_(this.trace.uuid)}.gz`, trace); } else { - this.dispatchToast_(`Failed to download trace ${this.trace.uuid.high}-${ - this.trace.uuid.low}.`); + this.dispatchToast_( + `Failed to download trace ${this.tokenToString_(this.trace.uuid)}.`); } this.isLoading = false; } @@ -167,7 +166,7 @@ private downloadData_(fileName: string, data: BigBuffer): void { if (data.invalidBuffer) { this.dispatchToast_(`Invalid buffer received for ${ - this.trace.uuid.high}-${this.trace.uuid.low}.`); + this.tokenToString_(this.trace.uuid)}.`); return; } try { @@ -187,7 +186,7 @@ downloadUrl(fileName, url); } catch (e) { this.dispatchToast_(`Unable to create blob from trace data for ${ - this.trace.uuid.high}-${this.trace.uuid.low}.`); + this.tokenToString_(this.trace.uuid)}.`); } } @@ -197,7 +196,7 @@ await this.traceReportProxy_.handler.deleteSingleTrace(this.trace.uuid); if (!success) { this.dispatchToast_( - `Failed to delete ${this.trace.uuid.high}-${this.trace.uuid.low}.`); + `Failed to delete ${this.tokenToString_(this.trace.uuid)}.`); } this.isLoading = false; } @@ -208,8 +207,8 @@ await this.traceReportProxy_.handler.userUploadSingleTrace( this.trace.uuid); if (!success) { - this.dispatchToast_(`Failed to upload trace ${this.trace.uuid.high}-${ - this.trace.uuid.low}.`); + this.dispatchToast_( + `Failed to upload trace ${this.tokenToString_(this.trace.uuid)}.`); } this.isLoading = false; } @@ -218,6 +217,10 @@ return value1 === value2; } + private tokenToString_(token: Token): string { + return `${token.high.toString(16)}-${token.low.toString(16)}`; + } + private dispatchToast_(message: string): void { this.dispatchEvent(new CustomEvent('show-toast', { bubbles: true,
diff --git a/content/browser/webid/fedcm_metrics.cc b/content/browser/webid/fedcm_metrics.cc index 80376066..bc6bc8f 100644 --- a/content/browser/webid/fedcm_metrics.cc +++ b/content/browser/webid/fedcm_metrics.cc
@@ -395,12 +395,19 @@ num_requests); } -void FedCmMetrics::RecordDisconnectStatus(FedCmDisconnectStatus status) { +void FedCmMetrics::RecordDisconnectMetrics( + FedCmDisconnectStatus status, + std::optional<base::TimeDelta> duration) { if (is_disabled_) { return; } auto RecordUkm = [&](auto& ukm_builder) { ukm_builder.SetStatus_Disconnect(static_cast<int>(status)); + if (duration) { + ukm_builder.SetTiming_Disconnect( + ukm::GetSemanticBucketMinForDurationTiming( + duration->InMilliseconds())); + } ukm_builder.SetFedCmSessionID(session_id_); ukm_builder.Record(ukm::UkmRecorder::Get()); }; @@ -411,6 +418,9 @@ RecordUkm(fedcm_idp_builder); base::UmaHistogramEnumeration("Blink.FedCm.Status.Disconnect", status); + if (duration) { + base::UmaHistogramMediumTimes("Blink.FedCm.Timing.Disconnect", *duration); + } } void FedCmMetrics::RecordErrorDialogResult(FedCmErrorDialogResult result) {
diff --git a/content/browser/webid/fedcm_metrics.h b/content/browser/webid/fedcm_metrics.h index 586df81d..250cf5241 100644 --- a/content/browser/webid/fedcm_metrics.h +++ b/content/browser/webid/fedcm_metrics.h
@@ -264,8 +264,11 @@ // FedCM request or for the purpose of MDocs or multi-IDP are not counted. void RecordNumRequestsPerDocument(const int num_requests); - // Records the status of the disconnect call. - void RecordDisconnectStatus(FedCmDisconnectStatus status); + // Records metrics for a disconnect call. `duration` is nullopt if the + // disconnect fetch request was not sent, in which case we do not log the + // metric. + void RecordDisconnectMetrics(FedCmDisconnectStatus status, + std::optional<base::TimeDelta> duration); // Records the type of error dialog shown. void RecordErrorDialogType(
diff --git a/content/browser/webid/federated_auth_disconnect_request.cc b/content/browser/webid/federated_auth_disconnect_request.cc index c42ec6773..15e8b883 100644 --- a/content/browser/webid/federated_auth_disconnect_request.cc +++ b/content/browser/webid/federated_auth_disconnect_request.cc
@@ -52,7 +52,8 @@ metrics_(metrics), render_frame_host_(render_frame_host), options_(std::move(options)), - origin_(render_frame_host->GetLastCommittedOrigin()) { + origin_(render_frame_host->GetLastCommittedOrigin()), + start_time_(base::TimeTicks::Now()) { RenderFrameHost* main_frame = render_frame_host->GetMainFrame(); DCHECK(main_frame->IsInPrimaryMainFrame()); embedding_origin_ = main_frame->GetLastCommittedOrigin(); @@ -201,6 +202,7 @@ DisconnectStatusForMetrics::kDisconnectUrlIsCrossOrigin); return; } + disconnect_request_sent_ = true; network_manager_->SendDisconnectRequest( fetch_result.endpoints.disconnect, options_->account_hint, options_->config->client_id, @@ -235,15 +237,16 @@ void FederatedAuthDisconnectRequest::Complete( blink::mojom::DisconnectStatus status, - absl::optional<content::FedCmDisconnectStatus> - disconnect_status_for_metrics) { + content::FedCmDisconnectStatus disconnect_status_for_metrics) { if (!callback_) { return; } - if (disconnect_status_for_metrics) { - metrics_->RecordDisconnectStatus(*disconnect_status_for_metrics); - } + std::optional<base::TimeDelta> duration = + disconnect_request_sent_ + ? std::optional<base::TimeDelta>{base::TimeTicks::Now() - start_time_} + : std::nullopt; + metrics_->RecordDisconnectMetrics(disconnect_status_for_metrics, duration); std::move(callback_).Run(status); }
diff --git a/content/browser/webid/federated_auth_disconnect_request.h b/content/browser/webid/federated_auth_disconnect_request.h index 873bc2a..3f2633cb 100644 --- a/content/browser/webid/federated_auth_disconnect_request.h +++ b/content/browser/webid/federated_auth_disconnect_request.h
@@ -61,13 +61,9 @@ void OnDisconnectResponse(IdpNetworkRequestManager::FetchStatus fetch_status, const std::string& account_id); - // `should_delay_callback` represents whether we should call the callback - // with some delay or immediately. For some failures we choose to reject - // with some delay for privacy reasons. `disconnect_status_for_metrics` is - // non-nullopt if metrics have not yet been recorded for this request. + // Records disconnect metrics and completes the request. void Complete(blink::mojom::DisconnectStatus status, - absl::optional<content::FedCmDisconnectStatus> - disconnect_status_for_metrics); + content::FedCmDisconnectStatus disconnect_status_for_metrics); std::unique_ptr<IdpNetworkRequestManager> network_manager_; // Owned by |BrowserContext| @@ -85,6 +81,13 @@ blink::mojom::FederatedAuthRequest::DisconnectCallback callback_; + // The time when this class is created. Approximates the time in which the + // disconnect() call begins. + base::TimeTicks start_time_; + // Whether the disconnect fetch request is sent. Used to know whether to + // record the disconnect call duration. + bool disconnect_request_sent_ = false; + base::WeakPtrFactory<FederatedAuthDisconnectRequest> weak_ptr_factory_{this}; };
diff --git a/content/browser/webid/federated_auth_disconnect_request_unittest.cc b/content/browser/webid/federated_auth_disconnect_request_unittest.cc index 1274ce7..6810921 100644 --- a/content/browser/webid/federated_auth_disconnect_request_unittest.cc +++ b/content/browser/webid/federated_auth_disconnect_request_unittest.cc
@@ -39,7 +39,6 @@ using DisconnectResponse = content::IdpNetworkRequestManager::DisconnectResponse; using DisconnectStatusForMetrics = content::FedCmDisconnectStatus; -using FedCmEntry = ukm::builders::Blink_FedCm; using LoginState = content::IdentityRequestAccount::LoginState; using blink::mojom::DisconnectStatus; @@ -276,8 +275,21 @@ EXPECT_EQ(expected_disconnect_status, callback_helper.status()); } - void ExpectDisconnectStatusUKM(DisconnectStatusForMetrics status, - const char* entry_name) { + void ExpectDisconnectMetrics(DisconnectStatusForMetrics status, + bool should_record_duration) { + histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.Disconnect", + status, 1); + histogram_tester_.ExpectTotalCount("Blink.FedCm.Timing.Disconnect", + should_record_duration ? 1 : 0); + ExpectDisconnectUKM(status, ukm::builders::Blink_FedCm::kEntryName, + should_record_duration); + ExpectDisconnectUKM(status, ukm::builders::Blink_FedCmIdp::kEntryName, + should_record_duration); + } + + void ExpectDisconnectUKM(DisconnectStatusForMetrics status, + const char* entry_name, + bool should_record_duration) { auto entries = ukm_recorder()->GetEntriesByName(entry_name); ASSERT_FALSE(entries.empty()) @@ -287,6 +299,10 @@ // make sure that the metric only includes the expected one. bool metric_found = false; for (const auto* const entry : entries) { + if (!should_record_duration) { + EXPECT_FALSE(ukm_recorder()->GetEntryMetric(entry, "Timing.Disconnect")) + << "Timing.Disconnect must not be present"; + } const int64_t* metric = ukm_recorder()->GetEntryMetric(entry, "Status.Disconnect"); if (!metric) { @@ -298,6 +314,12 @@ metric_found = true; EXPECT_EQ(static_cast<int>(status), *metric) << "Unexpected status recorded in " << entry_name; + + if (should_record_duration) { + EXPECT_TRUE(ukm_recorder()->GetEntryMetric(entry, "Timing.Disconnect")) + << "Timing.Disconnect must be present in the same entry as " + "Status.Disconnect"; + } } EXPECT_TRUE(metric_found) << "No Status.Disconnect entry was found in " << entry_name; @@ -329,10 +351,8 @@ EXPECT_TRUE(network_manager_->has_fetched_config_); EXPECT_TRUE(network_manager_->has_fetched_disconnect_); - histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.Disconnect", - DisconnectStatusForMetrics::kSuccess, 1); - ExpectDisconnectStatusUKM(DisconnectStatusForMetrics::kSuccess, - FedCmEntry::kEntryName); + ExpectDisconnectMetrics(DisconnectStatusForMetrics::kSuccess, + /*should_record_duration=*/true); } TEST_F(FederatedAuthDisconnectRequestTest, NotTrustworthyIdP) { @@ -341,12 +361,9 @@ RunDisconnectTest(config, DisconnectStatus::kError); EXPECT_FALSE(DidFetchAnyEndpoint()); - histogram_tester_.ExpectUniqueSample( - "Blink.FedCm.Status.Disconnect", - DisconnectStatusForMetrics::kIdpNotPotentiallyTrustworthy, 1); - ExpectDisconnectStatusUKM( + ExpectDisconnectMetrics( DisconnectStatusForMetrics::kIdpNotPotentiallyTrustworthy, - FedCmEntry::kEntryName); + /*should_record_duration=*/false); } TEST_F(FederatedAuthDisconnectRequestTest, @@ -371,10 +388,8 @@ EXPECT_TRUE(network_manager_->has_fetched_config_); EXPECT_TRUE(network_manager_->has_fetched_disconnect_); - histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.Disconnect", - DisconnectStatusForMetrics::kSuccess, 1); - ExpectDisconnectStatusUKM(DisconnectStatusForMetrics::kSuccess, - FedCmEntry::kEntryName); + ExpectDisconnectMetrics(DisconnectStatusForMetrics::kSuccess, + /*should_record_duration=*/true); } } // namespace content
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc index bb131b1..d04a708 100644 --- a/content/browser/webid/federated_auth_request_impl.cc +++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -2798,8 +2798,10 @@ /*is_disabled=*/false); } if (disconnect_request_) { - fedcm_metrics_->RecordDisconnectStatus( - FedCmDisconnectStatus::kTooManyRequests); + // Since we do not send any fetches in this case, consider the request to be + // instant, e.g. duration is 0. + fedcm_metrics_->RecordDisconnectMetrics( + FedCmDisconnectStatus::kTooManyRequests, std::nullopt); std::move(callback).Run(DisconnectStatus::kErrorTooManyRequests); return; }
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc index 15f6fd2..0428014 100644 --- a/content/child/child_thread_impl.cc +++ b/content/child/child_thread_impl.cc
@@ -398,7 +398,7 @@ #if BUILDFLAG(IS_POSIX) // Take the file descriptor so that |file| does not close it. base::ScopedFD fd(file.TakePlatformFile()); -#if BUILDFLAG(CLANG_PGO) || BUILDFLAG(USE_CLANG_COVERAGE) +#if BUILDFLAG(CLANG_PGO) FILE* f = fdopen(fd.release(), "r+b"); __llvm_profile_set_file_object(f, 1); #else
diff --git a/content/shell/browser/shell_permission_manager.cc b/content/shell/browser/shell_permission_manager.cc index feba1663..f0a1197 100644 --- a/content/shell/browser/shell_permission_manager.cc +++ b/content/shell/browser/shell_permission_manager.cc
@@ -69,6 +69,7 @@ case PermissionType::LOCAL_FONTS: case PermissionType::DISPLAY_CAPTURE: case PermissionType::CAPTURED_SURFACE_CONTROL: + case PermissionType::SMART_CARD: return false; }
diff --git a/docs/asan.md b/docs/asan.md index 5af0605..9839aac 100644 --- a/docs/asan.md +++ b/docs/asan.md
@@ -131,8 +131,9 @@ llvm-symbolizer in its source tree by default. ASan should perfectly work with Chrome's sandbox. You should only need to run -with `--no-sandbox` on Linux if you're debugging ASan. -Note: you have to disable the sandbox on Windows until it is supported. +with `--no-sandbox` on Linux if you're debugging ASan. To get reports on Windows +from sandboxed processes you will have to run with both `--enable-logging` and +`--log-file=d:\valid\path.log` then inspect the logfile. You may need to run with `--disable-gpu` on Linux with NVIDIA driver older than 295.20.
diff --git a/extensions/strings/extensions_strings_sw.xtb b/extensions/strings/extensions_strings_sw.xtb index a1c876b..b72b478 100644 --- a/extensions/strings/extensions_strings_sw.xtb +++ b/extensions/strings/extensions_strings_sw.xtb
@@ -16,12 +16,12 @@ <translation id="2785530881066938471">Isingweza kupakia faili '<ph name="RELATIVE_PATH" />' ya hati ya maudhui. Haijasimbwa kwa UTF-8.</translation> <translation id="2903070246402204397"><ph name="EXTENSION_NAME" /> (kitambulisho cha kiendelezi cha "<ph name="EXTENSION_ID" />") kimezuiwa na msimamizi. <ph name="ADMIN_INFO" /></translation> <translation id="2988488679308982380">Isingeweza kusakinisha furushi: '<ph name="ERROR_CODE" />'</translation> -<translation id="3115238746683532089">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa mchuuzi <ph name="VENDOR_ID" /> (nambari tambulishi <ph name="SERIAL_NUMBER" />)</translation> +<translation id="3115238746683532089">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa mchuuzi <ph name="VENDOR_ID" /> (namba tambulishi <ph name="SERIAL_NUMBER" />)</translation> <translation id="3144135466825225871">Imeshindwa kubadilisha faili ya crx. Angalia kuona ikiwa faili inatumika.</translation> <translation id="3163201441334626963">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa mchuuzi <ph name="VENDOR_ID" /></translation> <translation id="3369521687965833290">Haiwezi kufungua kiendelezi. Ili kufungua kiendelezi kwa usalama, sharti kuwe na kijia katika saraka ya maelzeo yako mafupi ambacho kinaanza kwa sarufi ya kiendeshi na hakina makutano, sehemu ya kuangika, au kiungo cha mfumo. Hakuna vijia kama hivyo vinavyopo kwa maelezo yako mafupi.</translation> -<translation id="3393440416772303020"><ph name="PRODUCT_NAME" /> (nambari tambulishi <ph name="SERIAL_NUMBER" />)</translation> -<translation id="3466070586188012397"><ph name="PRODUCT_NAME" /> kutoka kwa mchuuzi <ph name="VENDOR_ID" /> (nambari tambulishi <ph name="SERIAL_NUMBER" />)</translation> +<translation id="3393440416772303020"><ph name="PRODUCT_NAME" /> (namba tambulishi <ph name="SERIAL_NUMBER" />)</translation> +<translation id="3466070586188012397"><ph name="PRODUCT_NAME" /> kutoka kwa mchuuzi <ph name="VENDOR_ID" /> (namba tambulishi <ph name="SERIAL_NUMBER" />)</translation> <translation id="3561217442734750519">Thamani ya kuingizwa kwa ufunguo binafsi sharti iwe njia halali.</translation> <translation id="388442998277590542">Isingeweza kupakia ukurasa wa chaguo <ph name="OPTIONS_PAGE" /> '.</translation> <translation id="3984413272403535372">Hitilafu katika kuweka sahihi kwenye kiendelezi.</translation> @@ -38,7 +38,7 @@ <translation id="5456409301717116725">Kiendelezi hiki kinajumuisha faili muhimu '<ph name="KEY_PATH" />'. Huenda hutaki kufanya hivyo.</translation> <translation id="5486326529110362464">Thamani ya uingizaji ya ufunguo binafsi sharti iwepo.</translation> <translation id="5972529113578162692">Msimamizi wa mashine hii anahitaji <ph name="EXTENSION_NAME" /> kusakinishwa. Hakiwezi kuondolewa.</translation> -<translation id="6027032947578871493">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa <ph name="VENDOR_NAME" /> (nambari tambulishi <ph name="SERIAL_NUMBER" />)</translation> +<translation id="6027032947578871493">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa <ph name="VENDOR_NAME" /> (namba tambulishi <ph name="SERIAL_NUMBER" />)</translation> <translation id="6068932090455285721"><ph name="PRODUCT_NAME" /> kutoa kwa mchuuzi <ph name="VENDOR_ID" /></translation> <translation id="6143635259298204954">Haiwezi kufungua kiendelezi. Ili kufungua kiendelezi kwa usalama, sharti kuwe na kijia katika saraka yako ya maelezo mafupi ambacho hakina kiungo cha mfumo. Hakuna vijia kama hivyo vilivyopo kwa maelezo yako mafupi.</translation> <translation id="6322279351188361895">Imeshindwa kusoma ufunguo wa kibinafsi</translation> @@ -46,7 +46,7 @@ <translation id="641087317769093025">Isingeweza kufungua kiendelezi</translation> <translation id="6542618148162044354">"<ph name="APP_NAME" />" inaomba idhini ya kufikia kifaa chako kimoja au vingi:</translation> <translation id="657064425229075395">Haikuweza kupakia hati ya mandharinyuma '<ph name="BACKGROUND_SCRIPT" />'.</translation> -<translation id="6580950983454333167"><ph name="PRODUCT_NAME" /> kutoka kwa <ph name="VENDOR_NAME" /> (nambari ya ufuatiliaji <ph name="SERIAL_NUMBER" />)</translation> +<translation id="6580950983454333167"><ph name="PRODUCT_NAME" /> kutoka kwa <ph name="VENDOR_NAME" /> (namba ya ufuatiliaji <ph name="SERIAL_NUMBER" />)</translation> <translation id="677806580227005219">Kishikilio cha Mime: <ph name="MIMEHANDLERVIEW_TAG_NAME" /></translation> <translation id="6840444547062817500">Kiendelezi hiki kilijipakia chenyewe upya kila mara.</translation> <translation id="7003844668372540529">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa <ph name="VENDOR_NAME" /></translation>
diff --git a/gpu/command_buffer/service/shared_image/ozone_image_backing.cc b/gpu/command_buffer/service/shared_image/ozone_image_backing.cc index 8492ffff..afc6db8 100644 --- a/gpu/command_buffer/service/shared_image/ozone_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/ozone_image_backing.cc
@@ -248,14 +248,6 @@ return holder; } - // It'll be a new entry. |this| must observe current context and react on - // context losses or destructions accordingly. Otherwise, it'll keep the - // texture holders until it dies, which is not what we want from the resource - // management point of view. Also, textures must be destroyed/marked with - // context lost to avoid wrong behaviour (eg textures are reused despite a - // context lost). - current_context->AddObserver(this); - // Case 2. Try to find a compatible context. There are some drivers that // fail when doing multiple reimport of dmas (and creating multiple textures // from a single image). See https://crbug.com/1498703. @@ -277,6 +269,18 @@ this, pixmap_, plane_, is_passthrough); } + if (!new_holder) { + return nullptr; + } + + // It'll be a new entry. |this| must observe current context and react on + // context losses or destructions accordingly. Otherwise, it'll keep the + // texture holders until it dies, which is not what we want from the resource + // management point of view. Also, textures must be destroyed/marked with + // context lost to avoid wrong behaviour (eg textures are reused despite a + // context lost). + current_context->AddObserver(this); + auto result = per_context_cached_textures_holders_.insert( std::make_pair(current_context, std::move(new_holder))); DCHECK(result.second);
diff --git a/infra/config/gn_args/gn_args.star b/infra/config/gn_args/gn_args.star index ffbcc67..3b4570f 100644 --- a/infra/config/gn_args/gn_args.star +++ b/infra/config/gn_args/gn_args.star
@@ -7,45 +7,45 @@ load("//lib/gn_args.star", "gn_args") gn_args.config( - "also_build_ash_chrome", + name = "also_build_ash_chrome", args = { "also_build_ash_chrome": True, }, ) gn_args.config( - "also_build_lacros_chrome", + name = "also_build_lacros_chrome", args = { "also_build_lacros_chrome": True, }, ) gn_args.config( - "also_build_lacros_chrome_for_architecture_amd64", + name = "also_build_lacros_chrome_for_architecture_amd64", args = { "also_build_lacros_chrome_for_architecture": "amd64", }, ) gn_args.config( - "also_build_lacros_chrome_for_architecture_arm64", + name = "also_build_lacros_chrome_for_architecture_arm64", args = { "also_build_lacros_chrome_for_architecture": "arm64", }, ) gn_args.config( - "amd64-generic", + name = "amd64-generic", args_file = "//build/args/chromeos/amd64-generic.gni", ) gn_args.config( - "amd64-generic-crostoolchain", + name = "amd64-generic-crostoolchain", args_file = "//build/args/chromeos/amd64-generic-crostoolchain.gni", ) gn_args.config( - "amd64-generic-vm", + name = "amd64-generic-vm", args_file = "//build/args/chromeos/amd64-generic-vm.gni", ) @@ -61,7 +61,7 @@ # building publicly advertised non-Official Android builds -- # which are not allowed to have proprietary codecs enabled. gn_args.config( - "android_builder", + name = "android_builder", configs = [ "android_builder_without_codecs", "chrome_with_codecs", @@ -74,7 +74,7 @@ # android:debuggable="true" causes ART to run more slowly, so tests run # faster without it. https://crbug.com/1276429 gn_args.config( - "android_builder_without_codecs", + name = "android_builder_without_codecs", configs = ["android"], args = { "debuggable_apks": False, @@ -83,7 +83,7 @@ # Representative GN args for Android developer builds. gn_args.config( - "android_developer", + name = "android_developer", configs = [ "android", "arm64", @@ -93,7 +93,7 @@ # It's significantly faster to build without static analysis checks. gn_args.config( - "android_fastbuild", + name = "android_fastbuild", args = { "android_static_analysis": "off", }, @@ -105,55 +105,55 @@ # disable proguard on a few bots to gather metrics on the effect on build # times. gn_args.config( - "android_no_proguard", + name = "android_no_proguard", args = { "is_java_debug": True, }, ) gn_args.config( - "angle_deqp_tests", + name = "angle_deqp_tests", args = { "build_angle_deqp_tests": True, }, ) gn_args.config( - "arm", + name = "arm", args = { "target_cpu": "arm", }, ) gn_args.config( - "arm-generic", + name = "arm-generic", args_file = "//build/args/chromeos/arm-generic.gni", ) gn_args.config( - "arm-generic-crostoolchain", + name = "arm-generic-crostoolchain", args_file = "//build/args/chromeos/arm-generic-crostoolchain.gni", ) gn_args.config( - "arm64", + name = "arm64", args = { "target_cpu": "arm64", }, ) gn_args.config( - "arm64-generic", + name = "arm64-generic", args_file = "//build/args/chromeos/arm64-generic.gni", ) gn_args.config( - "arm64-generic-crostoolchain", + name = "arm64-generic-crostoolchain", args_file = "//build/args/chromeos/arm64-generic-crostoolchain.gni", ) gn_args.config( - "arm64_host", + name = "arm64_host", args = { "test_host_cpu": "arm64", }, @@ -163,7 +163,7 @@ ) gn_args.config( - "arm_no_neon", + name = "arm_no_neon", args = { "arm_use_neon": False, }, @@ -173,75 +173,75 @@ ) gn_args.config( - "asan", + name = "asan", args = { "is_asan": True, }, ) gn_args.config( - "blink_symbol", + name = "blink_symbol", args = { "blink_symbol_level": 1, }, ) gn_args.config( - "cast_android", + name = "cast_android", args = { "is_cast_android": True, }, ) gn_args.config( - "cast_audio", + name = "cast_audio", args = { "is_cast_audio_only": True, }, ) gn_args.config( - "cast_os", + name = "cast_os", args = { "is_castos": True, }, ) gn_args.config( - "cast_receiver", + name = "cast_receiver", args = { "enable_cast_receiver": True, }, ) gn_args.config( - "cast_receiver_size_optimized", + name = "cast_receiver_size_optimized", args_file = "//build/config/fuchsia/size_optimized_cast_receiver_args.gn", ) gn_args.config( - "centipede", + name = "centipede", args = { "use_centipede": True, }, ) gn_args.config( - "cfi", + name = "cfi", args = { "is_cfi": True, }, ) gn_args.config( - "cfi_diag", + name = "cfi_diag", args = { "use_cfi_diag": True, }, ) gn_args.config( - "cfi_full", + name = "cfi_full", args = { "use_cfi_cast": True, }, @@ -251,35 +251,35 @@ ) gn_args.config( - "cfi_icall", + name = "cfi_icall", args = { "use_cfi_icall": True, }, ) gn_args.config( - "cfi_recover", + name = "cfi_recover", args = { "use_cfi_recover": True, }, ) gn_args.config( - "cfm", + name = "cfm", args = { "is_cfm": True, }, ) gn_args.config( - "chrome_for_testing", + name = "chrome_for_testing", args = { "is_chrome_for_testing": True, }, ) gn_args.config( - "chrome_with_codecs", + name = "chrome_with_codecs", args = { "proprietary_codecs": True, }, @@ -289,14 +289,14 @@ ) gn_args.config( - "chromeos", + name = "chromeos", args = { "target_os": "chromeos", }, ) gn_args.config( - "chromeos_codecs", + name = "chromeos_codecs", args = { "proprietary_codecs": True, }, @@ -306,7 +306,7 @@ ) gn_args.config( - "chromeos_with_codecs", + name = "chromeos_with_codecs", configs = [ "chromeos", "chromeos_codecs", @@ -314,21 +314,21 @@ ) gn_args.config( - "chromeos_device", + name = "chromeos_device", args = { "is_chromeos_device": True, }, ) gn_args.config( - "clang", + name = "clang", args = { "is_clang": True, }, ) gn_args.config( - "clang_tot", + name = "clang_tot", args = { "llvm_force_head_revision": True, }, @@ -338,7 +338,7 @@ ) gn_args.config( - "compile_only", + name = "compile_only", configs = [ "no_symbols", ], @@ -346,7 +346,7 @@ # Keep in sync with //infra/build/recipes/recipe_modules/chromium_android/chromium_config.py gn_args.config( - "cronet_android", + name = "cronet_android", args = { "use_partition_alloc": False, "enable_reporting": True, @@ -366,7 +366,7 @@ ) gn_args.config( - "cronet_android_mainline_clang", + name = "cronet_android_mainline_clang", args = { "clang_base_path": "//third_party/cronet_android_mainline_clang/linux-amd64", "clang_use_chrome_plugins": False, @@ -377,7 +377,7 @@ # Keep in sync with //infra/build/recipes/recipe_modules/chromium_android/chromium_config.py gn_args.config( - "cronet_common", + name = "cronet_common", args = { "disable_file_support": True, "enable_websockets": False, @@ -389,42 +389,42 @@ ) gn_args.config( - "dawn_enable_opengles", + name = "dawn_enable_opengles", args = { "dawn_enable_opengles": True, }, ) gn_args.config( - "dawn_use_built_dxc", + name = "dawn_use_built_dxc", args = { "dawn_use_built_dxc": True, }, ) gn_args.config( - "dcheck_always_on", + name = "dcheck_always_on", args = { "dcheck_always_on": True, }, ) gn_args.config( - "dcheck_off", + name = "dcheck_off", args = { "dcheck_always_on": False, }, ) gn_args.config( - "debug", + name = "debug", args = { "is_debug": True, }, ) gn_args.config( - "debug_builder", + name = "debug_builder", configs = [ "debug", "shared", @@ -433,14 +433,14 @@ ) gn_args.config( - "debug_try_builder", + name = "debug_try_builder", configs = [ "debug_builder", ], ) gn_args.config( - "debug_static_builder", + name = "debug_static_builder", configs = [ "debug", "static", @@ -449,7 +449,7 @@ ) gn_args.config( - "developer", + name = "developer", configs = [ "debug", "full_symbols", @@ -459,28 +459,28 @@ ) gn_args.config( - "devtools_do_typecheck", + name = "devtools_do_typecheck", args = { "devtools_skip_typecheck": False, }, ) gn_args.config( - "disable_nacl", + name = "disable_nacl", args = { "enable_nacl": False, }, ) gn_args.config( - "disable_seed_corpus", + name = "disable_seed_corpus", args = { "archive_seed_corpus": False, }, ) gn_args.config( - "enable_all_rust_features", + name = "enable_all_rust_features", args = { "enable_all_rust_features": True, }, @@ -488,7 +488,7 @@ # TODO(https://crbug.com/1010584): Explicitly enable DirectX 12. gn_args.config( - "dx12vk", + name = "dx12vk", configs = [ "enable_vulkan", ], @@ -499,21 +499,21 @@ # enabled-processes = non-renderer: # https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/partition_alloc_features.cc;drc=ec53a834a53b2d2f780e83614036a8dc89a247b5;l=105 gn_args.config( - "enable_backup_ref_ptr_feature_flag", + name = "enable_backup_ref_ptr_feature_flag", args = { "enable_backup_ref_ptr_feature_flag": True, }, ) gn_args.config( - "enable_blink_animation_use_time_delta", + name = "enable_blink_animation_use_time_delta", args = { "blink_animation_use_time_delta": True, }, ) gn_args.config( - "enable_blink_heap_verification", + name = "enable_blink_heap_verification", args = { "cppgc_enable_verify_heap": True, }, @@ -523,7 +523,7 @@ # This configuration will silently deactivate the ref count cookie in: # https://crsrc.org/c/base/allocator/partition_allocator/partition_alloc_config.h;l=208-216;drc=2d195004c75699bdd87c69cdb7e8d293249dcfdd gn_args.config( - "enable_dangling_raw_ptr_checks", + name = "enable_dangling_raw_ptr_checks", args = { "enable_dangling_raw_ptr_checks": True, }, @@ -532,7 +532,7 @@ # Changes the default of the dangling raw pointer detection feature flag, # enabling it on all runs. gn_args.config( - "enable_dangling_raw_ptr_feature_flag", + name = "enable_dangling_raw_ptr_feature_flag", args = { "enable_dangling_raw_ptr_feature_flag": True, }, @@ -542,63 +542,63 @@ ) gn_args.config( - "enable_vulkan", + name = "enable_vulkan", args = { "enable_vulkan": True, }, ) gn_args.config( - "extended_tracing", + name = "extended_tracing", args = { "extended_tracing_enabled": True, }, ) gn_args.config( - "fail_on_android_expectations", + name = "fail_on_android_expectations", args = { "fail_on_android_expectations": True, }, ) gn_args.config( - "fail_on_san_warnings", + name = "fail_on_san_warnings", args = { "fail_on_san_warnings": True, }, ) gn_args.config( - "ffmpeg_branding_chrome", + name = "ffmpeg_branding_chrome", args = { "ffmpeg_branding": "Chrome", }, ) gn_args.config( - "ffmpeg_branding_chromeos", + name = "ffmpeg_branding_chromeos", args = { "ffmpeg_branding": "ChromeOS", }, ) gn_args.config( - "fuchsia", + name = "fuchsia", args = { "target_os": "fuchsia", }, ) gn_args.config( - "fuchsia_code_coverage", + name = "fuchsia_code_coverage", args = { "fuchsia_code_coverage": True, }, ) gn_args.config( - "fuchsia_smart_display", + name = "fuchsia_smart_display", args = { "enable_cast_receiver": True, "cast_streaming_enable_remoting": True, @@ -609,47 +609,47 @@ ) gn_args.config( - "full_symbols", + name = "full_symbols", args = { "symbol_level": 2, }, ) gn_args.config( - "fuzzer", + name = "fuzzer", args = { "enable_ipc_fuzzer": True, }, ) gn_args.config( - "goma", + name = "goma", args = { "use_goma": True, }, ) gn_args.config( - "gpu_fyi_tests", + name = "gpu_fyi_tests", configs = [ "gpu_tests", ], ) gn_args.config( - "gpu_tests", + name = "gpu_tests", configs = [ "chrome_with_codecs", ], ) gn_args.config( - "headless", + name = "headless", args_file = "//build/args/headless.gn", ) gn_args.config( - "headless_shell", + name = "headless_shell", configs = [ "headless", "no_codecs", @@ -657,21 +657,21 @@ ) gn_args.config( - "include_unwind_tables", + name = "include_unwind_tables", args = { "exclude_unwind_tables": False, }, ) gn_args.config( - "ios", + name = "ios", args = { "target_os": "ios", }, ) gn_args.config( - "ios_catalyst", + name = "ios_catalyst", args = { "target_environment": "catalyst", }, @@ -681,53 +681,53 @@ ) gn_args.config( - "ios_chromium_cert", + name = "ios_chromium_cert", args = { "ios_code_signing_identity_description": "iPhone Developer", }, ) gn_args.config( - "ios_device", + name = "ios_device", args = {"target_environment": "device"}, configs = ["ios"], ) # defaults to true under ios_sdk.gni gn_args.config( - "ios_disable_code_signing", + name = "ios_disable_code_signing", args = { "ios_enable_code_signing": False, }, ) gn_args.config( - "ios_google_cert", + name = "ios_google_cert", args = { "ios_code_signing_identity_description": "Apple Development", }, ) gn_args.config( - "ios_simulator", + name = "ios_simulator", args = {"target_environment": "simulator"}, configs = ["ios"], ) gn_args.config( - "is_skylab", + name = "is_skylab", args = { "is_skylab": True, }, ) gn_args.config( - "jacuzzi", + name = "jacuzzi", args_file = "//build/args/chromeos/jacuzzi.gni", ) gn_args.config( - "lacros", + name = "lacros", args = { "target_os": "chromeos", "chromeos_is_browser_only": True, @@ -735,7 +735,7 @@ ) gn_args.config( - "lacros_on_linux", + name = "lacros_on_linux", args = { "chromeos_is_browser_only": True, }, @@ -745,14 +745,14 @@ ) gn_args.config( - "libfuzzer", + name = "libfuzzer", args = { "use_libfuzzer": True, }, ) gn_args.config( - "linux_wayland", + name = "linux_wayland", args = { "ozone_auto_platforms": False, "ozone_platform_wayland": True, @@ -762,35 +762,35 @@ ) gn_args.config( - "lsan", + name = "lsan", args = { "is_lsan": True, }, ) gn_args.config( - "mac_strip", + name = "mac_strip", args = { "enable_stripping": True, }, ) gn_args.config( - "minimal_symbols", + name = "minimal_symbols", args = { "symbol_level": 1, }, ) gn_args.config( - "mojo_fuzzer", + name = "mojo_fuzzer", args = { "enable_mojom_fuzzer": True, }, ) gn_args.config( - "msan", + name = "msan", args = { "is_msan": True, "msan_track_origins": 2, @@ -798,7 +798,7 @@ ) gn_args.config( - "msan_no_origins", + name = "msan_no_origins", args = { "is_msan": True, "msan_track_origins": 0, @@ -806,14 +806,14 @@ ) gn_args.config( - "no_clang", + name = "no_clang", args = { "is_clang": False, }, ) gn_args.config( - "no_codecs", + name = "no_codecs", args = { "media_use_libvpx": False, "media_use_ffmpeg": False, @@ -823,96 +823,96 @@ ) gn_args.config( - "no_dsyms", + name = "no_dsyms", args = { "enable_dsyms": False, }, ) gn_args.config( - "no_goma", + name = "no_goma", args = { "use_goma": False, }, ) gn_args.config( - "no_lld", + name = "no_lld", args = { "use_lld": False, }, ) gn_args.config( - "no_reclient", + name = "no_reclient", args = { "use_remoteexec": False, }, ) gn_args.config( - "no_remoting", + name = "no_remoting", args = { "enable_remoting": False, }, ) gn_args.config( - "no_resource_allowlisting", + name = "no_resource_allowlisting", args = { "enable_resource_allowlist_generation": False, }, ) gn_args.config( - "no_secondary_abi", + name = "no_secondary_abi", args = { "skip_secondary_abi_for_cq": True, }, ) gn_args.config( - "no_symbols", + name = "no_symbols", args = { "symbol_level": 0, }, ) gn_args.config( - "octopus", + name = "octopus", args_file = "//build/args/chromeos/octopus.gni", ) gn_args.config( - "official_optimize", + name = "official_optimize", args = { "is_official_build": True, }, ) gn_args.config( - "optimize_for_fuzzing", + name = "optimize_for_fuzzing", args = { "optimize_for_fuzzing": True, }, ) gn_args.config( - "optimize_webui_off", + name = "optimize_webui_off", args = { "optimize_webui": False, }, ) gn_args.config( - "ozone_headless", + name = "ozone_headless", args = { "ozone_platform_headless": True, }, ) gn_args.config( - "ozone_linux", + name = "ozone_linux", args = { "use_ozone": True, "ozone_platform": "headless", @@ -925,7 +925,7 @@ # that exercises angle + ozone (though, it is ozone/drm in reality. We don't support # angle on Linux Ozone/X11/Wayland yet). gn_args.config( - "ozone_linux_non_x11", + name = "ozone_linux_non_x11", args = { "ozone_platform_x11": False, }, @@ -939,35 +939,35 @@ # For Java, see: # https://cs.chromium.org/chromium/src/build/android/gyp/jacoco_instr.py gn_args.config( - "partial_code_coverage_instrumentation", + name = "partial_code_coverage_instrumentation", args = { "coverage_instrumentation_input_file": "//.code-coverage/files_to_instrument.txt", }, ) gn_args.config( - "pdf_xfa", + name = "pdf_xfa", args = { "pdf_enable_xfa": True, }, ) gn_args.config( - "perfetto", + name = "perfetto", args = { "use_perfetto_client_library": True, }, ) gn_args.config( - "perfetto_zlib", + name = "perfetto_zlib", args = { "enable_perfetto_zlib": True, }, ) gn_args.config( - "pgo_phase_1", + name = "pgo_phase_1", args = { "chrome_pgo_phase": 1, }, @@ -977,14 +977,14 @@ ) gn_args.config( - "reclient", + name = "reclient", args = { "use_remoteexec": True, }, ) gn_args.config( - "reclient_with_remoteexec_links", + name = "reclient_with_remoteexec_links", args = { "use_remoteexec_links": True, "concurrent_links": 50, @@ -993,7 +993,7 @@ ) gn_args.config( - "release", + name = "release", args = { "is_debug": False, "dcheck_always_on": False, @@ -1001,7 +1001,7 @@ ) gn_args.config( - "release_builder", + name = "release_builder", configs = [ "release", "static", @@ -1009,7 +1009,7 @@ ) gn_args.config( - "release_builder_blink", + name = "release_builder_blink", configs = [ "release_builder", "chrome_with_codecs", @@ -1017,14 +1017,14 @@ ) gn_args.config( - "release_java", + name = "release_java", args = { "is_java_debug": False, }, ) gn_args.config( - "release_try_builder", + name = "release_try_builder", configs = [ "release_builder", "try_builder", @@ -1033,70 +1033,70 @@ ) gn_args.config( - "resource_allowlisting", + name = "resource_allowlisting", args = { "enable_resource_allowlist_generation": True, }, ) gn_args.config( - "riscv64", + name = "riscv64", args = { "target_cpu": "riscv64", }, ) gn_args.config( - "shared", + name = "shared", args = { "is_component_build": True, }, ) gn_args.config( - "stable_channel", + name = "stable_channel", args = { "android_channel": "stable", }, ) gn_args.config( - "static", + name = "static", args = { "is_component_build": False, }, ) gn_args.config( - "static_angle", + name = "static_angle", args = { "use_static_angle": True, }, ) gn_args.config( - "siso", + name = "siso", args = { "use_siso": True, }, ) gn_args.config( - "strip_debug_info", + name = "strip_debug_info", args = { "strip_debug_info": True, }, ) gn_args.config( - "thin_lto", + name = "thin_lto", args = { "use_thin_lto": True, }, ) gn_args.config( - "try_builder", + name = "try_builder", configs = [ "dcheck_always_on", "minimal_symbols", @@ -1104,21 +1104,21 @@ ) gn_args.config( - "tsan", + name = "tsan", args = { "is_tsan": True, }, ) gn_args.config( - "ubsan", + name = "ubsan", args = { "is_ubsan": True, }, ) gn_args.config( - "ubsan_no_recover", + name = "ubsan_no_recover", args = { "is_ubsan_no_recover": True, }, @@ -1128,7 +1128,7 @@ ) gn_args.config( - "ubsan_security_non_vptr", + name = "ubsan_security_non_vptr", args = { "is_ubsan_security": True, "is_ubsan_vptr": False, @@ -1136,7 +1136,7 @@ ) gn_args.config( - "ubsan_vptr", + name = "ubsan_vptr", args = { "is_ubsan_vptr": True, }, @@ -1145,7 +1145,7 @@ # TODO(krasin): Remove when https://llvm.org/bugs/show_bug.cgi?id=25569 # is fixed and just use ubsan_vptr instead. gn_args.config( - "ubsan_vptr_no_recover_hack", + name = "ubsan_vptr_no_recover_hack", args = { "is_ubsan_no_recover": True, }, @@ -1155,56 +1155,56 @@ ) gn_args.config( - "updater", + name = "updater", args = { "enable_updater": True, }, ) gn_args.config( - "use_blink", + name = "use_blink", args = { "use_blink": True, }, ) gn_args.config( - "use_clang_coverage", + name = "use_clang_coverage", args = { "use_clang_coverage": True, }, ) gn_args.config( - "use_cups", + name = "use_cups", args = { "use_cups": True, }, ) gn_args.config( - "use_fake_dbus_clients", + name = "use_fake_dbus_clients", args = { "use_real_dbus_clients": False, }, ) gn_args.config( - "use_java_coverage", + name = "use_java_coverage", args = { "use_jacoco_coverage": True, }, ) gn_args.config( - "use_javascript_coverage", + name = "use_javascript_coverage", args = { "use_javascript_coverage": True, }, ) gn_args.config( - "v4l2_codec", + name = "v4l2_codec", # The build system dislikes enabling both V4L2 and VA-API. # Be explicit about which one we want to avoid platform defaults. args = { @@ -1214,14 +1214,14 @@ ) gn_args.config( - "v8_heap", + name = "v8_heap", args = { "v8_enable_verify_heap": True, }, ) gn_args.config( - "v8_hybrid", + name = "v8_hybrid", args = { "v8_target_cpu": "arm", }, @@ -1233,14 +1233,14 @@ # V8 flag that disables v8_enable_runtime_call_stats on release branches. gn_args.config( - "v8_release_branch", + name = "v8_release_branch", args = { "is_on_release_branch": True, }, ) gn_args.config( - "v8_simulate_arm", + name = "v8_simulate_arm", args = { "v8_target_cpu": "arm", }, @@ -1250,7 +1250,7 @@ ) gn_args.config( - "v8_simulate_arm64", + name = "v8_simulate_arm64", args = { "v8_target_cpu": "arm64", }, @@ -1260,12 +1260,12 @@ ) gn_args.config( - "volteer", + name = "volteer", args_file = "//build/args/chromeos/volteer.gni", ) gn_args.config( - "webview_google", + name = "webview_google", args = { "system_webview_package_name": "com.google.android.webview", }, @@ -1273,7 +1273,7 @@ # For Android N-P, only userdebug/eng gn_args.config( - "webview_monochrome", + name = "webview_monochrome", args = { "system_webview_package_name": "com.google.android.apps.chrome", }, @@ -1282,7 +1282,7 @@ # Mainly used by builders that use android emulator. # See https://bit.ly/3B1cyyt for more details. gn_args.config( - "webview_shell", + name = "webview_shell", args = { "system_webview_shell_package_name": "org.chromium.my_webview_shell", }, @@ -1290,35 +1290,35 @@ # For Android >=Q, only userdebug/eng gn_args.config( - "webview_trichrome", + name = "webview_trichrome", args = { "system_webview_package_name": "com.google.android.webview.debug", }, ) gn_args.config( - "win_cross", + name = "win_cross", args = { "target_os": "win", }, ) gn_args.config( - "x64", + name = "x64", args = { "target_cpu": "x64", }, ) gn_args.config( - "x86", + name = "x86", args = { "target_cpu": "x86", }, ) gn_args.config( - "xctest", + name = "xctest", args = {"enable_run_ios_unittests_with_xctest": True}, configs = ["ios"], )
diff --git a/infra/config/lib/gn_args.star b/infra/config/lib/gn_args.star index d3b0e44..10e85363 100644 --- a/infra/config/lib/gn_args.star +++ b/infra/config/lib/gn_args.star
@@ -124,7 +124,7 @@ return gn_config_key -def _config(name = None, args = {}, configs = [], args_file = ""): +def _config(*, name = None, args = {}, configs = [], args_file = ""): """Define a GN config. This method can be used to create commonly used GN config by setting
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn index 47eda294..532b1ec 100644 --- a/ios/chrome/app/BUILD.gn +++ b/ios/chrome/app/BUILD.gn
@@ -359,7 +359,6 @@ "//ios/chrome/app/application_delegate:application_delegate_internal", "//ios/chrome/browser/promos_manager:constants", "//ios/chrome/browser/promos_manager:promos_manager", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:signin_util", ]
diff --git a/ios/chrome/app/application_delegate/BUILD.gn b/ios/chrome/app/application_delegate/BUILD.gn index f2e29ef..2fe8167d3 100644 --- a/ios/chrome/app/application_delegate/BUILD.gn +++ b/ios/chrome/app/application_delegate/BUILD.gn
@@ -52,7 +52,6 @@ "//ios/chrome/browser/metrics/model", "//ios/chrome/browser/shared/coordinator/scene", "//ios/chrome/browser/shared/coordinator/scene/test", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/browser/test:test_support", "//ios/chrome/browser/shared/model/browser_state:test_support",
diff --git a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm index c7348534..315338c7 100644 --- a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm +++ b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
@@ -17,7 +17,6 @@ #import "ios/chrome/browser/shared/coordinator/scene/connection_information.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" #import "ios/chrome/browser/shared/coordinator/scene/test/fake_scene_state.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser_provider_interface.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h"
diff --git a/ios/chrome/app/post_restore_app_agent.mm b/ios/chrome/app/post_restore_app_agent.mm index 8159257..d62b116 100644 --- a/ios/chrome/app/post_restore_app_agent.mm +++ b/ios/chrome/app/post_restore_app_agent.mm
@@ -9,7 +9,6 @@ #import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/browser/promos_manager/constants.h" #import "ios/chrome/browser/promos_manager/promos_manager.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/signin_util.h"
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb index a01d6c2..d1f2b15e 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Help om Chromium se kenmerke en werkverrigting te verbeter</translation> <translation id="1513122820609681462">Stel Chromium as verstekblaaier</translation> <translation id="1531155317299575425">Wys porboodskappe om by Chromium aan te meld.</translation> +<translation id="159029779861043703">Chromium hou jou sensitiewe data met Gesig-ID veilig.</translation> <translation id="1591119736686995611">Maak die Chromium-oortjierooster oop.</translation> <translation id="1611584326765829247">Laat Chromium jou help om jou pakkette na te spoor</translation> <translation id="1617663976202781617">Data van Chromium-sinkronisering af</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb index bce9e2cb..96d8f64 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">የChromium ባህሪያት እና አፈጻጸም እንዲሻሻል ያግዙ</translation> <translation id="1513122820609681462">Chromiumን እንደ ነባሪ አሳሸ ያቀናብሩ</translation> <translation id="1531155317299575425">ወደ Chromium የመግባት ጥያቄዎችን ያሳያል።</translation> +<translation id="159029779861043703">Chromium አደጋ ሊያስከትል የሚችል ውሂብዎን በፊት መታወቂያ ደህንነቱን ይጠብቃል።</translation> <translation id="1591119736686995611">የChromium ትር ፍርግርግን ይከፍታል።</translation> <translation id="1611584326765829247">Chromium ጥቅሎችዎን ለመከታተል እንዲረዳዎት ይፍቀዱ</translation> <translation id="1617663976202781617">ከChromium ስምረት የመጣ ውሂብ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb index c2efbb11..4cde7f54 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">المساعدة على تحسين ميزات Chromium وأدائه</translation> <translation id="1513122820609681462">ضبط Chromium كمتصفِّح تلقائي</translation> <translation id="1531155317299575425">عرض رسائل مطالبة تسجيل الدخول إلى Chromium</translation> +<translation id="159029779861043703">يحمي Chromium بياناتك الحسّاسة باستخدام ميزة "التعرُّف على الوجه".</translation> <translation id="1591119736686995611">فتح شبكة علامات تبويب Chromium</translation> <translation id="1611584326765829247">السماح لمتصفّح Chromium بمساعدتك في تتبُّع الطرود</translation> <translation id="1617663976202781617">البيانات من مزامنة Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb index 0d17da5..5b899c5 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Chromium'un Funksiyalarını və Performansını Təkmilləşdirməyə Kömək Edin</translation> <translation id="1513122820609681462">Chromium-u defolt brauzer təyin edin</translation> <translation id="1531155317299575425">Chromium'a giriş tələblərini göstərir.</translation> +<translation id="159029779861043703">Chromium Üz ID-si ilə həssas datanı güvənli saxlayır.</translation> <translation id="1591119736686995611">Chromium tab toru açılır.</translation> <translation id="1611584326765829247">Chromium-a bağlamaları izləmək imkanı verin</translation> <translation id="1617663976202781617">Chromium sinxronizasiyası datası</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb index 390fefa6..77ed79d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Chromium-এর ফিচার এবং পারফর্ম্যান্স উন্নত করতে সাহায্য করুন</translation> <translation id="1513122820609681462">ডিফল্ট ব্রাউজার হিসেবে Chromium সেট করুন</translation> <translation id="1531155317299575425">Chromium-এ সাইন-ইন করার প্রম্পট দেখাবে।</translation> +<translation id="159029779861043703">Chromium, ফেস আইডির মাধ্যমে আপনার সংবেদনশীল ব্যক্তিগত তথ্য সুরক্ষিত রাখে।</translation> <translation id="1591119736686995611">Chromium ট্যাব গ্রিড খোলে।</translation> <translation id="1611584326765829247">Chromium-কে আপনার প্যাকেজ ট্র্যাক করার জন্য সাহায্য করতে দিন</translation> <translation id="1617663976202781617">Chromium সিঙ্ক থেকে ডেটা</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb index ed11495a..3fa1590 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Vær med til at forbedre Chromiums funktioner og effektivitet</translation> <translation id="1513122820609681462">Angiv Chromium som standardbrowser</translation> <translation id="1531155317299575425">Viser anmodninger om at logge ind i Chromium.</translation> +<translation id="159029779861043703">Chromium beskytter dine følsomme oplysninger med Face ID.</translation> <translation id="1591119736686995611">Åbner fanegitteret i Chromium.</translation> <translation id="1611584326765829247">Få hjælp af Chromium til at spore dine pakker</translation> <translation id="1617663976202781617">Data fra Chromium Sync</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb index 63253d3..b28feba 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Lagundu Chromium-en eginbideak eta funtzionamendua hobetzen</translation> <translation id="1513122820609681462">Ezarri Chromium arakatzaile lehenetsi gisa</translation> <translation id="1531155317299575425">Chromium-en saioa hasteko onarpen-mezuak erakusten ditu.</translation> +<translation id="159029779861043703">Chromium-ek Face ID bidez babesten ditu zure kontuzko datuak.</translation> <translation id="1591119736686995611">Chromium-en fitxen sareta irekitzen du.</translation> <translation id="1611584326765829247">Eman paketeen jarraipena egiten laguntzeko baimena Chromium-i</translation> <translation id="1617663976202781617">Chromium-en sinkronizazioaren datuak</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb index e7e51d7..cdf8d122 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">کمک به بهبود ویژگیها و عملکرد Chromium</translation> <translation id="1513122820609681462">تنظیم کردن Chromium بهعنوان مرورگر پیشفرض</translation> <translation id="1531155317299575425">برای ورود به سیستم Chromium درخواست نشان میدهد.</translation> +<translation id="159029779861043703">Chromium بااستفاده از Face ID امنیت دادههای حساس شما را حفظ میکند.</translation> <translation id="1591119736686995611">شبکه برگهها را در Chromium باز میکند.</translation> <translation id="1611584326765829247">به Chromium اجازه دهید در ردیابی بستهها به شما کمک کند</translation> <translation id="1617663976202781617">دادههای مربوط به همگامسازی Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb index 8211a8a..a42c0204 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Auta parantamaan Chromiumin ominaisuuksia ja suorituskykyä</translation> <translation id="1513122820609681462">Valitse Chromium oletusselaimeksi</translation> <translation id="1531155317299575425">Näytä kehotteet kirjautua Chromiumiin.</translation> +<translation id="159029779861043703">Chromium pitää arkaluontoiset tietosi turvassa Face ID:n avulla.</translation> <translation id="1591119736686995611">Avaa Chromiumin välilehtiruudukon.</translation> <translation id="1611584326765829247">Anna Chromiumin auttaa pakettien seuraamisessa</translation> <translation id="1617663976202781617">Chromiumin synkronointidata</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb index 3d6b8a3..73e7c9f5 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Tumulong sa Pagpapahusay ng Mga Feature at Performance ng Chromium</translation> <translation id="1513122820609681462">Itakda ang Chromium Bilang Default na Browser</translation> <translation id="1531155317299575425">Nagpapakita ng mga prompt na mag-sign in sa Chromium.</translation> +<translation id="159029779861043703">Pinapanatiling secure ng Chromium ang iyong sensitibong data gamit ang Face ID.</translation> <translation id="1591119736686995611">Mabubuksan ang Tab Grid sa Chromium.</translation> <translation id="1611584326765829247">Payagan ang Chromium na tulungan kang i-track ang iyong mga package</translation> <translation id="1617663976202781617">Data mula sa pag-sync sa Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb index 62b6cc2..67c7379 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Axudar a mellorar o rendemento e as funcións de Chromium</translation> <translation id="1513122820609681462">Define Chromium como o navegador predeterminado</translation> <translation id="1531155317299575425">Mostra solicitudes para iniciar sesión en Chromium.</translation> +<translation id="159029779861043703">Chromium protexe os teus datos confidenciais con Face ID.</translation> <translation id="1591119736686995611">Abre a grade de pestanas de Chromium.</translation> <translation id="1611584326765829247">Permitir que Chromium che axude a facer un seguimento dos teus paquetes</translation> <translation id="1617663976202781617">Datos da sincronización de Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb index 135474e..93d1d6a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Chromiumની સુવિધાઓ અને કાર્યપ્રદર્શનને બહેતર બનાવવામાં સહાય કરો</translation> <translation id="1513122820609681462">Chromiumને ડિફૉલ્ટ બ્રાઉઝર તરીકે સેટ કરો</translation> <translation id="1531155317299575425">Chromiumમાં સાઇન ઇન કરવા માટેના સંકેતો બતાવો.</translation> +<translation id="159029779861043703">Chromium ચહેરાના ID વડે તમારો સંવેદનશીલ વ્યક્તિગત ડેટા સુરક્ષિત રાખે છે.</translation> <translation id="1591119736686995611">Chromium ટૅબ ગ્રિડ ખોલે છે.</translation> <translation id="1611584326765829247">તમારા પૅકેજને ટ્રૅક કરવામાં Chromiumને તમારી સહાય કરવા દો</translation> <translation id="1617663976202781617">Chromium સિંકમાંનો ડેટા</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb index e9a1e0e0..6a2a4ca 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">क्रोमियम की सुविधाओं और प्रदर्शन को बेहतर बनाने में मदद करें</translation> <translation id="1513122820609681462">Chromium को डिफ़ॉल्ट ब्राउज़र के तौर पर सेट करें</translation> <translation id="1531155317299575425">Chromium में साइन इन करने के निर्देश दिखाता है.</translation> +<translation id="159029779861043703">Chromium, Face ID की मदद से आपकी संवेदनशील जानकारी को सुरक्षित रखता है.</translation> <translation id="1591119736686995611">Chromium में टैब ग्रिड खोलता है.</translation> <translation id="1611584326765829247">Chromium को आपके पैकेज ट्रैक करने में मदद करने दें</translation> <translation id="1617663976202781617">क्रोमियम सिंक से मिला डेटा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb index 9ac8b05d..d6d10c0 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Bantu Sempurnakan Fitur dan Performa Chromium</translation> <translation id="1513122820609681462">Setel Chromium Sebagai Browser Default</translation> <translation id="1531155317299575425">Menampilkan perintah untuk login ke Chromium.</translation> +<translation id="159029779861043703">Chromium menjaga keamanan data sensitif Anda dengan Face ID.</translation> <translation id="1591119736686995611">Membuka Petak Tab Chromium.</translation> <translation id="1611584326765829247">Izinkan Chromium membantu Anda melacak paket</translation> <translation id="1617663976202781617">Data dari sinkronisasi Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb index 7b210b8..643d03d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Contribuisci a migliorare le funzionalità e le prestazioni di Chromium</translation> <translation id="1513122820609681462">Imposta Chromium come browser predefinito</translation> <translation id="1531155317299575425">Vengono mostrate richieste di accesso a Chromium.</translation> +<translation id="159029779861043703">Chromium protegge i tuoi dati sensibili con Face ID.</translation> <translation id="1591119736686995611">Apre la griglia delle schede di Chromium.</translation> <translation id="1611584326765829247">Consenti a Chromium di aiutarti a monitorare i tuoi pacchi</translation> <translation id="1617663976202781617">Dati dalla Sincronizzazione Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb index 95d8da9..60046570 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Chromium の機能と動作の改善に協力する</translation> <translation id="1513122820609681462">Chromium を既定のブラウザに設定する</translation> <translation id="1531155317299575425">Chromium へのログインを促すメッセージが表示されます。</translation> +<translation id="159029779861043703">Chromium では、Face ID を使用してセンシティブ データを保護します。</translation> <translation id="1591119736686995611">Chromium タブグリッドを開きます。</translation> <translation id="1611584326765829247">Chromium で荷物を追跡する</translation> <translation id="1617663976202781617">Chromium 同期のデータ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb index 330b7b3..14bfd98 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">შეუწყვეთ ხელი Chromium-ის ფუნქციებისა და წარმადობის გაუმჯობესებას</translation> <translation id="1513122820609681462">Chromium-ის დაყენება ნაგულისხმევ ბრაუზერად</translation> <translation id="1531155317299575425">გამოაჩენს Chromium-ში შესვლის მოთხოვნებს.</translation> +<translation id="159029779861043703">Chromium უზრუნველყოფს თქვენი სენსიტიური მონაცემების უსაფრთხოებას Face ID-ს მეშვეობით.</translation> <translation id="1591119736686995611">გახსნის Chromium-ის ჩანართების ბადეს.</translation> <translation id="1611584326765829247">მიეცით საშუალება Chromium-ს, დაგეხმაროთ თქვენი ამანათებისთვის თვალის მიდევნებაში</translation> <translation id="1617663976202781617">მონაცემები Chromium-ის სინქრონიზაციიდან</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb index f758fee6..8dce1f4a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Chromium ನ ವೈಶಿಷ್ಟ್ಯಗಳು ಹಾಗೂ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation> <translation id="1513122820609681462">Chromium ಅನ್ನು ಡೀಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಆಗಿ ಸೆಟ್ ಮಾಡಿ</translation> <translation id="1531155317299575425">Chromium ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ತೋರಿಸುತ್ತದೆ.</translation> +<translation id="159029779861043703">Chromium ನಿಮ್ಮ ಸೂಕ್ಷ್ಮವಾದ ವೈಯಕ್ತಿಕ ಡೇಟಾವನ್ನು ಫೇಸ್ ID ಮೂಲಕ ಸುರಕ್ಷಿತವಾಗಿರಿಸುತ್ತದೆ.</translation> <translation id="1591119736686995611">Chromium ಟ್ಯಾಬ್ ಗ್ರಿಡ್ ಅನ್ನು ತೆರೆಯುತ್ತದೆ.</translation> <translation id="1611584326765829247">ನಿಮ್ಮ ಪ್ಯಾಕೇಜ್ಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು Chromium ನಿಮಗೆ ಸಹಾಯ ಮಾಡಲಿ</translation> <translation id="1617663976202781617">Chromium ಸಿಂಕ್ನಿಂದ ಡೇಟಾ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb index f5148bd..8583bd5d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Chromium의 기능 및 성능 개선에 참여</translation> <translation id="1513122820609681462">Chromium을 기본 브라우저로 설정</translation> <translation id="1531155317299575425">Chromium에 로그인하기 위한 메시지를 표시합니다.</translation> +<translation id="159029779861043703">Chromium은 Face ID를 통해 사용자의 민감한 정보를 안전하게 보호합니다.</translation> <translation id="1591119736686995611">Chromium 탭 그리드를 엽니다.</translation> <translation id="1611584326765829247">Chromium의 도움을 받아 배송 현황을 추적하세요</translation> <translation id="1617663976202781617">Chromium 동기화 데이터</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb index 87ee1f7..fcd8eb8 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Padėti tobulinti „Chromium“ funkcijas ir našumą</translation> <translation id="1513122820609681462">Nustatyti „Chromium“ kaip numatytąją naršyklę</translation> <translation id="1531155317299575425">Rodomi raginimai prisijungti prie „Chromium“.</translation> +<translation id="159029779861043703">„Chromium“ apsaugo neskelbtinus duomenis, kai naudodamas „Face ID“.</translation> <translation id="1591119736686995611">Atidaromas „Chromium“ skirtukų tinklelis.</translation> <translation id="1611584326765829247">Leiskite „Chromium“ padėti stebėti jūsų siuntinius</translation> <translation id="1617663976202781617">„Chromium“ sinchronizavimo duomenys</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb index da6ec5f..41dfea8a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Palīdzēt uzlabot Chromium funkcijas un veiktspēju</translation> <translation id="1513122820609681462">Chromium iestatīšana par noklusējuma pārlūku</translation> <translation id="1531155317299575425">Tiek rādīti aicinājumi pierakstīties pārlūkā Chromium.</translation> +<translation id="159029779861043703">Pārlūkā Chromium jūsu sensitīvie dati tiek aizsargāti, izmantojot sejas ID.</translation> <translation id="1591119736686995611">Pārlūkā Chromium atver ciļņu režģi.</translation> <translation id="1611584326765829247">Izmantojiet pārlūku Chromium sūtījumu izsekošanai</translation> <translation id="1617663976202781617">Chromium sinhronizācijas dati</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb index 3955a9a..e0b9492 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Contribuie la îmbunătățirea funcțiilor și performanței Chromium</translation> <translation id="1513122820609681462">Setează Chromium ca browser prestabilit</translation> <translation id="1531155317299575425">Afișează solicitări pentru conectarea la Chromium.</translation> +<translation id="159029779861043703">Chromium îți păstrează în siguranță datele sensibile cu Face ID.</translation> <translation id="1591119736686995611">Deschide grila cu file Chromium.</translation> <translation id="1611584326765829247">Permite ca Chromium să te ajute să urmărești colete</translation> <translation id="1617663976202781617">Date din sincronizarea Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb index f70167e5..67f02be 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Помочь улучшить производительность и функции Chromium</translation> <translation id="1513122820609681462">Сделать Chromium браузером по умолчанию</translation> <translation id="1531155317299575425">Показывать подсказки для входа в Chromium</translation> +<translation id="159029779861043703">Chromium защищает ваши конфиденциальные данные с помощью Face ID.</translation> <translation id="1591119736686995611">Открывает страницу вкладок в Chromium.</translation> <translation id="1611584326765829247">Отслеживайте посылки с помощью Chromium</translation> <translation id="1617663976202781617">Данные, сохраненные с помощью синхронизации Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb index 6bcc068..9cd34a6 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Допомогти покращити ефективність і функції Chromium</translation> <translation id="1513122820609681462">Зробити Chromium веб-переглядачем за умовчанням</translation> <translation id="1531155317299575425">Показувати сповіщення для входу в Chromium.</translation> +<translation id="159029779861043703">Chromium захищає ваші конфіденційні дані за допомогою функції Face ID.</translation> <translation id="1591119736686995611">Відкриває сітку вкладок у Chromium.</translation> <translation id="1611584326765829247">Дозвольте Chromium допомагати вам відстежувати відправлення</translation> <translation id="1617663976202781617">Дані синхронізації Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb index c15012e8..e989573 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Giúp cải thiện hiệu suất và các tính năng của Chromium</translation> <translation id="1513122820609681462">Đặt Chromium làm trình duyệt mặc định</translation> <translation id="1531155317299575425">Hiển thị lời nhắc đăng nhập vào Chromium.</translation> +<translation id="159029779861043703">Chromium bảo vệ dữ liệu nhạy cảm của bạn bằng Face ID.</translation> <translation id="1591119736686995611">Mở lưới thẻ trong Chromium.</translation> <translation id="1611584326765829247">Cho phép Chromium giúp bạn theo dõi các gói hàng của mình</translation> <translation id="1617663976202781617">Dữ liệu từ tính năng đồng bộ hóa của Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb index 83d28c5..243b47a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb
@@ -15,6 +15,7 @@ <translation id="1507010443238049608">Siza ukuthuthukisa izici ze-Chromium nokusebenza</translation> <translation id="1513122820609681462">Setha i-Chromium Njengebhrawuza Ezenzakalelayo</translation> <translation id="1531155317299575425">Ibonisa isiqondiso sokungena ngemvume ku-Chromium.</translation> +<translation id="159029779861043703">I-Chromium igcina idatha yakho enozwelo ivikelekile nge-Face ID.</translation> <translation id="1591119736686995611">Vula Ithebhu Ye-Grid Ye-Chromium.</translation> <translation id="1611584326765829247">Vumela i-Chromium ikusize ulandelele amaphakheji akho</translation> <translation id="1617663976202781617">Idatha kusukela ekuvunyelanisweni kwe-Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb index e8d114f..7848329 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome wil toegang tot die kamera hê</translation> <translation id="7754633291442704733">Jou organisasie <ph name="DOMAIN" /> sal toegang hê tot jou Chrome-data, -boekmerke, -geskiedenis, -wagwoorde en ander -instellings wat jy in hierdie rekening stoor. Wanneer jy afmeld, sal jou data van hierdie toestel uitgevee word. Jou data sal egter gestoor bly in jou bestuurde Google-rekening en beskikbaar wees vir jou organisasie. Jou organisasie kan ook gebruikersbeleide spesifiek vir daardie rekening stel wat die gedrag van Chrome kan verander.</translation> <translation id="7780154209050837198">Meld met jou Google-rekening by Chrome aan om die meeste voordeel daaruit te trek.</translation> +<translation id="7792140019572081272">Chrome hou jou sensitiewe data met Gesig-ID veilig.</translation> <translation id="7855730255114109580">Google Chrome is op datum</translation> <translation id="7897703007638178753">Sien Chrome se onlangse oortjies</translation> <translation id="7925119591961387184">Kies “Chrome.”</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb index c1b849e7..e77d2e1 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome ካሜራውን መድረስ ይፈልጋል</translation> <translation id="7754633291442704733">ድርጅትዎ <ph name="DOMAIN" /> በዚህ መለያ ወደሚያከማቹት የእርስዎ Chrome ውሂብ፣ እልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች መድረስ ይችላል። ዘግተው በሚወጡበት ጊዜ፣ ውሂብዎ ከዚህ መሣሪያ ላይ ይጸዳል። ሆኖም፣ ውሂብዎ በሚተዳደር የGoogle መለያዎ እንደተከማቸ የሚቆይ እና ለድርጅትዎ የሚገኝ ይሆናል። እንዲሁም ድርጅትዎ የChromeን ባህሪ መቀየር የሚችሉ ለዚያ መለያ የተወሰኑ የተጠቃሚ መመሪያዎችን ማቀናበር ይችላል።</translation> <translation id="7780154209050837198">ከChrome የበለጠ ለማግኘት በGoogle መለያዎ ወደ Chrome ይግቡ።</translation> +<translation id="7792140019572081272">Chrome አደጋ ሊያስከትል የሚችል ውሂብዎን በፊት መታወቂያ ደህንነቱን ይጠብቃል።</translation> <translation id="7855730255114109580">Google Chrome የተዘመነ ነው</translation> <translation id="7897703007638178753">የChrome የቅርብ ጊዜ ትሮችን ይመልከቱ</translation> <translation id="7925119591961387184">«Chrome» የሚለውን ይምረጡ።</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb index 3c6e8a6..798708f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">متصفِّح Chrome يريد الوصول إلى الكاميرا</translation> <translation id="7754633291442704733">ستتمكن مؤسستك <ph name="DOMAIN" /> من الوصول إلى البيانات والإشارات المرجعية والسجلّ وكلمات المرور الخاصة بمتصفِّح Chrome والإعدادات الأخرى التي تخزنها في هذا الحساب. سيتم محو البيانات من هذا الجهاز عند تسجيل الخروج. ومع ذلك، ستبقى بياناتك مُخزَّنة في حساب Google المُدار، وستكون متاحة لمؤسستك. يمكن لمؤسستك ضبط سياسات المُستخدِم الخاصة بذلك الحساب لتغيير سلوك متصفِّح Chrome.</translation> <translation id="7780154209050837198">للاستفادة إلى أقصى حدّ من Chrome، سجِّل الدخول إلى متصفِّح Chrome باستخدام حسابك على Google.</translation> +<translation id="7792140019572081272">يحمي Chrome بياناتك الحسّاسة باستخدام ميزة "التعرُّف على الوجه".</translation> <translation id="7855730255114109580">Google Chrome محدّث</translation> <translation id="7897703007638178753">الاطّلاع على علامات التبويب الأخيرة في Chrome</translation> <translation id="7925119591961387184">اختَر "Chrome".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb index a5c88d5..12e870e1 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome kameraya daxil olmaq istəyir</translation> <translation id="7754633291442704733">Təşkilatınızın (<ph name="DOMAIN" />) bu hesabda saxladığınız Chrome datası, əlfəcinlər, tarixçələr, parollar və digər ayarlara girişi olacaq. Hesabdan çıxdığınız zaman datanız bu cihazdan silinəcək. Bununla belə, datanız idarə olunan Google Hesabınızda saxlanacaq və təşkilatınız üçün əlçatan olacaq. Təşkilatınız həmçinin Chrome'un davranışını dəyişə bilən hesab üçün xüsusi istifadəçi siyasətləri təyin edə bilər.</translation> <translation id="7780154209050837198">Chrome'dan maksimum yararlanmaq üçün Google Hesabınızla Chrome'a daxil olun.</translation> +<translation id="7792140019572081272">Chrome Üz ID-si ilə həssas datanı güvənli saxlayır.</translation> <translation id="7855730255114109580">Google Chrome güncəldir</translation> <translation id="7897703007638178753">Son Chrome tablarına baxın</translation> <translation id="7925119591961387184">"Chrome" seçin.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb index aced882..49515ffa 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome ক্যামেরা অ্যাক্সেস করতে চাইবে</translation> <translation id="7754633291442704733">আপনার সংস্থা <ph name="DOMAIN" />-এর কাছে আপনার Chrome ডেটা, বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং এই অ্যাকাউন্টে আপনার স্টোর করা অন্যান্য সেটিংসে অ্যাক্সেস রয়েছে। সাইন-আউট করার সময় এই ডিভাইস থেকে আপনার ডেটা মুছে ফেলা হবে। যাইহোক, আপনার ম্যানেজ করা Google অ্যাকাউন্টে ডেটা স্টোর করা থাকবে এবং আপনার সংস্থা সেটি অ্যাক্সেস করতে পারবে। আপনার সংস্থা সেই অ্যাকাউন্টে ব্যবহারকারী নীতিও সেট করতে পারে যা Chrome-এর আচরণ পরিবর্তন করে।</translation> <translation id="7780154209050837198">Chrome থেকে সবচেয়ে বেশি সুবিধা পেতে, আপনার Google অ্যাকাউন্ট দিয়ে Chrome-এ সাইন-ইন করুন।</translation> +<translation id="7792140019572081272">Chrome, ফেস আইডির মাধ্যমে আপনার সংবেদনশীল ব্যক্তিগত তথ্য সুরক্ষিত রাখে।</translation> <translation id="7855730255114109580">Google Chrome আপ টু ডেট আছে</translation> <translation id="7897703007638178753">Chrome-এর সাম্প্রতিক ট্যাব দেখুন</translation> <translation id="7925119591961387184">"Chrome" বেছে নিন।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb index f6cee5cc..bae73c7 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome anmoder om adgang til kameraet</translation> <translation id="7754633291442704733">Din organisation <ph name="DOMAIN" /> får adgang til din Chrome-historik samt dine Chrome-data, -bogmærker, -adgangskoder og andre indstillinger, som du har gemt på denne konto. Når du logger ud, ryddes dine data fra denne enhed. Dine data vil dog fortsat være gemt på din managerstyrede Google-konto, og de vil fortsat være tilgængelige for din organisation. Din organisation kan også konfigurere brugerpolitikker, der gælder specifikt for den pågældende konto, og som kan ændre Chromes adfærd.</translation> <translation id="7780154209050837198">Log ind i Chrome med din Google-konto for at få mest muligt ud af Chrome.</translation> +<translation id="7792140019572081272">Chrome beskytter dine følsomme oplysninger med Face ID.</translation> <translation id="7855730255114109580">Google Chrome er opdateret</translation> <translation id="7897703007638178753">Se seneste faner i Chrome</translation> <translation id="7925119591961387184">Vælg "Chrome".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb index caa1cc3..b52488d 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome-k kamera atzitu nahi du</translation> <translation id="7754633291442704733">Chrome-ko datuak, laster-markak, historia, pasahitzak eta kontu honetan gordetzen dituzun bestelako ezarpenak atzitu ahalko ditu zure erakundeak (<ph name="DOMAIN" />). Saioa amaitzen duzunean, datuak garbitu egingo dira gailu honetatik. Hala ere, Google-ko kontu kudeatuan jarraituko dute, eta erakundea haiek atzitzeko gai izango da. Halaber, erabiltzaile-gidalerro jakin batzuk ezar ditzake erakundeak kontu horretarako, eta gidalerro horiek Chrome-ren portaera alda dezakete.</translation> <translation id="7780154209050837198">Chrome-ri etekinik handiena ateratzeko, hasi saioa Chrome-n Google-ko kontuarekin.</translation> +<translation id="7792140019572081272">Chrome-k Face ID bidez babesten ditu zure kontuzko datuak.</translation> <translation id="7855730255114109580">Eguneratuta dago Google Chrome</translation> <translation id="7897703007638178753">Ikusi Chrome-ren azken fitxak</translation> <translation id="7925119591961387184">Hautatu "Chrome".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb index 98f17988..a61ec85 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome میخواهد به «دوربین» دسترسی داشته باشد</translation> <translation id="7754633291442704733">سازمانتان (<ph name="DOMAIN" />) به دادههای Chrome، نشانکها، سابقه، گذرواژهها، و دیگر تنظیماتی که در حسابتان ذخیره میکنید دسترسی خواهد داشت. وقتی از سیستم خارج میشوید، دادههایتان از این دستگاه پاک خواهد شد. اما دادههایتان در «حساب Google» مدیریتشده شما باقی خواهد ماند و برای سازمانتان دردسترس خواهد بود. سازمانتان همچنین میتواند خطمشیهای کاربر مختص آن حساب را تنظیم کند که میتواند رفتار Chrome را تغییر دهید.</translation> <translation id="7780154209050837198">برای اینکه بیشترین بهره را از Chrome ببرید، با «حساب Google» به سیستم Chrome وارد شوید.</translation> +<translation id="7792140019572081272">Chrome بااستفاده از Face ID امنیت دادههای حساس شما را حفظ میکند.</translation> <translation id="7855730255114109580">Google Chrome بهروز است</translation> <translation id="7897703007638178753">دیدن برگههای اخیر Chrome</translation> <translation id="7925119591961387184">«Chrome» را انتخاب کنید.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb index 6516d22c..41333f8 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome pyytää kameran käyttöoikeutta</translation> <translation id="7754633291442704733">Organisaatiosi <ph name="DOMAIN" /> saa pääsyn Chrome-dataasi, kirjanmerkkeihisi, historiaasi, salasanoihisi ja muihin asetuksiisi, jotka olet tallentanut tälle tilille. Kun kirjaudut ulos, datasi tyhjennetään tältä laitteelta. Data säilyy kuitenkin hallinnoidulla Google-tililläsi ja on organisaation saatavilla. Organisaatiosi voi myös asettaa tilikohtaisia käyttäjäkäytäntöjä, jotka voivat muuttaa Chromen toimintaa.</translation> <translation id="7780154209050837198">Kirjaudu sisään Chromeen Google-tililläsi, jotta saat parhaan hyödyn Chromesta.</translation> +<translation id="7792140019572081272">Chrome pitää arkaluontoiset tietosi turvassa Face ID:n avulla.</translation> <translation id="7855730255114109580">Google Chrome on ajan tasalla</translation> <translation id="7897703007638178753">Näytä Chromen viimeaikaiset välilehdet</translation> <translation id="7925119591961387184">Valitse Chrome.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb index 265ee34e..46f92e6 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Gustong I-access ng Chrome ang Camera</translation> <translation id="7754633291442704733">Magkakaroon ng access ang <ph name="DOMAIN" /> ng iyong organisasyon sa data, mga bookmark, history, mga password, at iba mo pang setting sa Chrome na iso-store mo sa account na ito. Kapag nag-sign out ka, maki-clear ang iyong data sa device na ito. Gayunpaman, mananatiling naka-store ang iyong data sa pinapamahalaang Google Account mo at magiging available ito sa iyong organisasyon. Puwede ring magtakda ang iyong organisasyon ng mga patakaran ng user na partikular sa account na iyon na puwedeng makabago sa gawi ng Chrome.</translation> <translation id="7780154209050837198">Para masulit ang Chrome, mag-sign in sa Chrome gamit ang iyong Google Account.</translation> +<translation id="7792140019572081272">Pinapanatiling secure ng Chrome ang iyong sensitibong data gamit ang Face ID.</translation> <translation id="7855730255114109580">Napapanahon ang Google Chrome</translation> <translation id="7897703007638178753">Tingnan ang Mga Kamakailang Tab sa Chrome</translation> <translation id="7925119591961387184">Piliin ang "Chrome."</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb index 592cd9c3..70e8b63c 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome quere acceder á cámara</translation> <translation id="7754633291442704733">A túa organización (<ph name="DOMAIN" />) terá acceso aos teus datos de Chrome, así como aos marcadores, ao historial, aos contrasinais e a outras opcións de configuración que almacenes nesta conta. Cando peches sesión, os datos borraranse deste dispositivo. Non obstante, permanecerán almacenados na túa Conta de Google xestionada e estarán dispoñibles para a túa organización. Esta tamén pode definir políticas de usuario específicas para esa conta que poden modificar o comportamento de Chrome.</translation> <translation id="7780154209050837198">Para tirarlle o máximo partido a Chrome, inicia sesión coa túa Conta de Google en Chrome.</translation> +<translation id="7792140019572081272">Chrome protexe os teus datos confidenciais con Face ID.</translation> <translation id="7855730255114109580">Google Chrome está actualizado</translation> <translation id="7897703007638178753">Mostra as pestanas recentes de Chrome</translation> <translation id="7925119591961387184">Selecciona Chrome.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb index 5aaae2e..e2b5362 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chromeને કૅમેરાનો ઍક્સેસ જોઈશે</translation> <translation id="7754633291442704733">તમારી સંસ્થા <ph name="DOMAIN" />ને તમારા Chrome ડેટા, બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને તમે આ એકાઉન્ટમાં સ્ટોર કરો છો તે અન્ય સેટિંગનો ઍક્સેસ મળશે. જ્યારે તમે સાઇન આઉટ કરશો, ત્યારે આ ડિવાઇસમાંથી તમારો ડેટા સાફ કરવામાં આવશે. જોકે, તમારો ડેટા તમારા મેનેજ કરેલા Google એકાઉન્ટમાં સ્ટોર કરેલો રહેશે અને તમારી સંસ્થા માટે ઉપલબ્ધ રહેશે. તમારી સંસ્થા વિશેષ કરીને તે એકાઉન્ટ માટે વપરાશકર્તાની પૉલિસીઓ સેટ કરી શકે છે કે જે Chromeના વર્તનને બદલી શકે છે.</translation> <translation id="7780154209050837198">Chromeનો વધુમાં વધુ લાભ લેવા માટે, તમારા Google એકાઉન્ટ વડે Chromeમાં સાઇન ઇન કરો.</translation> +<translation id="7792140019572081272">Chrome ચહેરાના ID વડે તમારો સંવેદનશીલ વ્યક્તિગત ડેટા સુરક્ષિત રાખે છે.</translation> <translation id="7855730255114109580">Google Chrome અપ ટૂ ડેટ છે</translation> <translation id="7897703007638178753">Chromeના તાજેતરના ટૅબ જુઓ</translation> <translation id="7925119591961387184">"Chrome" પસંદ કરો.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb index c17f8abd..149e4546 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome आपका कैमरा ऐक्सेस करना चाहता है</translation> <translation id="7754633291442704733">आपके संगठन <ph name="DOMAIN" /> के पास, आपके Chrome डेटा, बुकमार्क, इतिहास, पासवर्ड, और इस खाते में स्टोर की जाने वाली अन्य सेटिंग का ऐक्सेस होगा. साइन आउट करने पर, आपका डेटा इस डिवाइस से मिटा दिया जाएगा. हालांकि, आपका डेटा, मैनेज किए जा रहे आपके Google खाते में सेव रहेगा और आपके संगठन के लिए उपलब्ध रहेगा. आपका संगठन उस खाते के लिए खास उपयोगकर्ता नीतियां भी सेट कर सकता है. इन नीतियों से, Chrome के काम करने के तरीके में बदलाव आ सकता है.</translation> <translation id="7780154209050837198">Chrome का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, अपने Google खाते से Chrome में साइन इन करें.</translation> +<translation id="7792140019572081272">Chrome, Face ID की मदद से आपकी संवेदनशील जानकारी को सुरक्षित रखता है.</translation> <translation id="7855730255114109580">Google Chrome अप टू डेट है</translation> <translation id="7897703007638178753">Chrome में हाल ही के टैब देखें</translation> <translation id="7925119591961387184">"Chrome" चुनें.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb index a544403..65a2f75 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome Ingin Mengakses Kamera</translation> <translation id="7754633291442704733">Organisasi Anda <ph name="DOMAIN" /> akan memiliki akses ke data, bookmark, histori, sandi, dan setelan Chrome lainnya yang Anda simpan di akun ini. Jika logout, data Anda akan dihapus dari perangkat ini. Namun, data akan tetap disimpan di Akun Google terkelola Anda dan tersedia untuk organisasi Anda. Organisasi juga dapat menetapkan kebijakan pengguna khusus untuk akun tersebut yang dapat mengubah perilaku Chrome.</translation> <translation id="7780154209050837198">Untuk mengoptimalkan Chrome, login ke Chrome dengan Akun Google Anda.</translation> +<translation id="7792140019572081272">Chrome menjaga keamanan data sensitif Anda dengan Face ID.</translation> <translation id="7855730255114109580">Ini adalah Google Chrome versi terbaru</translation> <translation id="7897703007638178753">Lihat Tab Terbaru Chrome</translation> <translation id="7925119591961387184">Pilih "Chrome".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb index 3a2773ce9..f175840 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome vorrebbe accedere alla fotocamera</translation> <translation id="7754633291442704733">La tua organizzazione <ph name="DOMAIN" /> avrà accesso ai dati, ai preferiti, alla cronologia, alle password e ad altre impostazioni di Chrome memorizzate in questo account. Quando esci, i dati verranno cancellati da questo dispositivo. Tuttavia, i tuoi dati rimarranno memorizzati nel tuo Account Google gestito e saranno disponibili per la tua organizzazione. La tua organizzazione può anche impostare criteri relativi agli utenti specifici per l'account, in grado di modificare il comportamento di Chrome.</translation> <translation id="7780154209050837198">Accedi con il tuo Account Google a Chrome per usare al meglio questo browser.</translation> +<translation id="7792140019572081272">Chrome protegge i tuoi dati sensibili con Face ID.</translation> <translation id="7855730255114109580">Google Chrome è aggiornato</translation> <translation id="7897703007638178753">Visualizza le schede recenti di Chrome</translation> <translation id="7925119591961387184">Seleziona "Chrome".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb index cb4da44..6c17f3c5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome がカメラへのアクセス許可を求めています</translation> <translation id="7754633291442704733">このアカウントで保存した Chrome のデータ、ブックマーク、履歴、パスワード、その他の設定は、組織(<ph name="DOMAIN" />)からアクセス可能となります。ログアウトすると、データはこのデバイスから消去されますが、管理対象の Google アカウントには保存されたままで、組織はこれを使用できます。また、組織はこのアカウント専用のユーザー ポリシーを設定して、Chrome の動作を変更することも可能です。</translation> <translation id="7780154209050837198">Chrome を最大限に活用するには、Google アカウントで Chrome にログインしてください。</translation> +<translation id="7792140019572081272">Chrome では、Face ID を使用してセンシティブ データを保護します。</translation> <translation id="7855730255114109580">Google Chrome は最新版です</translation> <translation id="7897703007638178753">Chrome で最近使ったタブを表示</translation> <translation id="7925119591961387184">[Chrome] を選択します。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb index 50c5761..4887528 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome-ს კამერაზე წვდომის მიღება სურს</translation> <translation id="7754633291442704733">თქვენს ორგანიზაციას, <ph name="DOMAIN" />, წვდომა ექნება თქვენს Chrome მონაცემებზე, სანიშნეებზე, ისტორიაზე, პაროლებსა და სხვა პარამეტრებზე, რომლებიც თქვენ მიერ შენახულია ამ ანგარიშში. ანგარიშიდან გასვლისას თქვენი მონაცემები გასუფთავდება ამ მოწყობილობაზე. მიუხედავად ამისა, თქვენი მონაცემები შენახული დარჩება თქვენს მართულ Google ანგარიშში და ისინი ხელმისაწვდომი იქნება თქვენი ორგანიზაციისთვის. ამასთან, თქვენს ორგანიზაციას შეუძლია ანგარიშის მიხედვით სპეციფიკური ისეთი სამომხმარებლო წესების განსაზღვრა, რომლებსაც Chrome-ის ფუნქციონალის შეცვლა შეუძლია.</translation> <translation id="7780154209050837198">Chrome-ის შესაძლებლობები მაქსიმალურად რომ გამოიყენოთ, შედით Chrome-ში თქვენი Google ანგარიშით.</translation> +<translation id="7792140019572081272">Chrome უზრუნველყოფს თქვენი სენსიტიური მონაცემების უსაფრთხოებას Face ID-ს მეშვეობით.</translation> <translation id="7855730255114109580">Google Chrome განახლებულია</translation> <translation id="7897703007638178753">Chrome-ის ბოლოდროინდელი ჩანართების ნახვა</translation> <translation id="7925119591961387184">აირჩიეთ „Chrome“.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb index 56fecce5..4050b529 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸಲು Chrome ಬಯಸುತ್ತದೆ</translation> <translation id="7754633291442704733">ನಿಮ್ಮ <ph name="DOMAIN" /> ಸಂಸ್ಥೆಯು ನಿಮ್ಮ Chrome ಡೇಟಾ, ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಈ ಖಾತೆಯಲ್ಲಿ ನೀವು ಸಂಗ್ರಹಿಸುವ ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುತ್ತದೆ. ನೀವು ಸೈನ್ ಔಟ್ ಮಾಡಿದ ನಂತರ, ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ. ಆದರೂ, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಲಾದ ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ ಹಾಗೂ ಇದೆಲ್ಲವೂ ನಿಮ್ಮ ಸಂಸ್ಥೆಗೆ ಲಭ್ಯವಿರುತ್ತದೆ. Chrome ಕಾರ್ಯನಿರ್ವಹಿಸುವ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸಲು ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಆ ಖಾತೆಗೆ ನಿರ್ದಿಷ್ಟವಾದ ಬಳಕೆದಾರ ನೀತಿಗಳನ್ನು ಸಹ ಸೆಟ್ ಮಾಡಬಹುದು.</translation> <translation id="7780154209050837198">Chrome ನಿಂದ ಹೆಚ್ಚಿನ ಪ್ರಯೋಜನ ಪಡೆದುಕೊಳ್ಳಲು, ನಿಮ್ಮ Google ಖಾತೆಯ ಮೂಲಕ Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> +<translation id="7792140019572081272">Chrome ನಿಮ್ಮ ಸೂಕ್ಷ್ಮವಾದ ವೈಯಕ್ತಿಕ ಡೇಟಾವನ್ನು ಫೇಸ್ ID ಮೂಲಕ ಸುರಕ್ಷಿತವಾಗಿರಿಸುತ್ತದೆ.</translation> <translation id="7855730255114109580">Google Chrome ಅನ್ನು ಅಪ್ ಟು ಡೇಟ್ ಆಗಿದೆ</translation> <translation id="7897703007638178753">Chrome ಇತ್ತೀಚಿನ ಟ್ಯಾಬ್ಗಳನ್ನು ನೋಡಿ</translation> <translation id="7925119591961387184">"Chrome" ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb index 38f83fe..76a7ce4d 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome에서 카메라에 액세스하려고 함</translation> <translation id="7754633291442704733"><ph name="DOMAIN" /> 조직에서 이 계정에 저장하는 Chrome 데이터, 북마크, 방문 기록, 비밀번호, 기타 설정에 액세스할 수 있습니다. 로그아웃하면 데이터가 기기에서 삭제됩니다. 하지만 데이터는 관리 Google 계정에 계속 저장되어 조직에서 사용할 수 있습니다. 조직에서 관련 계정에 적용되는 사용자 정책을 설정하여 Chrome의 동작을 변경할 수도 있습니다.</translation> <translation id="7780154209050837198">Chrome을 최대한 활용하려면 Google 계정으로 Chrome에 로그인하세요</translation> +<translation id="7792140019572081272">Chrome은 Face ID를 통해 사용자의 민감한 정보를 안전하게 보호합니다.</translation> <translation id="7855730255114109580">Chrome이 최신 버전입니다.</translation> <translation id="7897703007638178753">Chrome 최근 탭 보기</translation> <translation id="7925119591961387184">'Chrome'을 선택합니다.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb index 1b29cfb..d5a2fc3 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">„Chrome“ nori pasiekti fotoaparatą</translation> <translation id="7754633291442704733">Organizacija „<ph name="DOMAIN" />“ galės pasiekti „Chrome“ duomenis, žymes, istoriją, slaptažodžius ir kitus nustatymus, kuriuos saugote šioje paskyroje. Kai atsijungsite, šio įrenginio duomenys bus išvalyti. Tačiau duomenys bus toliau saugomi jūsų valdomoje „Google“ paskyroje ir bus pasiekiami jūsų organizacijai. Jūsų organizacija taip pat gali nustatyti tos paskyros naudotojo politiką, pagal kurią galima keisti „Chrome“ veikimą.</translation> <translation id="7780154209050837198">Jei norite išnaudoti visas „Chrome“ galimybes, prisijunkite prie „Chrome“ naudodami „Google“ paskyrą.</translation> +<translation id="7792140019572081272">„Chrome“ apsaugo neskelbtinus duomenis, kai naudodamas „Face ID“.</translation> <translation id="7855730255114109580">„Google Chrome“ yra naujausios versijos</translation> <translation id="7897703007638178753">Žr. „Chrome“ naujausius skirtukus</translation> <translation id="7925119591961387184">Pasirinkite „Chrome“.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb index 9326f04..3e508d0 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome pieprasa piekļuvi kamerai</translation> <translation id="7754633291442704733">Jūsu organizācija (<ph name="DOMAIN" />) varēs piekļūt jūsu Chrome datiem, grāmatzīmēm, vēsturei, parolēm un citiem iestatījumiem, ko glabājat šajā kontā. Izrakstoties jūsu dati tiks dzēsti no šīs ierīces. Tomēr jūsu dati joprojām tiks glabāti jūsu pārvaldītajā Google kontā un būs pieejami jūsu organizācijai. Jūsu organizācija var kontā iestatīt lietotāju politikas, kas var mainīt Chrome darbību.</translation> <translation id="7780154209050837198">Lai pilnvērtīgi izmantotu pārlūku Chrome, pierakstieties tajā, izmantojot savu Google kontu.</translation> +<translation id="7792140019572081272">Pārlūkā Chrome jūsu sensitīvie dati tiek aizsargāti, izmantojot sejas ID.</translation> <translation id="7855730255114109580">Pārlūks Google Chrome ir atjaunināts.</translation> <translation id="7897703007638178753">Skatīt pārlūkā Chrome nesen atvērtās cilnes</translation> <translation id="7925119591961387184">Atlasiet vienumu Chrome.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb index 844cfdc..9c141a5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome vrea să acceseze camera foto</translation> <translation id="7754633291442704733">Organizația ta <ph name="DOMAIN" /> va avea acces la datele Chrome, marcajele, istoricul, parolele și alte setări pe care le stochezi în acest cont. Când te deconectezi, datele vor fi șterse de pe acest dispozitiv. Însă vor rămâne stocate în Contul Google administrat și vor fi disponibile pentru organizația ta. În plus, organizația ta poate să seteze politici privind utilizatorii specifice contului, care pot să modifice comportamentul browserului Chrome.</translation> <translation id="7780154209050837198">Pentru a profita din plin de Chrome, conectează-te la Chrome folosind Contul Google.</translation> +<translation id="7792140019572081272">Chrome îți păstrează în siguranță datele sensibile cu Face ID.</translation> <translation id="7855730255114109580">Google Chrome este actualizat</translation> <translation id="7897703007638178753">Vezi filele recente din Chrome</translation> <translation id="7925119591961387184">Selectează Chrome.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb index eae69a4..10942a0 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Приложению Chrome нужен доступ к камере</translation> <translation id="7754633291442704733">Ваша организация <ph name="DOMAIN" /> получит доступ к данным, закладкам, истории и паролям Chrome, а также другим параметрам этого аккаунта. После выхода из аккаунта с этого устройства будут удалены все данные. При этом они сохранятся в вашем управляемом аккаунте Google и будут доступны вашей организации. Она также может устанавливать правила для пользователей, применимые к указанному аккаунту и способные изменять работу Chrome.</translation> <translation id="7780154209050837198">Чтобы пользоваться всеми возможностями браузера Chrome, войдите в аккаунт Google.</translation> +<translation id="7792140019572081272">Chrome защищает ваши конфиденциальные данные с помощью Face ID.</translation> <translation id="7855730255114109580">Последняя версия Google Chrome уже установлена</translation> <translation id="7897703007638178753">Недавние вкладки в Chrome</translation> <translation id="7925119591961387184">Выберите Chrome.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb index 9b42bd81..19ac427 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome потрібен доступ до камери</translation> <translation id="7754633291442704733">Ваша організація <ph name="DOMAIN" /> матиме доступ до даних Chrome, закладок, історії, паролів та інших налаштувань, які ви зберігаєте в цьому обліковому записі. Коли ви вийдете, ваші дані буде видалено з цього пристрою. Однак вони залишаться в керованому обліковому записі Google і будуть доступними для вашої організації. Крім того, ваша організація може визначити правила для користувачів цього облікового запису, які можуть впливати на роботу Chrome.</translation> <translation id="7780154209050837198">Щоб користуватись усіма можливостями Chrome, увійдіть в обліковий запис Google у цьому веб-переглядачі.</translation> +<translation id="7792140019572081272">Chrome захищає ваші конфіденційні дані за допомогою функції Face ID.</translation> <translation id="7855730255114109580">У вас остання версія Google Chrome</translation> <translation id="7897703007638178753">Переглянути останні вкладки в Chrome</translation> <translation id="7925119591961387184">Виберіть Chrome.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb index 4251c8b0..f5517d7 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">Chrome muốn truy cập vào máy ảnh</translation> <translation id="7754633291442704733">Tổ chức của bạn (<ph name="DOMAIN" />) sẽ có quyền truy cập vào dữ liệu của bạn trên Chrome, dấu trang, nhật ký, mật khẩu và các chế độ cài đặt khác mà bạn lưu trữ trong tài khoản này. Khi bạn đăng xuất, dữ liệu của bạn sẽ bị xoá khỏi thiết bị này. Tuy nhiên, dữ liệu vẫn được lưu trữ trong Tài khoản Google được quản lý của bạn và tổ chức có thể sử dụng dữ liệu này. Tổ chức của bạn cũng có thể thiết lập chính sách người dùng dành riêng cho tài khoản đó và việc này có thể làm thay đổi hành vi của Chrome.</translation> <translation id="7780154209050837198">Để khai thác tối đa Chrome, hãy đăng nhập vào Chrome bằng Tài khoản Google của bạn.</translation> +<translation id="7792140019572081272">Chrome bảo vệ dữ liệu nhạy cảm của bạn bằng Face ID.</translation> <translation id="7855730255114109580">Google Chrome đã được cập nhật</translation> <translation id="7897703007638178753">Xem các thẻ gần đây trong Chrome</translation> <translation id="7925119591961387184">Chọn "Chrome".</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb index 6668aae..702ff42f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb
@@ -188,6 +188,7 @@ <translation id="7698568245838009292">I-Chrome ingathanda ukufinyelela ikhamera</translation> <translation id="7754633291442704733">I-<ph name="DOMAIN" /> yenhlangano yakho izoba nokufinyelela kudatha yakho ye-Chrome, amabhukhimakhi, umlando, amaphasiwedi namanye amasethingi owagcina kule akhawunti. Uma uphuma ngemvume, idatha yakho izosulwa kule divayisi. Nokho, idatha yakho izohlala igcinwe ku-Google Account yakho ephethwe futhi itholakale enhlanganweni yakho. Inhlangano yakho ingasetha izinqubomgomo zomsebenzisi eziqondile kuleyo akhawunti ezingashintsha ukuziphatha kwe-Chrome.</translation> <translation id="7780154209050837198">Ukuze uthole okuningi kwe-Chrome, ngena ngemvume ku-Chrome nge-Google Account yakho.</translation> +<translation id="7792140019572081272">I-Chrome igcina idatha yakho enozwelo ivikelekile nge-Face ID.</translation> <translation id="7855730255114109580">I-Google Chrome isesikhathini samanje</translation> <translation id="7897703007638178753">Bheka Amathebhu Akamuva E-Chrome</translation> <translation id="7925119591961387184">Khetha okuthi "Chrome."</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index 75374d3..3e84ad3e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">በመለያ ውስጥ አስቀምጥ…</translation> <translation id="3551320343578183772">ትር ዝጋ</translation> <translation id="3565207542107370586">የአሰሳ ውሂብን አጽዳ…</translation> +<translation id="3570693105179140209">ለተጨማሪ የይለፍ ቃላት ሁለቴ መታ ያድርጉ።</translation> <translation id="3575234738189584619">በሌንስ ፈልግ</translation> <translation id="3581564640715911333">በሌሎች ቋንቋዎች ለመተርጎም ሐሳብ አቅርብ</translation> <translation id="3587885837929752825">ድርጅትዎ በGoogle መለያዎ ውስጥ ማስቀመጥ የሚችሉትን ነገር ይገድባል።</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">የሰመረ ውሂብዎን ይገምግሙ</translation> <translation id="4527660062930312477">የእርስዎ መለያ ተስዳድሯል</translation> <translation id="4536418791685807335">እንደገና ወደ መለያ ለመግባት ይሞክሩ።</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} የተቀመጠ ራስሰር አጠናቅ ጥቆማ ከቁልፍ ሰሌዳዎ በላይ ይገኛል።}one{{count} የተቀመጡ ራስሰር አጠናቅ ጥቆማዎች ከቁልፍ ሰሌዳዎ በላይ ይገኛሉ።}other{{count} የተቀመጡ ራስሰር አጠናቅ ጥቆማዎች ከቁልፍ ሰሌዳዎ በላይ ይገኛሉ።}}</translation> <translation id="4540780316273593836">የሆነ ችግር ተፈጥሯል</translation> <translation id="4550040941166547650">በዚህ መሣሪያ ላይ ብቻ</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} ገቢር ያልሆነ ትር ይዘጋ?}one{{COUNT} ገቢር ያልሆነ ትር ይዘጋ?}other{{COUNT} ገቢር ያልሆኑ ትሮች ይዘጉ?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index e5d4a0fb..fb1e4339 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Захаваць ва ўліковым запісе…</translation> <translation id="3551320343578183772">Закрыць укладку</translation> <translation id="3565207542107370586">Выдаліць даныя пра работу ў браўзеры…</translation> +<translation id="3570693105179140209">Двойчы націсніце, каб праглядзець іншыя паролі.</translation> <translation id="3575234738189584619">Пошук з дапамогай Аб'ектыва</translation> <translation id="3581564640715911333">Прапаноўваць перакладаць старонкі на іншых мовах</translation> <translation id="3587885837929752825">Што іменна вы можаце захоўваць ва Уліковы запіс Google, вызначае ваша арганізацыя.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Праверыць сінхранізаваныя даныя</translation> <translation id="4527660062930312477">Ваш уліковы запіс знаходзіцца пад кіраваннем</translation> <translation id="4536418791685807335">Увайдзіце яшчэ раз.</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} захаваная прапанова аўтазапаўнення паказана над клавіятурай.}one{{count} захаваная прапанова аўтазапаўнення паказана над клавіятурай.}few{{count} захаваныя прапановы аўтазапаўнення паказаны над клавіятурай.}many{{count} захаваных прапаноў аўтазапаўнення паказаны над клавіятурай.}other{{count} захаванай прапановы аўтазапаўнення паказаны над клавіятурай.}}</translation> <translation id="4540780316273593836">Нешта пайшло не так</translation> <translation id="4550040941166547650">Толькі на гэтай прыладзе.</translation> <translation id="457292989631956153">{COUNT,plural, =1{Закрыць {COUNT} неактыўную ўкладку?}one{Закрыць {COUNT} неактыўную ўкладку?}few{Закрыць {COUNT} неактыўныя ўкладкі?}many{Закрыць {COUNT} неактыўных укладак?}other{Закрыць {COUNT} неактыўнай укладкі?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 64cb434e..cb4fc4c2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Mentés fiókba</translation> <translation id="3551320343578183772">Lap bezárása</translation> <translation id="3565207542107370586">Böngészési adatok törlése…</translation> +<translation id="3570693105179140209">Koppintson duplán további jelszavak megtekintéséhez.</translation> <translation id="3575234738189584619">Keresés a Lens segítségével</translation> <translation id="3581564640715911333">Más nyelvű oldalak fordításának felajánlása</translation> <translation id="3587885837929752825">Szervezete korlátozza, hogy Ön mit menthet Google-fiókjába.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">A szinkronizált adatok áttekintése</translation> <translation id="4527660062930312477">Fiókja felügyelet alatt áll</translation> <translation id="4536418791685807335">Próbáljon meg újra bejelentkezni.</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} mentett automatikus kiegészítési javaslat áll rendelkezésre a billentyűzet felett.}other{{count} mentett automatikus kiegészítési javaslat áll rendelkezésre a billentyűzet felett.}}</translation> <translation id="4540780316273593836">Hiba történt</translation> <translation id="4550040941166547650">Csak erre az eszközre</translation> <translation id="457292989631956153">{COUNT,plural, =1{Bezár {COUNT} inaktív lapot?}other{Bezár {COUNT} inaktív lapot?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index eca3cfc..1f3b746d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Vista á reikningi…</translation> <translation id="3551320343578183772">Loka flipa</translation> <translation id="3565207542107370586">Hreinsa vefskoðunargögn…</translation> +<translation id="3570693105179140209">Ýttu tvisvar til að fá fleiri aðgangsorð.</translation> <translation id="3575234738189584619">Leita með Linsu</translation> <translation id="3581564640715911333">Bjóðast til að þýða síður á önnur tungumál</translation> <translation id="3587885837929752825">Fyrirtækið þitt takmarkar hvað þú getur vistað á Google-reikningnum þínum.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Fara yfir samstillt gögn</translation> <translation id="4527660062930312477">Reikningnum þínum er stjórnað</translation> <translation id="4536418791685807335">Reyndu að skrá þig inn aftur.</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} vistuð tillaga að sjálfvirkri útfyllingu í boði ofan við lyklaborðið.}one{{count} vistuð tillaga að sjálfvirkri útfyllingu í boði ofan við lyklaborðið.}other{{count} vistaðar tillögur að sjálfvirkri útfyllingu í boði ofan við lyklaborðið.}}</translation> <translation id="4540780316273593836">Eitthvað fór úrskeiðis</translation> <translation id="4550040941166547650">Aðeins í þessu tæki</translation> <translation id="457292989631956153">{COUNT,plural, =1{Loka {COUNT} óvirkum flipa?}one{Loka {COUNT} óvirkum flipa?}other{Loka {COUNT} óvirkum flipum?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index 646b396..77a0eea 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">រក្សាទុកនៅក្នុងគណនី…</translation> <translation id="3551320343578183772">បិទផ្ទាំង</translation> <translation id="3565207542107370586">សម្អាតទិន្នន័យរុករក…</translation> +<translation id="3570693105179140209">ចុចពីរដងសម្រាប់ពាក្យសម្ងាត់ច្រើនទៀត។</translation> <translation id="3575234738189584619">ស្វែងរកដោយប្រើ Lens</translation> <translation id="3581564640715911333">ផ្តល់ជូនការបកប្រែទំព័រជាភាសាផ្សេងទៀត</translation> <translation id="3587885837929752825">ស្ថាប័នរបស់អ្នកដាក់កំហិតលើអ្វីដែលអ្នកអាចរក្សាទុកនៅក្នុងគណនី Google របស់អ្នក។</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">ពិនិត្យមើលទិន្នន័យដែលបានធ្វើសមកាលកម្មរបស់អ្នក</translation> <translation id="4527660062930312477">គណនីរបស់អ្នកស្ថិតក្រោមការគ្រប់គ្រង</translation> <translation id="4536418791685807335">សាកល្បងព្យាយាមចូលម្តងទៀត</translation> +<translation id="4539187448429948815">{count,plural, =1{មានការណែនាំឱ្យបំពេញស្វ័យប្រវត្តិដែលបានរក្សាទុក {count} នៅលើក្ដារចុចរបស់អ្នក។}other{មានការណែនាំឱ្យបំពេញស្វ័យប្រវត្តិដែលបានរក្សាទុក {count} នៅលើក្ដារចុចរបស់អ្នក។}}</translation> <translation id="4540780316273593836">មានអ្វីមួយខុសប្រក្រតី</translation> <translation id="4550040941166547650">តែនៅលើឧបករណ៍នេះប៉ុណ្ណោះ</translation> <translation id="457292989631956153">{COUNT,plural, =1{បិទផ្ទាំងអសកម្ម {COUNT} ឬ?}other{បិទផ្ទាំងអសកម្ម {COUNT} ឬ?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 70271d0c..4c5f617 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Simpan dalam Akaun…</translation> <translation id="3551320343578183772">Tutup Tab</translation> <translation id="3565207542107370586">Kosongkan Data Semakan Imbas…</translation> +<translation id="3570693105179140209">Dwiketik untuk mendapatkan lebih banyak kata laluan.</translation> <translation id="3575234738189584619">Cari dengan Lens</translation> <translation id="3581564640715911333">Tawaran untuk menterjemah halaman dalam bahasa lain</translation> <translation id="3587885837929752825">Organisasi anda mengehadkan perkara yang boleh anda simpan dalam Google Account anda.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Semak data anda yang disegerak</translation> <translation id="4527660062930312477">Akaun Anda Terurus</translation> <translation id="4536418791685807335">Cuba log masuk semula.</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} cadangan autolengkap yang disimpan tersedia pada sebelah atas papan kekunci anda.}other{{count} cadangan autolengkap yang disimpan tersedia pada sebelah atas papan kekunci anda.}}</translation> <translation id="4540780316273593836">Kesilapan Telah Berlaku</translation> <translation id="4550040941166547650">Hanya pada Peranti Ini</translation> <translation id="457292989631956153">{COUNT,plural, =1{Tutup {COUNT} Tab Tidak Aktif?}other{Tutup {COUNT} Tab Tidak Aktif?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index f380277..098078bc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Account တွင် သိမ်းနေသည်…</translation> <translation id="3551320343578183772">တဘ် ပိတ်ရန်</translation> <translation id="3565207542107370586">ဘရောက်စ်ဒေတာ ရှင်းထုတ်ရန်…</translation> +<translation id="3570693105179140209">နောက်ထပ်စကားဝှက်များအတွက် နှစ်ချက်တို့ပါ။</translation> <translation id="3575234738189584619">Lens ဖြင့် ရှာဖွေရန်</translation> <translation id="3581564640715911333">စာမျက်နှာများကို အခြားဘာသာစကားများဖြင့် ပြန်ဆိုရန် ကမ်းလှမ်းသည်</translation> <translation id="3587885837929752825">သင့် Google Account တွင် သိမ်းနိုင်သည်များကို အဖွဲ့အစည်းက ကန့်သတ်ပါသည်။</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">သင်စင့်ခ်လုပ်ထားသည့် ဒေတာများကို ပြန်စစ်ခြင်း</translation> <translation id="4527660062930312477">သင့်အကောင့်ကို စီမံခန့်ခွဲထားသည်</translation> <translation id="4536418791685807335">ထပ်မံ၍ လက်မှတ်ထိုးဝင်ကြည့်ပါ။</translation> +<translation id="4539187448429948815">{count,plural, =1{သိမ်းထားသော အလိုအလျောက်ဖြည့်ခြင်း အကြံပြုချက် {count} ခု သင့်ကီးဘုတ်ပေါ်တွင် ရနိုင်သည်။}other{သိမ်းထားသော အလိုအလျောက်ဖြည့်ခြင်း အကြံပြုချက် {count} ခု သင့်ကီးဘုတ်ပေါ်တွင် ရနိုင်သည်။}}</translation> <translation id="4540780316273593836">တစ်ခုခု မှားသွားပါသည်</translation> <translation id="4550040941166547650">ဤစက်တွင်သာ</translation> <translation id="457292989631956153">{COUNT,plural, =1{မသုံးသောတဘ် {COUNT} ခု ပိတ်မလား။}other{မသုံးသောတဘ် {COUNT} ခု ပိတ်မလား။}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index 7b2b30aa..1bbb996 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Salvar na conta…</translation> <translation id="3551320343578183772">Fechar guia</translation> <translation id="3565207542107370586">Limpar dados de navegação…</translation> +<translation id="3570693105179140209">Toque duas vezes para conferir mais senhas.</translation> <translation id="3575234738189584619">Pesquisar com o Lens</translation> <translation id="3581564640715911333">Oferecer para traduzir páginas em outros idiomas</translation> <translation id="3587885837929752825">Sua organização limita o que você pode salvar na sua Conta do Google.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Revisar dados sincronizados</translation> <translation id="4527660062930312477">Sua conta é gerenciada</translation> <translation id="4536418791685807335">Tente fazer login novamente.</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} sugestão de preenchimento automático salva disponível acima do teclado.}one{{count} sugestão de preenchimento automático salva disponível acima do teclado.}other{{count} sugestões de preenchimento automático salvas disponíveis acima do teclado.}}</translation> <translation id="4540780316273593836">Ocorreu um erro</translation> <translation id="4550040941166547650">Somente neste dispositivo</translation> <translation id="457292989631956153">{COUNT,plural, =1{Fechar {COUNT} guia inativa?}one{Fechar {COUNT} guia inativa?}other{Fechar {COUNT} guias inativas?}}</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 f803abbd..73962df 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Guardar na conta…</translation> <translation id="3551320343578183772">Fechar Separador</translation> <translation id="3565207542107370586">Limpar dados de navegação…</translation> +<translation id="3570693105179140209">Toque duas vezes para ver mais palavras-passe.</translation> <translation id="3575234738189584619">Pesquisar com o Lens</translation> <translation id="3581564640715911333">Proponha a tradução de páginas noutros idiomas</translation> <translation id="3587885837929752825">A sua organização limita o que pode guardar na sua Conta Google.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Rever os dados sincronizados</translation> <translation id="4527660062930312477">A sua conta é gerida</translation> <translation id="4536418791685807335">Experimente iniciar sessão novamente.</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} sugestão de preenchimento automático guardada disponível acima do teclado.}other{{count} sugestões de preenchimento automático guardadas disponíveis acima do teclado.}}</translation> <translation id="4540780316273593836">Algo correu mal</translation> <translation id="4550040941166547650">Só neste dispositivo</translation> <translation id="457292989631956153">{COUNT,plural, =1{Fechar {COUNT} separador inativo?}other{Fechar {COUNT} separadores inativos?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 3f6fdd60..46e055c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Uložiť do účtu…</translation> <translation id="3551320343578183772">Zatvoriť kartu</translation> <translation id="3565207542107370586">Vymazať dáta prehliadania…</translation> +<translation id="3570693105179140209">Ďalšie heslá zobrazíte dvojitým klepnutím.</translation> <translation id="3575234738189584619">Vyhľadávať pomocou funkcie Lens</translation> <translation id="3581564640715911333">Ponúkať preklad stránok v ďalších jazykoch</translation> <translation id="3587885837929752825">Vaša organizácia obmedzuje, čo môžete uložiť vo svojom účte Google.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Skontrolovať synchronizované údaje</translation> <translation id="4527660062930312477">Váš účet je spravovaný</translation> <translation id="4536418791685807335">Skúste sa znova prihlásiť.</translation> +<translation id="4539187448429948815">{count,plural, =1{Nad klávesnicou je k dispozícii {count} uložený návrh automatického dopĺňania.}few{Nad klávesnicou sú k dispozícii {count} uložené návrhy automatického dopĺňania.}many{{count} saved autocomplete suggestions available above your keyboard.}other{Nad klávesnicou je k dispozícii {count} uložených návrhov automatického dopĺňania.}}</translation> <translation id="4540780316273593836">Vyskytol sa problém</translation> <translation id="4550040941166547650">Iba v tomto zariadení</translation> <translation id="457292989631956153">{COUNT,plural, =1{Chcete zavrieť {COUNT} neaktívnu kartu?}few{Chcete zavrieť {COUNT} neaktívne karty?}many{Close {COUNT} Inactive Tabs?}other{Chcete zavrieť {COUNT} neaktívnych kariet?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 5fab8fa..5bfe7e5c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -201,7 +201,7 @@ <translation id="199425419756152024">Angalia Nenosiri</translation> <translation id="2008357574463816229">Ukisahau kauli yako ya siri au ukitaka kubadilisha mpangilio huu, <ph name="BEGIN_LINK" />futa data ya Chrome kwenye akaunti yako<ph name="END_LINK" />.</translation> <translation id="2010008505735295285">Pakia upya</translation> -<translation id="2015722694326466240">Ili uone manenosiri, ni lazima kwanza uweke nambari ya siri kwenye kifaa chako.</translation> +<translation id="2015722694326466240">Ili uone manenosiri, ni lazima kwanza uweke namba ya siri kwenye kifaa chako.</translation> <translation id="2021670401941426298">Angalia maagizo ya mtambo wako wa kutafuta, ikiwa yapo, kuhusu jinsi ya kufuta historia ya mambo uliyotafuta.</translation> <translation id="202292859882676807">Ufikiaji wa Maikrofoni Umeruhusiwa</translation> <translation id="20485545164632846">kipengee kipya</translation> @@ -432,7 +432,7 @@ <translation id="3190736958609431397">Tendua ufuatiliaji</translation> <translation id="3208260410153224535">Shirika lako limezima kipengele cha uingiaji katika akaunti. Alamisho, manenosiri mapya na zaidi yatahifadhiwa tu katika kifaa hiki.</translation> <translation id="3214379938835224220">Uliondolewa kwenye akaunti ikiwa sehemu ya kuweka upya mipangilio ya iPad yako. Gusa "endelea" hapo chini ili uingie katika akaunti.</translation> -<translation id="3224641773458703735">Ili utume manenosiri, ni lazima kwanza uweke nambari ya siri kwenye kifaa chako.</translation> +<translation id="3224641773458703735">Ili utume manenosiri, ni lazima kwanza uweke namba ya siri kwenye kifaa chako.</translation> <translation id="3227137524299004712">Maikrofoni</translation> <translation id="3235063766008841141">Liliwekwa kwenye tovuti inayopotosha na kupatikana kwenye tukio la ufichuzi haramu wa data</translation> <translation id="3235242129752692527">Badilisha maelezo ya tukio kisha uguse “Hifadhi.“</translation> @@ -703,7 +703,7 @@ <translation id="4751162929052964260"><ph name="TITLE" />, <ph name="STATE" />, Kwenye kifaa hiki pekee, <ph name="URL" /></translation> <translation id="4751645464639803239">Kichupo Fiche Kipya</translation> <translation id="4766112107778026136">Gundua na Unazofuatilia</translation> -<translation id="47677902929517676">Ili uhifadhi manenosiri katika akaunti yako, ni lazima uweke kwanza nambari ya siri kwenye kifaa chako.</translation> +<translation id="47677902929517676">Ili uhifadhi manenosiri katika akaunti yako, ni lazima uweke kwanza namba ya siri kwenye kifaa chako.</translation> <translation id="4775879719735953715">Kivinjari Chaguomsingi</translation> <translation id="4779732376610430319">Nenda Kwenye Mipangilio...</translation> <translation id="478808905805139173">Ungependa kufungua katika hali fiche?</translation> @@ -807,7 +807,7 @@ <translation id="5245322853195994030">Ungependa kughairi usawazishaji</translation> <translation id="5248640482715684545">Tovuti hii inajaribu kufungua programu nyingine.</translation> <translation id="5256661381001734217">Tovuti hii inajaribu kufungua programu. Hatua hii itakuondoa kwenye hali fiche.</translation> -<translation id="5256908199795498284">Chrome itagundua nambari za ufuatiliaji wa kifurushi kwenye tovuti unazotembelea na kukuonyesha taarifa za kifurushi kwenye ukurasa wa Kichupo Kipya. Data yako itashirikiwa na Google ili kutoa kipengele hiki na kuboresha Ununuzi kwa kila mtu.</translation> +<translation id="5256908199795498284">Chrome itagundua namba za ufuatiliaji wa kifurushi kwenye tovuti unazotembelea na kukuonyesha taarifa za kifurushi kwenye ukurasa wa Kichupo Kipya. Data yako itashirikiwa na Google ili kutoa kipengele hiki na kuboresha Ununuzi kwa kila mtu.</translation> <translation id="5271265092610673171">{count,plural, =1{Sehemu ambayo sharti ijazwe iko tupu. Ijaze kabla ya kuhifadhi.}other{Baadhi ya sehemu ambazo sharti zijazwe ziko tupu. Zijaze kabla ya kuhifadhi.}}</translation> <translation id="5271549068863921519">Hifadhi nenosiri</translation> <translation id="5283494734135414249">Gusa njia ya mkato ambayo inaonekana katika sehemu ya anwani.</translation> @@ -1025,7 +1025,7 @@ <translation id="6387994324662817823">Manenosiri huhifadhiwa kwenye Kidhibiti cha Manenosiri cha Google kwenye kifaa hiki tu.</translation> <translation id="6389470377220713856">Jina lilio kwenye Kadi</translation> <translation id="6406506848690869874">Sawazisha</translation> -<translation id="6410390304316730527">Kipengele cha Kuvinjari Salama hukulinda dhidi ya washambulizi ambao wanaweza kukulaghai ufanye kitu hatari kama vile kusakinisha programu hasidi au kufichua taarifa binafsi kama vile manenosiri, nambari za simu au kadi za mikopo. Ukikizima, kuwa makini unapovinjari tovuti zisizo za kawaida au zisizo na sifa nzuri.</translation> +<translation id="6410390304316730527">Kipengele cha Kuvinjari Salama hukulinda dhidi ya washambulizi ambao wanaweza kukulaghai ufanye kitu hatari kama vile kusakinisha programu hasidi au kufichua taarifa binafsi kama vile manenosiri, namba za simu au kadi za mikopo. Ukikizima, kuwa makini unapovinjari tovuti zisizo za kawaida au zisizo na sifa nzuri.</translation> <translation id="6410883413783534063">Fungua vichupo ili utembelee kurasa mbalimbali kwa wakati mmoja</translation> <translation id="6418346271604475326">Inaandaa PDF</translation> <translation id="6429213933892582367">Fungua Chaguo za Nenosiri</translation> @@ -1131,7 +1131,7 @@ <translation id="6869389390665537774">Unaweza kuona kurasa ambazo umetembelea au uzifute kwenye historia yako</translation> <translation id="687135068089457384">Onyesha Mipangilio</translation> <translation id="6873263987691478642">Mwonekano wa Madirisha Mawili</translation> -<translation id="687586529977635009">Chrome itagundua nambari za ufuatiliaji kwenye tovuti unazotembelea na kukuonyesha taarifa za kifurushi kwenye ukurasa wa Kichupo Kipya. Data yako itashirikiwa na Google ili kutoa kipengele hiki na kuboresha Ununuzi kwa kila mtu. Unaweza kubadilisha hali hii kwenye <ph name="BEGIN_LINK" />Mipangilio ya Ufuatiliaji wa Kifurushi<ph name="END_LINK" />.</translation> +<translation id="687586529977635009">Chrome itagundua namba za ufuatiliaji kwenye tovuti unazotembelea na kukuonyesha taarifa za kifurushi kwenye ukurasa wa Kichupo Kipya. Data yako itashirikiwa na Google ili kutoa kipengele hiki na kuboresha Ununuzi kwa kila mtu. Unaweza kubadilisha hali hii kwenye <ph name="BEGIN_LINK" />Mipangilio ya Ufuatiliaji wa Kifurushi<ph name="END_LINK" />.</translation> <translation id="6882836635272038266">Ulinzi wa kawaida dhidi ya tovuti, vipakuliwa na viendelezi vinavyojulikana kuwa hatari.</translation> <translation id="6888009575607455378">Je, una uhakika unataka kufuta mabadiliko uliyofanya?</translation> <translation id="6896758677409633944">Nakili</translation> @@ -1387,7 +1387,7 @@ <translation id="8281886186245836920">Ruka</translation> <translation id="8283172974887967105">Weka…</translation> <translation id="8286036467436129157">Ingia</translation> -<translation id="8299417921174340354">Ili utumie manenosiri, ni lazima kwanza uweke nambari ya siri kwenye kifaa chako.</translation> +<translation id="8299417921174340354">Ili utumie manenosiri, ni lazima kwanza uweke namba ya siri kwenye kifaa chako.</translation> <translation id="8299613349954694191">Fungua kichupo fiche ili uvinjari wavuti kwa njia ya faragha.</translation> <translation id="8311853334103696030">Kuficha Kipengele cha Kufuatilia Bei</translation> <translation id="8319076807703933069">Utafutaji Mpya</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 7f23dd9e..1805e40 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">ఖాతాలో సేవ్ చేయండి…</translation> <translation id="3551320343578183772">ట్యాబ్ను మూసివేయి</translation> <translation id="3565207542107370586">బ్రౌజింగ్ డేటాను క్లియర్ చేయండి…</translation> +<translation id="3570693105179140209">మరిన్ని పాస్వర్డ్ల కోసం డబుల్ ట్యాప్ చేయండి.</translation> <translation id="3575234738189584619">Lens ద్వారా సెర్చ్ చేయండి</translation> <translation id="3581564640715911333">ఇతర భాషలలో ఉన్న పేజీలను అనువదించడాన్ని ఆఫర్ చేస్తుంది</translation> <translation id="3587885837929752825">మీ Google ఖాతాలో మీరు సేవ్ చేయగల వాటిని మీ సంస్థ పరిమితం చేస్తుంది.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">సింక్ చేసిన మీ డేటాను రివ్యూ చేయండి</translation> <translation id="4527660062930312477">మీ ఖాతా మేనేజ్ చేయబడుతోంది</translation> <translation id="4536418791685807335">మళ్లీ సైన్ ఇన్ చేయడానికి ప్రయత్నించండి.</translation> +<translation id="4539187448429948815">{count,plural, =1{సేవ్ చేసిన {count} ఆటో-కంప్లీట్ సూచన మీ కీబోర్డ్ పైన అందుబాటులో ఉంది.}other{సేవ్ చేసిన {count} ఆటో-కంప్లీట్ సూచనలు మీ కీబోర్డ్ పైన అందుబాటులో ఉన్నాయి.}}</translation> <translation id="4540780316273593836">ఏదో తప్పు జరిగింది</translation> <translation id="4550040941166547650">ఈ పరికరంలో మాత్రమే</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} ఇన్యాక్టివ్ ట్యాబ్ను మూసివేయాలా?}other{{COUNT} ఇన్యాక్టివ్ ట్యాబ్లను మూసివేయాలా?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 817c0c93..8fdf13c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Зберегти в обліковому записі…</translation> <translation id="3551320343578183772">Закрити вкладку</translation> <translation id="3565207542107370586">Очистити дані веб-перегляду</translation> +<translation id="3570693105179140209">Двічі торкніться, щоб переглянути інші паролі.</translation> <translation id="3575234738189584619">Шукати через Об’єктив</translation> <translation id="3581564640715911333">Пропозиція перекладати сторінки іншими мовами</translation> <translation id="3587885837929752825">Ваша організація обмежила дані, які можна зберігати в обліковому записі Google.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Переглянути синхронізовані дані</translation> <translation id="4527660062930312477">Ваш обліковий запис керується</translation> <translation id="4536418791685807335">Спробуйте ввійти ще раз.</translation> +<translation id="4539187448429948815">{count,plural, =1{Над клавіатурою показується {count} збережена підказка автозавершення.}one{Над клавіатурою показується {count} збережена підказка автозавершення.}few{Над клавіатурою показуються {count} збережені підказки автозавершення.}many{Над клавіатурою показуються {count} збережених підказок автозавершення.}other{Над клавіатурою показуються {count} збереженої підказки автозавершення.}}</translation> <translation id="4540780316273593836">Сталася помилка</translation> <translation id="4550040941166547650">Лише на цьому пристрої</translation> <translation id="457292989631956153">{COUNT,plural, =1{Закрити {COUNT} неактивну вкладку?}one{Закрити {COUNT} неактивну вкладку?}few{Закрити {COUNT} неактивні вкладки?}many{Закрити {COUNT} неактивних вкладок?}other{Закрити {COUNT} неактивної вкладки?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index 0bdb4fce..3911035 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Hisobda saqlash…</translation> <translation id="3551320343578183772">Ichki oynani yopish</translation> <translation id="3565207542107370586">Brauzer tarixini tozalash…</translation> +<translation id="3570693105179140209">Boshqa parollarni ochish uchun ikki marta bosing.</translation> <translation id="3575234738189584619">Lens orqali qidirish</translation> <translation id="3581564640715911333">Boshqa tildagi sahifalarni tarjima qilish taklif qilinsin</translation> <translation id="3587885837929752825">Tashkilot Google hisobida nimalar saqlanishi mumkinligini cheklagan.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Sinxronlangan maʼlumotlaringizni tekshiring</translation> <translation id="4527660062930312477">Hisobingiz nazorat ostida</translation> <translation id="4536418791685807335">Qaytadan kirib ko‘ring.</translation> +<translation id="4539187448429948815">{count,plural, =1{{count} ta saqlangan avtomatik kiritish taklifi klavuatura ustida chiqadi.}other{{count} ta saqlangan avtomatik kiritish taklifi klavuatura ustida chiqadi.}}</translation> <translation id="4540780316273593836">Nimadir xato ketdi</translation> <translation id="4550040941166547650">Faqat shu qurilmada</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} ta nofaol varaq yopilsinmi?}other{{COUNT} ta nofaol varaq yopilsinmi?}}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index fda0ec8..9c5054a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -496,6 +496,7 @@ <translation id="355101282835380364">Lưu trong tài khoản…</translation> <translation id="3551320343578183772">Đóng Thẻ</translation> <translation id="3565207542107370586">Xoá dữ liệu duyệt web…</translation> +<translation id="3570693105179140209">Nhấn đúp để xem các mật khẩu khác.</translation> <translation id="3575234738189584619">Tìm kiếm bằng Ống kính</translation> <translation id="3581564640715911333">Đề xuất dịch trang bằng các ngôn ngữ khác</translation> <translation id="3587885837929752825">Tổ chức của bạn giới hạn những nội dung bạn có thể lưu trong Tài khoản Google.</translation> @@ -661,6 +662,7 @@ <translation id="452750746583162491">Xem lại các dữ liệu đã đồng bộ hóa của bạn</translation> <translation id="4527660062930312477">Tài khoản của bạn được quản lý</translation> <translation id="4536418791685807335">Thử đăng nhập lại.</translation> +<translation id="4539187448429948815">{count,plural, =1{Có {count} đề xuất tự động hoàn thành đã lưu phía trên bàn phím.}other{Có {count} đề xuất tự động hoàn thành đã lưu phía trên bàn phím.}}</translation> <translation id="4540780316273593836">Đã xảy ra lỗi</translation> <translation id="4550040941166547650">Chỉ trên thiết bị này</translation> <translation id="457292989631956153">{COUNT,plural, =1{Đóng {COUNT} thẻ không hoạt động?}other{Đóng {COUNT} thẻ không hoạt động?}}</translation>
diff --git a/ios/chrome/app/variations_app_state_agent_unittest.mm b/ios/chrome/app/variations_app_state_agent_unittest.mm index 7059334..c3d18409 100644 --- a/ios/chrome/app/variations_app_state_agent_unittest.mm +++ b/ios/chrome/app/variations_app_state_agent_unittest.mm
@@ -17,7 +17,6 @@ #import "ios/chrome/app/application_delegate/app_state_observer.h" #import "ios/chrome/app/application_delegate/startup_information.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/shared/model/prefs/browser_prefs.h" #import "ios/chrome/browser/ui/first_run/first_run_constants.h"
diff --git a/ios/chrome/browser/autofill/model/autocomplete_history_manager_factory.mm b/ios/chrome/browser/autofill/model/autocomplete_history_manager_factory.mm index bb92564e..619bf73 100644 --- a/ios/chrome/browser/autofill/model/autocomplete_history_manager_factory.mm +++ b/ios/chrome/browser/autofill/model/autocomplete_history_manager_factory.mm
@@ -12,7 +12,6 @@ #import "components/keyed_service/core/service_access_type.h" #import "components/keyed_service/ios/browser_state_dependency_manager.h" #import "ios/chrome/browser/history/model/history_service_factory.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/browser_state_otr_helper.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h"
diff --git a/ios/chrome/browser/autofill/model/strike_database_factory.mm b/ios/chrome/browser/autofill/model/strike_database_factory.mm index 8cfd9ea..ef0dd97 100644 --- a/ios/chrome/browser/autofill/model/strike_database_factory.mm +++ b/ios/chrome/browser/autofill/model/strike_database_factory.mm
@@ -9,7 +9,6 @@ #import "base/no_destructor.h" #import "components/autofill/core/browser/strike_databases/strike_database.h" #import "components/keyed_service/ios/browser_state_dependency_manager.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" namespace autofill {
diff --git a/ios/chrome/browser/browser_state/model/chrome_browser_state_impl_io_data.mm b/ios/chrome/browser/browser_state/model/chrome_browser_state_impl_io_data.mm index 1d2f9b4..ead749b 100644 --- a/ios/chrome/browser/browser_state/model/chrome_browser_state_impl_io_data.mm +++ b/ios/chrome/browser/browser_state/model/chrome_browser_state_impl_io_data.mm
@@ -24,7 +24,6 @@ #import "ios/chrome/browser/net/http_server_properties_factory.h" #import "ios/chrome/browser/net/ios_chrome_network_delegate.h" #import "ios/chrome/browser/net/ios_chrome_url_request_context_getter.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/components/cookie_util/cookie_util.h"
diff --git a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm index 064fba1..6967640 100644 --- a/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm +++ b/ios/chrome/browser/commerce/model/push_notification/commerce_push_notification_client.mm
@@ -15,7 +15,6 @@ #import "ios/chrome/browser/bookmarks/model/local_or_syncable_bookmark_model_factory.h" #import "ios/chrome/browser/push_notification/model/push_notification_client_id.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.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_state/chrome_browser_state_manager.h"
diff --git a/ios/chrome/browser/drive/model/BUILD.gn b/ios/chrome/browser/drive/model/BUILD.gn index 17d96fe3..441232d 100644 --- a/ios/chrome/browser/drive/model/BUILD.gn +++ b/ios/chrome/browser/drive/model/BUILD.gn
@@ -14,3 +14,15 @@ "//ios/chrome/browser/shared/public/features", ] } + +source_set("drive_service") { + sources = [ + "drive_service.h", + "drive_service.mm", + "drive_service_configuration.h", + ] + deps = [ + "//components/keyed_service/core", + "//ios/chrome/browser/shared/model/browser_state", + ] +}
diff --git a/ios/chrome/browser/drive/model/drive_service.h b/ios/chrome/browser/drive/model/drive_service.h new file mode 100644 index 0000000..9b816bf --- /dev/null +++ b/ios/chrome/browser/drive/model/drive_service.h
@@ -0,0 +1,25 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_H_ +#define IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_H_ + +#import "components/keyed_service/core/keyed_service.h" + +namespace drive { + +// Service responsible for providing access to the Drive API. +class DriveService : public KeyedService { + public: + DriveService(); + ~DriveService() override; + + // Whether the service is supported. This value does not change during the + // execution of the application. + virtual bool IsSupported() const = 0; +}; + +} // namespace drive + +#endif // IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_H_
diff --git a/ios/chrome/browser/drive/model/drive_service.mm b/ios/chrome/browser/drive/model/drive_service.mm new file mode 100644 index 0000000..1b1879da --- /dev/null +++ b/ios/chrome/browser/drive/model/drive_service.mm
@@ -0,0 +1,13 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/drive/model/drive_service.h" + +namespace drive { + +DriveService::DriveService() = default; + +DriveService::~DriveService() = default; + +} // namespace drive
diff --git a/ios/chrome/browser/drive/model/drive_service_configuration.h b/ios/chrome/browser/drive/model/drive_service_configuration.h new file mode 100644 index 0000000..6f7cbc3a --- /dev/null +++ b/ios/chrome/browser/drive/model/drive_service_configuration.h
@@ -0,0 +1,15 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_CONFIGURATION_H_ +#define IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_CONFIGURATION_H_ + +namespace drive { + +// Configuration object used by the DriveService. +struct DriveServiceConfiguration {}; + +} // namespace drive + +#endif // IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_CONFIGURATION_H_
diff --git a/ios/chrome/browser/feature_engagement/model/BUILD.gn b/ios/chrome/browser/feature_engagement/model/BUILD.gn index 944be6bd..2214341 100644 --- a/ios/chrome/browser/feature_engagement/model/BUILD.gn +++ b/ios/chrome/browser/feature_engagement/model/BUILD.gn
@@ -21,7 +21,6 @@ "//ios/chrome/browser/promos_manager", "//ios/chrome/browser/promos_manager:event_exporter_factory", "//ios/chrome/browser/promos_manager:features", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/public/commands", "//ios/web/public",
diff --git a/ios/chrome/browser/feature_engagement/model/tracker_factory_util.mm b/ios/chrome/browser/feature_engagement/model/tracker_factory_util.mm index 454ac2c3..a39cc86 100644 --- a/ios/chrome/browser/feature_engagement/model/tracker_factory_util.mm +++ b/ios/chrome/browser/feature_engagement/model/tracker_factory_util.mm
@@ -12,7 +12,6 @@ #import "ios/chrome/browser/promos_manager/features.h" #import "ios/chrome/browser/promos_manager/promos_manager_event_exporter.h" #import "ios/chrome/browser/promos_manager/promos_manager_event_exporter_factory.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" namespace {
diff --git a/ios/chrome/browser/flags/BUILD.gn b/ios/chrome/browser/flags/BUILD.gn index 627111a4..3509eb5 100644 --- a/ios/chrome/browser/flags/BUILD.gn +++ b/ios/chrome/browser/flags/BUILD.gn
@@ -119,7 +119,6 @@ "//components/metrics", "//components/variations", "//ios/chrome/app:tests_hook", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/paths", "//ios/chrome/browser/ui/first_run:field_trial", "//ios/chrome/browser/ui/ntp:field_trial",
diff --git a/ios/chrome/browser/flags/ios_chrome_field_trials.mm b/ios/chrome/browser/flags/ios_chrome_field_trials.mm index d75bcd2..3f83074 100644 --- a/ios/chrome/browser/flags/ios_chrome_field_trials.mm +++ b/ios/chrome/browser/flags/ios_chrome_field_trials.mm
@@ -8,7 +8,6 @@ #import "base/path_service.h" #import "components/metrics/persistent_histograms.h" #import "ios/chrome/app/tests_hook.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/paths/paths.h" #import "ios/chrome/browser/variations/model/ios_chrome_variations_seed_store.h"
diff --git a/ios/chrome/browser/metrics/model/mobile_session_shutdown_metrics_provider.mm b/ios/chrome/browser/metrics/model/mobile_session_shutdown_metrics_provider.mm index ae5d3885..cba2111 100644 --- a/ios/chrome/browser/metrics/model/mobile_session_shutdown_metrics_provider.mm +++ b/ios/chrome/browser/metrics/model/mobile_session_shutdown_metrics_provider.mm
@@ -20,7 +20,6 @@ #import "ios/chrome/browser/crash_report/model/crash_helper.h" #import "ios/chrome/browser/crash_report/model/features.h" #import "ios/chrome/browser/crash_report/model/main_thread_freeze_detector.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" using previous_session_info_constants::DeviceBatteryState; using previous_session_info_constants::DeviceThermalState;
diff --git a/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm b/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm index dfc2ae87d..e59bd019 100644 --- a/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm +++ b/ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.mm
@@ -25,7 +25,6 @@ #import "ios/chrome/browser/passwords/model/ios_chrome_affiliation_service_factory.h" #import "ios/chrome/browser/passwords/model/ios_chrome_affiliations_prefetcher_factory.h" #import "ios/chrome/browser/passwords/model/ios_password_store_utils.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/browser_state_otr_helper.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/signin/model/signin_util.h"
diff --git a/ios/chrome/browser/policy_url_blocking/model/BUILD.gn b/ios/chrome/browser/policy_url_blocking/model/BUILD.gn index 270d640..931dd63 100644 --- a/ios/chrome/browser/policy_url_blocking/model/BUILD.gn +++ b/ios/chrome/browser/policy_url_blocking/model/BUILD.gn
@@ -15,7 +15,6 @@ "//components/keyed_service/core", "//components/keyed_service/ios", "//components/policy/core/browser", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser_state", "//ios/web", "//net",
diff --git a/ios/chrome/browser/policy_url_blocking/model/policy_url_blocking_service.mm b/ios/chrome/browser/policy_url_blocking/model/policy_url_blocking_service.mm index 29ec60b..be341038 100644 --- a/ios/chrome/browser/policy_url_blocking/model/policy_url_blocking_service.mm +++ b/ios/chrome/browser/policy_url_blocking/model/policy_url_blocking_service.mm
@@ -7,7 +7,6 @@ #import "base/no_destructor.h" #import "components/keyed_service/ios/browser_state_dependency_manager.h" #import "components/policy/core/common/policy_pref_names.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/web/public/browser_state.h"
diff --git a/ios/chrome/browser/prefs/model/BUILD.gn b/ios/chrome/browser/prefs/model/BUILD.gn index b92b93eb..3e09807a0 100644 --- a/ios/chrome/browser/prefs/model/BUILD.gn +++ b/ios/chrome/browser/prefs/model/BUILD.gn
@@ -20,7 +20,6 @@ "//components/supervised_user/core/browser", "//components/supervised_user/core/common", "//components/sync_preferences", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/sync/model/prefs", ] }
diff --git a/ios/chrome/browser/prefs/model/ios_chrome_pref_service_factory.mm b/ios/chrome/browser/prefs/model/ios_chrome_pref_service_factory.mm index 6ce6fe0..4653e6f 100644 --- a/ios/chrome/browser/prefs/model/ios_chrome_pref_service_factory.mm +++ b/ios/chrome/browser/prefs/model/ios_chrome_pref_service_factory.mm
@@ -27,7 +27,6 @@ #import "components/sync_preferences/pref_service_syncable.h" #import "components/sync_preferences/pref_service_syncable_factory.h" #import "ios/chrome/browser/prefs/model/ios_chrome_pref_model_associator_client.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" namespace {
diff --git a/ios/chrome/browser/providers/BUILD.gn b/ios/chrome/browser/providers/BUILD.gn index 553b0448..eacc187 100644 --- a/ios/chrome/browser/providers/BUILD.gn +++ b/ios/chrome/browser/providers/BUILD.gn
@@ -10,6 +10,7 @@ "//ios/chrome/browser/providers/branded_images:chromium_branded_images", "//ios/chrome/browser/providers/context_menu:chromium_context_menu", "//ios/chrome/browser/providers/discover_feed:chromium_discover_feed", + "//ios/chrome/browser/providers/drive:chromium_drive", "//ios/chrome/browser/providers/follow:chromium_follow", "//ios/chrome/browser/providers/font:chromium_font", "//ios/chrome/browser/providers/fullscreen:chromium_fullscreen",
diff --git a/ios/chrome/browser/providers/drive/BUILD.gn b/ios/chrome/browser/providers/drive/BUILD.gn new file mode 100644 index 0000000..92d64d01 --- /dev/null +++ b/ios/chrome/browser/providers/drive/BUILD.gn
@@ -0,0 +1,12 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("chromium_drive") { + sources = [ "chromium_drive.mm" ] + deps = [ + "//base", + "//ios/chrome/browser/drive/model:drive_service", + "//ios/public/provider/chrome/browser/drive:drive_api", + ] +}
diff --git a/ios/chrome/browser/providers/drive/DEPS b/ios/chrome/browser/providers/drive/DEPS new file mode 100644 index 0000000..00faf29 --- /dev/null +++ b/ios/chrome/browser/providers/drive/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+ios/chrome/browser/drive/model/drive_service.h", +]
diff --git a/ios/chrome/browser/providers/drive/chromium_drive.mm b/ios/chrome/browser/providers/drive/chromium_drive.mm new file mode 100644 index 0000000..3aa97cc9 --- /dev/null +++ b/ios/chrome/browser/providers/drive/chromium_drive.mm
@@ -0,0 +1,29 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/public/provider/chrome/browser/drive/drive_api.h" + +#import "ios/chrome/browser/drive/model/drive_service.h" + +namespace { + +class ChromiumDriveService final : public drive::DriveService { + public: + ChromiumDriveService() = default; + ~ChromiumDriveService() final = default; + + bool IsSupported() const final { return false; } +}; + +} // namespace + +namespace ios::provider { + +std::unique_ptr<drive::DriveService> CreateDriveService( + const drive::DriveServiceConfiguration& configuration) { + // Save to Drive is not supported. + return std::make_unique<ChromiumDriveService>(); +} + +} // namespace ios::provider
diff --git a/ios/chrome/browser/safe_browsing/model/safe_browsing_metrics_collector_factory.mm b/ios/chrome/browser/safe_browsing/model/safe_browsing_metrics_collector_factory.mm index 080666d0..4dda198 100644 --- a/ios/chrome/browser/safe_browsing/model/safe_browsing_metrics_collector_factory.mm +++ b/ios/chrome/browser/safe_browsing/model/safe_browsing_metrics_collector_factory.mm
@@ -6,7 +6,6 @@ #import "components/keyed_service/ios/browser_state_dependency_manager.h" #import "components/safe_browsing/core/browser/safe_browsing_metrics_collector.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/components/security_interstitials/safe_browsing/safe_browsing_service.h"
diff --git a/ios/chrome/browser/search_engines/model/template_url_service_factory.mm b/ios/chrome/browser/search_engines/model/template_url_service_factory.mm index 309d039..398f45f 100644 --- a/ios/chrome/browser/search_engines/model/template_url_service_factory.mm +++ b/ios/chrome/browser/search_engines/model/template_url_service_factory.mm
@@ -14,7 +14,6 @@ #import "ios/chrome/browser/history/model/history_service_factory.h" #import "ios/chrome/browser/search_engines/model/template_url_service_client_impl.h" #import "ios/chrome/browser/search_engines/model/ui_thread_search_terms_data.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/browser_state_otr_helper.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/webdata_services/model/web_data_service_factory.h"
diff --git a/ios/chrome/browser/sessions/session_internal_util.h b/ios/chrome/browser/sessions/session_internal_util.h index 74ae5be..4db187c 100644 --- a/ios/chrome/browser/sessions/session_internal_util.h +++ b/ios/chrome/browser/sessions/session_internal_util.h
@@ -46,6 +46,11 @@ [[nodiscard]] bool CopyDirectory(const base::FilePath& from_dir, const base::FilePath& dest_dir); +// Copies file at `from_path` to `dest_path`. It is an error if `from_path` +// is not a file or if `dest_path` exists and is not a file. +[[nodiscard]] bool CopyFile(const base::FilePath& from_path, + const base::FilePath& dest_path); + // Writes `data` to `filename` and returns whether the operation was a success. // The file is created with protection until first user authentication. [[nodiscard]] bool WriteFile(const base::FilePath& filename, NSData* data);
diff --git a/ios/chrome/browser/sessions/session_internal_util.mm b/ios/chrome/browser/sessions/session_internal_util.mm index 8747236d..3a8aa89 100644 --- a/ios/chrome/browser/sessions/session_internal_util.mm +++ b/ios/chrome/browser/sessions/session_internal_util.mm
@@ -156,6 +156,55 @@ return true; } +// Copies file at `from_path` to `dest_path`. It is an error if `from_path` +// is not a file or if `dest_path` exists and is not a file. +[[nodiscard]] bool CopyFile(NSString* from_path, NSString* dest_path) { + if (!FileExists(from_path)) { + DLOG(WARNING) << "Error copying file: " + << base::SysNSStringToUTF8(from_path) << " to " + << base::SysNSStringToUTF8(dest_path) << ": no such file"; + return false; + } + + switch (GetPathStatus(dest_path)) { + case PathStatus::kDirectory: + DLOG(WARNING) << "Error copying file: " + << base::SysNSStringToUTF8(from_path) << " to " + << base::SysNSStringToUTF8(dest_path) + << ": directory exists"; + break; + + case PathStatus::kFile: + if (!DeleteRecursively(dest_path)) { + return false; + } + break; + + case PathStatus::kInexistent: + break; + } + + // Create parent directory of `dest_path`. + if (!CreateDirectory([dest_path stringByDeletingLastPathComponent])) { + return false; + } + + // Use hardlink to perform the copy to reduce the impact on storage. + + NSError* error = nil; + if (![[NSFileManager defaultManager] linkItemAtPath:from_path + toPath:dest_path + error:&error]) { + DLOG(WARNING) << "Error copying file: " + << base::SysNSStringToUTF8(from_path) << " to " + << base::SysNSStringToUTF8(dest_path) << ": " + << base::SysNSStringToUTF8([error description]); + return false; + } + + return true; +} + // Writes `data` to `filename` and returns whether the operation was a success. // The file is created with protection until first user authentication. [[nodiscard]] bool WriteFile(NSString* filename, NSData* data) { @@ -228,6 +277,12 @@ base::apple::FilePathToNSString(dest_dir)); } +bool CopyFile(const base::FilePath& from_path, + const base::FilePath& dest_path) { + return internal::CopyFile(base::apple::FilePathToNSString(from_path), + base::apple::FilePathToNSString(dest_path)); +} + bool WriteFile(const base::FilePath& filename, NSData* data) { return internal::WriteFile(base::apple::FilePathToNSString(filename), data); }
diff --git a/ios/chrome/browser/sessions/session_internal_util_unittest.mm b/ios/chrome/browser/sessions/session_internal_util_unittest.mm index 98a6f412..1ba5bc03 100644 --- a/ios/chrome/browser/sessions/session_internal_util_unittest.mm +++ b/ios/chrome/browser/sessions/session_internal_util_unittest.mm
@@ -542,6 +542,105 @@ EXPECT_NSEQ(ios::sessions::ReadFile(deep), data); } +// Tests that `CopyFile` returns success if the file can be copied. +TEST_F(SessionInternalUtilTest, CopyFile) { + base::ScopedTempDir scoped_temp_dir; + ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); + const base::FilePath root = scoped_temp_dir.GetPath(); + + const base::FilePath from = root.Append(kDirname1).Append(kFromName); + const base::FilePath dest = root.Append(kDirname2).Append(kDestName); + + NSData* data = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; + ASSERT_TRUE(ios::sessions::WriteFile(from, data)); + + // Check that copying the file leave the source file intact, creates + // the directory structure for destination file, and both files have + // the same content. + EXPECT_TRUE(ios::sessions::CopyFile(from, dest)); + + EXPECT_TRUE(ios::sessions::FileExists(from)); + EXPECT_NSEQ(ios::sessions::ReadFile(from), data); + + EXPECT_TRUE(ios::sessions::FileExists(dest)); + EXPECT_NSEQ(ios::sessions::ReadFile(dest), data); +} + +// Tests that `CopyFile` returns success and overwritten destination if +// it exists and is a file. +TEST_F(SessionInternalUtilTest, CopyFile_OverwriteDestination) { + base::ScopedTempDir scoped_temp_dir; + ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); + const base::FilePath root = scoped_temp_dir.GetPath(); + + const base::FilePath from = root.Append(kDirname1).Append(kFromName); + const base::FilePath dest = root.Append(kDirname2).Append(kDestName); + + NSData* data1 = [@"data1" dataUsingEncoding:NSUTF8StringEncoding]; + ASSERT_TRUE(ios::sessions::WriteFile(from, data1)); + + NSData* data2 = [@"data2" dataUsingEncoding:NSUTF8StringEncoding]; + ASSERT_TRUE(ios::sessions::WriteFile(dest, data2)); + ASSERT_NSEQ(ios::sessions::ReadFile(dest), data2); + + // Check that copying the file leave the source file intact, overwrite the + // destination file, and both files have the same content. + EXPECT_TRUE(ios::sessions::CopyFile(from, dest)); + + EXPECT_TRUE(ios::sessions::FileExists(from)); + EXPECT_NSEQ(ios::sessions::ReadFile(from), data1); + + EXPECT_TRUE(ios::sessions::FileExists(dest)); + EXPECT_NSEQ(ios::sessions::ReadFile(dest), data1); +} + +// Tests that `CopyFile` fails if the source is not a file. +TEST_F(SessionInternalUtilTest, CopyFile_FailureSourceIsADirectory) { + base::ScopedTempDir scoped_temp_dir; + ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); + const base::FilePath root = scoped_temp_dir.GetPath(); + + const base::FilePath from = root.Append(kDirname1).Append(kFromName); + const base::FilePath dest = root.Append(kDirname2).Append(kDestName); + + ASSERT_TRUE(ios::sessions::CreateDirectory(from)); + + // Check that trying to copy `from` which is a directory using CopyFile()` + // fails with an error. + EXPECT_FALSE(ios::sessions::CopyFile(from, dest)); +} + +// Tests that `CopyFile` fails if the source does not exist. +TEST_F(SessionInternalUtilTest, CopyFile_FailureSourceMissing) { + base::ScopedTempDir scoped_temp_dir; + ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); + const base::FilePath root = scoped_temp_dir.GetPath(); + + const base::FilePath from = root.Append(kDirname1).Append(kFromName); + const base::FilePath dest = root.Append(kDirname2).Append(kDestName); + + // Check that trying to copy `from` which is a directory using CopyFile()` + // fails with an error. + EXPECT_FALSE(ios::sessions::CopyFile(from, dest)); +} + +// Tests that `CopyFile` fails if the destination path is a directory. +TEST_F(SessionInternalUtilTest, CopyFile_FailureDestinationIsADirectory) { + base::ScopedTempDir scoped_temp_dir; + ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); + const base::FilePath root = scoped_temp_dir.GetPath(); + + const base::FilePath from = root.Append(kDirname1).Append(kFromName); + const base::FilePath dest = root.Append(kDirname2).Append(kDestName); + + NSData* data = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; + ASSERT_TRUE(ios::sessions::WriteFile(from, data)); + ASSERT_TRUE(ios::sessions::CreateDirectory(dest)); + + // Check that trying to copy a file to a path that is a directory fails. + EXPECT_FALSE(ios::sessions::CopyFile(from, dest)); +} + // Tests that `WriteFile` returns success when the file is created and the // data written to disk. TEST_F(SessionInternalUtilTest, WriteFile) {
diff --git a/ios/chrome/browser/shared/public/features/features.mm b/ios/chrome/browser/shared/public/features/features.mm index 80bc5ea..a26b02a 100644 --- a/ios/chrome/browser/shared/public/features/features.mm +++ b/ios/chrome/browser/shared/public/features/features.mm
@@ -48,7 +48,7 @@ BASE_FEATURE(kIOSPaymentsBottomSheet, "IOSPaymentsBottomSheet", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kTestFeature, "TestFeature", base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/ios/chrome/browser/shared/ui/symbols/symbol_helpers.h b/ios/chrome/browser/shared/ui/symbols/symbol_helpers.h index f98e531..ce604bc6d 100644 --- a/ios/chrome/browser/shared/ui/symbols/symbol_helpers.h +++ b/ios/chrome/browser/shared/ui/symbols/symbol_helpers.h
@@ -11,6 +11,10 @@ /// Import `symbols.h` and not this file directly. /// ******* +#ifdef __cplusplus +extern "C" { +#endif + // Returns a SF symbol named `symbol_name` configured with the given // `configuration`. UIImage* DefaultSymbolWithConfiguration(NSString* symbol_name, @@ -63,4 +67,8 @@ // root screen, with multicolor enabled. UIImage* CustomSettingsRootMulticolorSymbol(NSString* symbol_name); +#ifdef __cplusplus +} // extern "C" +#endif + #endif // IOS_CHROME_BROWSER_SHARED_UI_SYMBOLS_SYMBOL_HELPERS_H_
diff --git a/ios/chrome/browser/shared/ui/symbols/symbol_helpers.mm b/ios/chrome/browser/shared/ui/symbols/symbol_helpers.mm index 2d27c9fd8..ffb82b7 100644 --- a/ios/chrome/browser/shared/ui/symbols/symbol_helpers.mm +++ b/ios/chrome/browser/shared/ui/symbols/symbol_helpers.mm
@@ -40,6 +40,8 @@ } // namespace +extern "C" { + UIImage* DefaultSymbolWithConfiguration(NSString* symbol_name, UIImageConfiguration* configuration) { return SymbolWithConfiguration(symbol_name, configuration, true); @@ -112,3 +114,5 @@ return MakeSymbolMulticolor(CustomSymbolWithPointSize( symbol_name, kSettingsRootSymbolImagePointSize)); } + +} // extern "C"
diff --git a/ios/chrome/browser/signin/model/BUILD.gn b/ios/chrome/browser/signin/model/BUILD.gn index 51b2e9d..1e18924 100644 --- a/ios/chrome/browser/signin/model/BUILD.gn +++ b/ios/chrome/browser/signin/model/BUILD.gn
@@ -126,7 +126,6 @@ "//base", "//components/prefs", "//components/signin/public/identity_manager", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features:system_flags", "//ios/public/provider/chrome/browser/signin:signin_error_api",
diff --git a/ios/chrome/browser/signin/model/ios_chrome_signin_client.mm b/ios/chrome/browser/signin/model/ios_chrome_signin_client.mm index 4dc04834..d452f59 100644 --- a/ios/chrome/browser/signin/model/ios_chrome_signin_client.mm +++ b/ios/chrome/browser/signin/model/ios_chrome_signin_client.mm
@@ -9,7 +9,6 @@ #import "components/signin/core/browser/cookie_settings_util.h" #import "components/signin/ios/browser/wait_for_network_callback_helper_ios.h" #import "components/signin/public/identity_manager/primary_account_change_event.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/browser_state_info_cache.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state_manager.h"
diff --git a/ios/chrome/browser/signin/model/signin_util.mm b/ios/chrome/browser/signin/model/signin_util.mm index 1c72e4e5..329587a 100644 --- a/ios/chrome/browser/signin/model/signin_util.mm +++ b/ios/chrome/browser/signin/model/signin_util.mm
@@ -12,7 +12,6 @@ #import "components/signin/public/identity_manager/tribool.h" #import "google_apis/gaia/core_account_id.h" #import "google_apis/gaia/gaia_auth_util.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/system_flags.h" #import "ios/chrome/browser/signin/model/signin_util_internal.h"
diff --git a/ios/chrome/browser/supervised_user/model/BUILD.gn b/ios/chrome/browser/supervised_user/model/BUILD.gn index 6c672a8..fc07b612 100644 --- a/ios/chrome/browser/supervised_user/model/BUILD.gn +++ b/ios/chrome/browser/supervised_user/model/BUILD.gn
@@ -56,7 +56,6 @@ deps = [ "//components/keyed_service/ios", "//components/supervised_user/core/browser", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser_state", ] } @@ -86,7 +85,6 @@ "//components/sync_preferences", "//components/sync_preferences:test_support", "//ios/chrome/browser/first_run/model", - "//ios/chrome/browser/shared/model/application_context:application_context", "//ios/chrome/browser/shared/model/browser_state:test_support", "//ios/chrome/browser/shared/model/prefs:browser_prefs", "//ios/chrome/browser/signin/model",
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_settings_service_factory.mm b/ios/chrome/browser/supervised_user/model/supervised_user_settings_service_factory.mm index 330ecac..52187139 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_settings_service_factory.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_settings_service_factory.mm
@@ -7,7 +7,6 @@ #import "base/no_destructor.h" #import "components/keyed_service/ios/browser_state_dependency_manager.h" #import "components/supervised_user/core/browser/supervised_user_settings_service.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/browser_state_otr_helper.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h"
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper.mm b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper.mm index 3362d14..2c341a0a 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper.mm
@@ -16,7 +16,6 @@ #import "components/supervised_user/core/common/pref_names.h" #import "components/supervised_user/core/common/supervised_user_constants.h" #import "components/supervised_user/core/common/supervised_user_utils.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/supervised_user/model/supervised_user_error.h" #import "ios/chrome/browser/supervised_user/model/supervised_user_error_container.h"
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm index 53909e96..f15ea8b0 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_url_filter_tab_helper_unittest.mm
@@ -19,7 +19,6 @@ #import "components/supervised_user/core/common/supervised_user_utils.h" #import "components/sync_preferences/pref_service_mock_factory.h" #import "components/sync_preferences/pref_service_syncable.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state_manager.h" #import "ios/chrome/browser/shared/model/prefs/browser_prefs.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/BUILD.gn index 55a33cc..736cdbb 100644 --- a/ios/chrome/browser/ui/authentication/signin/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/signin/BUILD.gn
@@ -52,7 +52,6 @@ "//components/sync/base:features", "//components/sync/service", "//ios/chrome/app:tests_hook", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features",
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils.mm b/ios/chrome/browser/ui/authentication/signin/signin_utils.mm index 9634766d..bfc9f78 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_utils.mm +++ b/ios/chrome/browser/ui/authentication/signin/signin_utils.mm
@@ -15,7 +15,6 @@ #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" #import "ios/chrome/app/tests_hook.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h"
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/BUILD.gn b/ios/chrome/browser/ui/authentication/unified_consent/BUILD.gn index 67b82f6..0f501a8 100644 --- a/ios/chrome/browser/ui/authentication/unified_consent/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/unified_consent/BUILD.gn
@@ -40,7 +40,6 @@ "//components/google/core/common", "//components/password_manager/core/common:features", "//ios/chrome/app/strings", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/url:constants", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/util",
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm index 1a6b1fc7..336c7dd 100644 --- a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm +++ b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm
@@ -12,7 +12,6 @@ #import "base/notreached.h" #import "components/google/core/common/google_util.h" #import "components/password_manager/core/common/password_manager_features.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/ui/authentication/authentication_constants.h"
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index f0e853eb..195dcd3 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -67,7 +67,6 @@ #import "ios/chrome/browser/shared/coordinator/alert/repost_form_coordinator_delegate.h" #import "ios/chrome/browser/shared/coordinator/default_browser_promo/non_modal_default_browser_promo_scheduler_scene_agent.h" #import "ios/chrome/browser/shared/coordinator/layout_guide/layout_guide_util.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/browser/browser_provider.h" #import "ios/chrome/browser/shared/model/browser/browser_provider_interface.h"
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index 5e69529..88526d1e 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -71,8 +71,6 @@ #import "ios/chrome/browser/ui/tabs/tab_strip_constants.h" #import "ios/chrome/browser/ui/tabs/tab_strip_legacy_coordinator.h" #import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h" -#import "ios/chrome/browser/ui/toolbar/adaptive_toolbar_coordinator.h" -#import "ios/chrome/browser/ui/toolbar/adaptive_toolbar_view_controller.h" #import "ios/chrome/browser/ui/toolbar/fullscreen/toolbar_ui.h" #import "ios/chrome/browser/ui/toolbar/fullscreen/toolbar_ui_broadcasting_util.h" #import "ios/chrome/browser/ui/toolbar/toolbar_coordinator.h" @@ -1973,6 +1971,11 @@ - (void)updateFootersForFullscreenProgress:(CGFloat)progress { self.footerFullscreenProgress = progress; + // Don't update the height of the secondary toolbar if it is hidden. + if (!IsSplitToolbarMode(self)) { + return; + } + const CGFloat expandedToolbarHeight = self.fullscreenController->GetMaxViewportInsets().bottom; if (!expandedToolbarHeight) {
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm index bf628a6..d114b95 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm
@@ -73,10 +73,11 @@ constraintEqualToAnchor:_faviconView.heightAnchor], ]]; - [self.imageContainerView addSubview:_faviconView]; if (IsMagicStackEnabled()) { + [self addSubview:_faviconView]; AddSameCenterConstraints(_faviconView, self.imageContainerView); } else { + [self.imageContainerView addSubview:_faviconView]; AddSameConstraints(self.imageContainerView, _faviconView); } }
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_favicon_mediator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_favicon_mediator.mm index fd32d0b..be6e832 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_favicon_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_favicon_mediator.mm
@@ -6,7 +6,6 @@ #import "base/functional/bind.h" #import "components/favicon/core/large_icon_service.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm index 2775fa1c..80eded5 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
@@ -1604,7 +1604,8 @@ item.status = (ParcelState)iter->state; [parcelItems addObject:item]; - if (iter->estimated_delivery_time < base::Time::Now() - base::Days(2)) { + if (!iter->estimated_delivery_time.is_null() && + iter->estimated_delivery_time < base::Time::Now() - base::Days(2)) { // Parcel was delivered more than two days ago, make this the last time it // is shown by stopping tracking. _shoppingService->StopTrackingParcel(iter->tracking_id,
diff --git a/ios/chrome/browser/ui/context_menu/BUILD.gn b/ios/chrome/browser/ui/context_menu/BUILD.gn index 2446b32..aaafda27 100644 --- a/ios/chrome/browser/ui/context_menu/BUILD.gn +++ b/ios/chrome/browser/ui/context_menu/BUILD.gn
@@ -67,7 +67,10 @@ source_set("unit_tests") { testonly = true - + sources = [ + "context_menu_configuration_provider_unittest.mm", + "context_menu_utils_unittest.mm", + ] deps = [ ":context_menu", ":context_menu_ui", @@ -75,7 +78,6 @@ "//base/test:test_support", "//components/signin/public/identity_manager:test_support", "//components/url_formatter", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser/test:test_support", "//ios/chrome/browser/shared/model/browser_state:test_support", "//ios/chrome/browser/shared/model/web_state_list", @@ -94,11 +96,6 @@ "//testing/gtest", "//third_party/ocmock", ] - - sources = [ - "context_menu_configuration_provider_unittest.mm", - "context_menu_utils_unittest.mm", - ] } source_set("eg2_tests") {
diff --git a/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider_unittest.mm b/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider_unittest.mm index 971ac11..1c28b8b 100644 --- a/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider_unittest.mm +++ b/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider_unittest.mm
@@ -9,7 +9,6 @@ #import "base/test/task_environment.h" #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/identity_test_environment.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h"
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm b/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm index d047de0..9394bd7 100644 --- a/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm +++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_mediator.mm
@@ -13,7 +13,6 @@ #import "components/web_resource/web_resource_pref_names.h" #import "ios/chrome/browser/first_run/model/first_run_metrics.h" #import "ios/chrome/browser/policy/policy_util.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h"
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn index 4f1d3a8..0100ee6 100644 --- a/ios/chrome/browser/ui/main/BUILD.gn +++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -90,7 +90,6 @@ "//ios/chrome/browser/sessions:session_util", "//ios/chrome/browser/settings/model/sync/utils", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/model/web_state_list", "//ios/chrome/browser/shared/public/commands",
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.mm b/ios/chrome/browser/ui/main/browser_view_wrangler.mm index 7777b35..700fb0b 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler.mm +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
@@ -18,7 +18,6 @@ #import "ios/chrome/browser/sessions/session_util.h" #import "ios/chrome/browser/settings/model/sync/utils/sync_presenter.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.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"
diff --git a/ios/chrome/browser/ui/omnibox/BUILD.gn b/ios/chrome/browser/ui/omnibox/BUILD.gn index c96c6c5..9fb3ab8e 100644 --- a/ios/chrome/browser/ui/omnibox/BUILD.gn +++ b/ios/chrome/browser/ui/omnibox/BUILD.gn
@@ -147,7 +147,6 @@ "//ios/chrome/browser/shared/coordinator/default_browser_promo:default_browser_promo_scene_agent_utils", "//ios/chrome/browser/shared/coordinator/layout_guide", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/model/url:constants",
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_text_field_experimental.mm b/ios/chrome/browser/ui/omnibox/omnibox_text_field_experimental.mm index 26c261a..793b7e1 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_text_field_experimental.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_text_field_experimental.mm
@@ -15,7 +15,6 @@ #import "components/grit/components_scaled_resources.h" #import "components/omnibox/browser/autocomplete_input.h" #import "ios/chrome/browser/autocomplete/model/autocomplete_scheme_classifier_impl.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/public/features/system_flags.h" #import "ios/chrome/browser/shared/ui/util/animation_util.h"
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm index 04c8038..f4df2e2 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
@@ -15,7 +15,6 @@ #import "components/grit/components_scaled_resources.h" #import "components/omnibox/browser/autocomplete_input.h" #import "ios/chrome/browser/autocomplete/model/autocomplete_scheme_classifier_impl.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/public/features/system_flags.h" #import "ios/chrome/browser/shared/ui/util/animation_util.h"
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_text_field_legacy.mm b/ios/chrome/browser/ui/omnibox/omnibox_text_field_legacy.mm index fe4dc8fd..bc0bc5d 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_text_field_legacy.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_text_field_legacy.mm
@@ -15,7 +15,6 @@ #import "components/grit/components_scaled_resources.h" #import "components/omnibox/browser/autocomplete_input.h" #import "ios/chrome/browser/autocomplete/model/autocomplete_scheme_classifier_impl.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/public/features/system_flags.h" #import "ios/chrome/browser/shared/ui/util/animation_util.h"
diff --git a/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm b/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm index 7f969da..dd79b20 100644 --- a/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm +++ b/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm
@@ -14,7 +14,6 @@ #import "ios/chrome/browser/policy/policy_watcher_browser_agent_observer_bridge.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_controller.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_ui_provider.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser_provider.h" #import "ios/chrome/browser/shared/model/browser/browser_provider_interface.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h"
diff --git a/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm b/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm index 5cb411e..7c44693e3 100644 --- a/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm +++ b/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm
@@ -27,7 +27,6 @@ #import "ios/chrome/browser/promos_manager/promo_config.h" #import "ios/chrome/browser/promos_manager/promos_manager.h" #import "ios/chrome/browser/promos_manager/promos_manager_factory.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/shared/public/commands/credential_provider_promo_commands.h"
diff --git a/ios/chrome/browser/ui/save_to_photos/save_to_photos_coordinator_unittest.mm b/ios/chrome/browser/ui/save_to_photos/save_to_photos_coordinator_unittest.mm index 3a0752d..56a5c72 100644 --- a/ios/chrome/browser/ui/save_to_photos/save_to_photos_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/save_to_photos/save_to_photos_coordinator_unittest.mm
@@ -12,7 +12,6 @@ #import "components/signin/public/identity_manager/identity_test_environment.h" #import "ios/chrome/browser/photos/model/photos_service_factory.h" #import "ios/chrome/browser/shared/coordinator/alert/alert_coordinator.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h"
diff --git a/ios/chrome/browser/ui/search_engine_choice/BUILD.gn b/ios/chrome/browser/ui/search_engine_choice/BUILD.gn index 35137bf..24887b3a 100644 --- a/ios/chrome/browser/ui/search_engine_choice/BUILD.gn +++ b/ios/chrome/browser/ui/search_engine_choice/BUILD.gn
@@ -9,13 +9,12 @@ "search_engine_choice_coordinator.mm", "search_engine_choice_mediator.h", "search_engine_choice_mediator.mm", - "search_engine_choice_ui_util.h", - "search_engine_choice_ui_util.mm", "search_engine_choice_view_controller.h", "search_engine_choice_view_controller.mm", ] deps = [ ":constants", + ":ui_util", "//base", "//components/search_engines", "//components/strings", @@ -31,6 +30,7 @@ "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/ui/first_run:screen_delegate", + "//ios/chrome/browser/ui/search_engine_choice/fake_omnibox", "//ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table", "//ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells", "//ios/chrome/browser/ui/search_engine_choice/why_am_i_seeing_this", @@ -50,6 +50,28 @@ deps = [ "//base" ] } +source_set("ui_util") { + sources = [ + "search_engine_choice_ui_util.h", + "search_engine_choice_ui_util.mm", + ] + deps = [ + "//base", + "//base:i18n", + "//components/strings", + "//ios/chrome/app/strings", + "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/browser/ui/search_engine_choice:constants", + "//ios/chrome/common/ui/colors", + "//ios/chrome/common/ui/util", + "//ios/chrome/common/ui/util:image_util", + "//ui/base", + ] + frameworks = [ "UIKit.framework" ] +} + source_set("unit_tests") { testonly = true sources = [ "search_engine_choice_coordinator_unittest.mm" ]
diff --git a/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/BUILD.gn b/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/BUILD.gn new file mode 100644 index 0000000..f697693 --- /dev/null +++ b/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/BUILD.gn
@@ -0,0 +1,25 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("fake_omnibox") { + sources = [ + "fake_omnibox_view.h", + "fake_omnibox_view.mm", + ] + deps = [ + "//base", + "//base:i18n", + "//components/strings", + "//ios/chrome/app/strings", + "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/browser/ui/search_engine_choice:constants", + "//ios/chrome/common/ui/colors", + "//ios/chrome/common/ui/util", + "//ios/chrome/common/ui/util:image_util", + "//ui/base", + ] + frameworks = [ "UIKit.framework" ] +}
diff --git a/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.h b/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.h new file mode 100644 index 0000000..52d0928 --- /dev/null +++ b/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.h
@@ -0,0 +1,30 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_SEARCH_ENGINE_CHOICE_FAKE_OMNIBOX_FAKE_OMNIBOX_VIEW_H_ +#define IOS_CHROME_BROWSER_UI_SEARCH_ENGINE_CHOICE_FAKE_OMNIBOX_FAKE_OMNIBOX_VIEW_H_ + +#import <UIKit/UIKit.h> + +// Illustration representing a fake omnibox at the top of the search engine +// choice screen. Before the user makes a selection, the omnibox is empty. Once +// the user makes a selection, the omnibox is updated with the name and favicon +// of the selected search engine. +@interface FakeOmniboxView : UIView + +// For the empty fake omnibox, both `name` and `image` should be nil. In other +// cases, both `name` and `image` need to be set. +- (instancetype)initWithSearchEngineName:(NSString*)name + faviconImage:(UIImage*)image + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; + +- (instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE; + +@property(nonatomic, strong) UIImage* faviconImage; + +@end + +#endif // IOS_CHROME_BROWSER_UI_SEARCH_ENGINE_CHOICE_FAKE_OMNIBOX_FAKE_OMNIBOX_VIEW_H_
diff --git a/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.mm b/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.mm new file mode 100644 index 0000000..c118f0c --- /dev/null +++ b/ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.mm
@@ -0,0 +1,190 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.h" + +#import "base/i18n/rtl.h" +#import "base/strings/sys_string_conversions.h" +#import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/shared/ui/symbols/symbols.h" +#import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" +#import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.h" +#import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/common/ui/util/button_util.h" +#import "ios/chrome/common/ui/util/device_util.h" +#import "ios/chrome/common/ui/util/sdk_forward_declares.h" +#import "ui/base/l10n/l10n_util_mac.h" + +namespace { + +// Line width for the fake omnibox. +constexpr CGFloat kLineWidth = 1.; +// Parameters for the fake omnibox. +constexpr CGFloat kFakeOmniboxCornerRadius = 99.; +// Parameters for empty field in the fake omnibox. +constexpr CGFloat kFakeOmniboxFieldWidth = 102.; +constexpr CGFloat kFakeOmniboxFieldHeight = 12.; +constexpr CGFloat kFakeOmniboxFieldCornerRadius = 12.; +// Magnifying glass size. +constexpr CGFloat kMagnifyingGlassSize = 20.; +constexpr CGFloat kMagnifyingGlassLeadingInset = 16.; +constexpr CGFloat kMagnifyingGlassTopInset = 12.; +// Font size for label +constexpr CGFloat kFontSize = 13.; + +// Creates the fake omnibox border or shadow. +CAShapeLayer* CreateOmniboxEdgeLayer(BOOL isBorder) { + CAShapeLayer* edgeLayer = [CAShapeLayer layer]; + if (isBorder) { + // Create the dashed border line. + edgeLayer.strokeColor = [UIColor colorNamed:kGrey300Color].CGColor; + edgeLayer.fillColor = nil; + edgeLayer.lineDashPattern = @[ @2, @1 ]; + + edgeLayer.lineWidth = kLineWidth; + edgeLayer.path = + [UIBezierPath + bezierPathWithRoundedRect:CGRectMake(0, 0, kFakeOmniboxWidth, + kFakeOmniboxHeight) + cornerRadius:kFakeOmniboxCornerRadius] + .CGPath; + } else { + // Create the shadow + edgeLayer.shadowColor = [UIColor colorNamed:kGrey300Color].CGColor; + edgeLayer.shadowOpacity = 1; + edgeLayer.shadowRadius = 16; + edgeLayer.shadowOffset = CGSizeMake(0, 4); + edgeLayer.shadowPath = + [UIBezierPath + bezierPathWithRoundedRect:CGRectMake(0, 0, kFakeOmniboxWidth, + kFakeOmniboxHeight) + cornerRadius:kFakeOmniboxCornerRadius] + .CGPath; + } + return edgeLayer; +} + +// Creates the fake omnibox field. +CAShapeLayer* CreateOmniboxFieldLayer(BOOL isEmpty) { + CAShapeLayer* field = [CAShapeLayer layer]; + if (isEmpty) { + // Add the empty grey field inside. + field.fillColor = [UIColor colorNamed:kGrey100Color].CGColor; + if (base::i18n::IsRTL()) { + field.frame = + CGRectMake(kFakeOmniboxWidth - kFakeOmniboxFieldLeadingInset - + kFakeOmniboxFieldWidth, + (kFakeOmniboxHeight - kFakeOmniboxFieldHeight) / 2., + kFakeOmniboxFieldWidth, kFakeOmniboxFieldHeight); + } else { + field.frame = + CGRectMake(kFakeOmniboxFieldLeadingInset, + (kFakeOmniboxHeight - kFakeOmniboxFieldHeight) / 2., + kFakeOmniboxFieldWidth, kFakeOmniboxFieldHeight); + } + field.path = + [UIBezierPath + bezierPathWithRoundedRect:CGRectMake(0, 0, kFakeOmniboxFieldWidth, + kFakeOmniboxFieldHeight) + cornerRadius:kFakeOmniboxFieldCornerRadius] + .CGPath; + return field; + } + + field.fillColor = [UIColor colorNamed:kBackgroundColor].CGColor; + field.frame = CGRectMake(0, 0, kFakeOmniboxWidth, kFakeOmniboxHeight); + field.path = [UIBezierPath + bezierPathWithRoundedRect:CGRectMake(0, 0, kFakeOmniboxWidth, + kFakeOmniboxHeight) + cornerRadius:kFakeOmniboxCornerRadius] + .CGPath; + return field; +} + +} // namespace + +@implementation FakeOmniboxView { + // The image view for the favicon or the magnifying glass. + UIImageView* _imageView; + // Whether the fake omnibox should be empty. + BOOL _isEmptyFakeOmnibox; +} + +- (instancetype)initWithSearchEngineName:(NSString*)name + faviconImage:(UIImage*)image { + self = [super initWithFrame:CGRectMake(0, 0, 0, 0)]; + if (self) { + CHECK((!name && !image) || (name && image)) + << "name: " << name << ", image: " << image; + + _isEmptyFakeOmnibox = !name && !image; + + self.bounds = CGRectMake(0, 0, kFakeOmniboxWidth, kFakeOmniboxHeight); + + // Add the shadow around the omnibox. + CAShapeLayer* omniboxEdge = CreateOmniboxEdgeLayer(_isEmptyFakeOmnibox); + [self.layer addSublayer:omniboxEdge]; + + // Create the pill-shaped field. + CAShapeLayer* field = CreateOmniboxFieldLayer(_isEmptyFakeOmnibox); + [self.layer addSublayer:field]; + + if (!_isEmptyFakeOmnibox) { + // Add the search engine Label. + UILabel* searchWithLabel = [[UILabel alloc] init]; + if (base::i18n::IsRTL()) { + searchWithLabel.frame = CGRectMake( + 0., 0., kFakeOmniboxWidth - kFakeOmniboxFieldLeadingInset, + kFakeOmniboxHeight); + } else { + searchWithLabel.frame = + CGRectMake(kFakeOmniboxFieldLeadingInset, 0., + kFakeOmniboxWidth - kFakeOmniboxFieldLeadingInset, + kFakeOmniboxHeight); + } + + searchWithLabel.text = + l10n_util::GetNSStringF(IDS_SEARCH_ENGINE_CHOICE_FAKE_OMNIBOX_TEXT, + base::SysNSStringToUTF16(name)); + searchWithLabel.font = [UIFont systemFontOfSize:kFontSize]; + searchWithLabel.numberOfLines = 0; + [self addSubview:searchWithLabel]; + } + // Add the favicon on the side. + _imageView = [[UIImageView alloc] initWithImage:_faviconImage]; + _imageView.layer.cornerRadius = kFaviconImageViewRadius; + _imageView.clipsToBounds = YES; + [self addSubview:_imageView]; + if (base::i18n::IsRTL()) { + _imageView.frame = + CGRectMake(kFakeOmniboxWidth - kMagnifyingGlassLeadingInset - + kFaviconImageViewSize, + kMagnifyingGlassTopInset, kFaviconImageViewSize, + kFaviconImageViewSize); + } else { + _imageView.frame = + CGRectMake(kMagnifyingGlassLeadingInset, kMagnifyingGlassTopInset, + kFaviconImageViewSize, kFaviconImageViewSize); + } + + if (_isEmptyFakeOmnibox) { + _imageView.image = DefaultSymbolWithPointSize(kMagnifyingglassSymbol, + kMagnifyingGlassSize); + } else { + self.faviconImage = image; + _imageView.image = image; + } + } + return self; +} + +#pragma mark - Properties + +- (void)setFaviconImage:(UIImage*)faviconImage { + CHECK(!_isEmptyFakeOmnibox); + _faviconImage = faviconImage; + _imageView.image = faviconImage; +} + +@end
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.h index 08d043a..2a4a6d7 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.h +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.h
@@ -21,6 +21,8 @@ // Favicon size and radius. extern const CGFloat kFaviconImageViewSize; extern const CGFloat kFaviconImageViewRadius; +// The space before the fake omnibox field. +extern const CGFloat kFakeOmniboxFieldLeadingInset; // Prefix for the SearchEngineCell accessibility identifier. extern NSString* const kSnippetSearchEngineIdentifierPrefix;
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.mm index c3fd06b8..1245fba 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.mm +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.mm
@@ -8,6 +8,7 @@ const CGFloat kFakeOmniboxHeight = 48.; const CGFloat kFaviconImageViewSize = 24.; const CGFloat kFaviconImageViewRadius = 3.; +const CGFloat kFakeOmniboxFieldLeadingInset = 48.; NSString* const kSnippetSearchEngineIdentifierPrefix = @"SnippetSearchEngineIdentifierPrefix_";
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_consumer.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_consumer.h index 445e99e..5528b69 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_consumer.h +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_consumer.h
@@ -12,8 +12,8 @@ // Switches the fake omnibox at the top of the screen to one with the correct // favicon and search engine name -- (void)updateFakeOmniboxWithFavicon:(UIImageView*)icon - SearchEngineName:(NSString*)name; +- (void)updateFakeOmniboxWithFaviconImage:(UIImage*)icon + searchEngineName:(NSString*)name; @end
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm index 2016a3d9..6d91e04 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_coordinator.mm
@@ -93,6 +93,7 @@ initWithSearchEngineTableViewController: _searchEnginesTableViewController]; _viewController.actionDelegate = self; + _searchEnginesTableMediator.faviconUpdateConsumer = _viewController; _mediator = [[SearchEngineChoiceMediator alloc] initWithFaviconLoader:faviconLoader];
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm index fcb19c8..a396fb52 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_mediator.mm
@@ -31,16 +31,8 @@ } _selectedItem = item; - __weak __typeof(self) weakSelf = self; - _faviconLoader->FaviconForPageUrl( - item.URL, kDesiredMediumFaviconSizePt, kMinFaviconSizePt, - /*fallback_to_google_server=*/YES, ^(FaviconAttributes* attributes) { - [weakSelf.consumer - updateFakeOmniboxWithFavicon:[[UIImageView alloc] - initWithImage:attributes - .faviconImage] - SearchEngineName:item.name]; - }); + [self.consumer updateFakeOmniboxWithFaviconImage:item.faviconImage + searchEngineName:item.name]; } - (void)disconnect {
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h index ca9bcd9..3121297ea 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h
@@ -20,4 +20,12 @@ @end +// Handles updates to the search engine favicons from the FaviconLoader +@protocol SearchEngineChoiceFaviconUpdateConsumer + +// Called when the favicon of `item` has been updated. +- (void)updateFaviconImageForItem:(SnippetSearchEngineItem*)item; + +@end + #endif // IOS_CHROME_BROWSER_UI_SEARCH_ENGINE_CHOICE_SEARCH_ENGINE_CHOICE_TABLE_SEARCH_ENGINE_CHOICE_TABLE_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h index 99c86c9a..41201e9 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.h
@@ -10,6 +10,7 @@ class FaviconLoader; class PrefService; class TemplateURLService; +@protocol SearchEngineChoiceFaviconUpdateConsumer; @protocol SearchEngineChoiceTableConsumer; @interface SearchEngineChoiceTableMediator : NSObject @@ -23,9 +24,14 @@ - (instancetype)init NS_UNAVAILABLE; // The delegate object that manages interactions with the Search Engine Choice -// view. +// table view. @property(nonatomic, weak) id<SearchEngineChoiceTableConsumer> consumer; +// The delegate object that manages interactions with the Search Engine Choice +// view. +@property(nonatomic, weak) id<SearchEngineChoiceFaviconUpdateConsumer> + faviconUpdateConsumer; + // Index of the row tapped by the user. @property(nonatomic, assign) NSInteger selectedRow;
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm index eb1a618..a5fb282 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_mediator.mm
@@ -138,6 +138,9 @@ /*fallback_to_google_server=*/YES, ^(FaviconAttributes* attributes) { item.faviconImage = attributes.faviconImage; [weakSelf.consumer faviconAttributesUpdatedForItem:item]; + if (item.checked) { + [weakSelf.faviconUpdateConsumer updateFaviconImageForItem:item]; + } }); }
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.h index 0a72f8f..58a82435 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.h +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.h
@@ -9,13 +9,6 @@ // UI Util containing helper methods for the choice screen UI. -// Creates a fake empty omnibox illustration. -UIView* CreateFakeEmptyOmnibox(); - -// Creates a fake omnibox with the given incon and search -// engine name. -UIView* CreateFakeOmnibox(UIImageView* icon, NSString* searchEngineName); - // Gets the correct font for the title. UIFont* GetTitleFontWithTraitCollection(UITraitCollection* trait_collection);
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.mm index a7868b3..50d4fba 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.mm +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.mm
@@ -18,152 +18,11 @@ namespace { -// Line width for the fake omnibox. -constexpr CGFloat kLineWidth = 1.; -// Parameters for the fake omnibox. -constexpr CGFloat kFakeOmniboxCornerRadius = 99.; -// Parameters for empty field in the fake omnibox. -constexpr CGFloat kFakeOmniboxFieldWidth = 102.; -constexpr CGFloat kFakeOmniboxFieldHeight = 12.; -constexpr CGFloat kFakeOmniboxFieldCornerRadius = 12.; -constexpr CGFloat kFakeOmniboxFieldLeadingInset = 48.; -// Magnifying glass size. -constexpr CGFloat kMagnifyingGlassSize = 20.; -constexpr CGFloat kMagnifyingGlassFrameSize = 24.; -constexpr CGFloat kMagnifyingGlassLeadingInset = 16.; -constexpr CGFloat kMagnifyingGlassTopInset = 12.; // The margin between the text and the arrow on the "More" button. constexpr CGFloat kMoreArrowMargin = 4; } // namespace -UIView* CreateFakeEmptyOmnibox() { - UIView* fake_omnibox = [[UIView alloc] init]; - - fake_omnibox.bounds = CGRectMake(0, 0, kFakeOmniboxWidth, kFakeOmniboxHeight); - - // Create the dashed border line. - CAShapeLayer* fake_omnibox_border = [CAShapeLayer layer]; - fake_omnibox_border.strokeColor = [UIColor colorNamed:kGrey300Color].CGColor; - fake_omnibox_border.fillColor = nil; - fake_omnibox_border.lineDashPattern = @[ @2, @1 ]; - fake_omnibox_border.frame = fake_omnibox.bounds; - fake_omnibox_border.lineWidth = kLineWidth; - fake_omnibox_border.path = - [UIBezierPath bezierPathWithRoundedRect:fake_omnibox.bounds - cornerRadius:kFakeOmniboxCornerRadius] - .CGPath; - [fake_omnibox.layer addSublayer:fake_omnibox_border]; - - // Add the empty grey field inside. - CAShapeLayer* fake_omnibox_field = [CAShapeLayer layer]; - fake_omnibox_field.fillColor = [UIColor colorNamed:kGrey100Color].CGColor; - if (base::i18n::IsRTL()) { - fake_omnibox_field.frame = - CGRectMake(kFakeOmniboxWidth - kFakeOmniboxFieldLeadingInset - - kFakeOmniboxFieldWidth, - (kFakeOmniboxHeight - kFakeOmniboxFieldHeight) / 2., - kFakeOmniboxFieldWidth, kFakeOmniboxFieldHeight); - } else { - fake_omnibox_field.frame = - CGRectMake(kFakeOmniboxFieldLeadingInset, - (kFakeOmniboxHeight - kFakeOmniboxFieldHeight) / 2., - kFakeOmniboxFieldWidth, kFakeOmniboxFieldHeight); - } - fake_omnibox_field.path = - [UIBezierPath - bezierPathWithRoundedRect:CGRectMake(0, 0, kFakeOmniboxFieldWidth, - kFakeOmniboxFieldHeight) - cornerRadius:kFakeOmniboxFieldCornerRadius] - .CGPath; - [fake_omnibox.layer addSublayer:fake_omnibox_field]; - - // Add the search icon to the side. - UIImageView* searchSymbolIcon = [[UIImageView alloc] - initWithImage:DefaultSymbolWithPointSize(kMagnifyingglassSymbol, - kMagnifyingGlassSize)]; - - [fake_omnibox addSubview:searchSymbolIcon]; - if (base::i18n::IsRTL()) { - searchSymbolIcon.frame = - CGRectMake(kFakeOmniboxWidth - kMagnifyingGlassLeadingInset - - kMagnifyingGlassFrameSize, - kMagnifyingGlassTopInset, kMagnifyingGlassFrameSize, - kMagnifyingGlassFrameSize); - } else { - searchSymbolIcon.frame = - CGRectMake(kMagnifyingGlassLeadingInset, kMagnifyingGlassTopInset, - kMagnifyingGlassFrameSize, kMagnifyingGlassFrameSize); - } - fake_omnibox.translatesAutoresizingMaskIntoConstraints = NO; - return fake_omnibox; -} - -UIView* CreateFakeOmnibox(UIImageView* icon, NSString* searchEngineName) { - UIView* fake_omnibox = [[UIView alloc] init]; - - fake_omnibox.bounds = CGRectMake(0, 0, kFakeOmniboxWidth, kFakeOmniboxHeight); - - // Add the shadow around the omnibox. - CAShapeLayer* fake_omnibox_shadow = [CAShapeLayer layer]; - fake_omnibox_shadow.frame = fake_omnibox.bounds; - fake_omnibox_shadow.shadowColor = [UIColor colorNamed:kGrey300Color].CGColor; - fake_omnibox_shadow.shadowOpacity = 1; - fake_omnibox_shadow.shadowRadius = 16; - fake_omnibox_shadow.shadowOffset = CGSizeMake(0, 4); - fake_omnibox_shadow.shadowPath = - [UIBezierPath bezierPathWithRoundedRect:fake_omnibox.bounds - cornerRadius:kFakeOmniboxCornerRadius] - .CGPath; - [fake_omnibox.layer addSublayer:fake_omnibox_shadow]; - - // Create the pill-shaped field. - CAShapeLayer* fake_omnibox_pill = [CAShapeLayer layer]; - fake_omnibox_pill.fillColor = [UIColor colorNamed:kBackgroundColor].CGColor; - fake_omnibox_pill.frame = fake_omnibox.bounds; - fake_omnibox_pill.path = - [UIBezierPath bezierPathWithRoundedRect:fake_omnibox.bounds - cornerRadius:kFakeOmniboxCornerRadius] - .CGPath; - [fake_omnibox.layer addSublayer:fake_omnibox_pill]; - // Add the search engine Label. - UILabel* searchWithLabel = [[UILabel alloc] init]; - if (base::i18n::IsRTL()) { - searchWithLabel.frame = - CGRectMake(0., 0., kFakeOmniboxWidth - kFakeOmniboxFieldLeadingInset, - kFakeOmniboxHeight); - } else { - searchWithLabel.frame = CGRectMake( - kFakeOmniboxFieldLeadingInset, 0., - kFakeOmniboxWidth - kFakeOmniboxFieldLeadingInset, kFakeOmniboxHeight); - } - - searchWithLabel.text = - l10n_util::GetNSStringF(IDS_SEARCH_ENGINE_CHOICE_FAKE_OMNIBOX_TEXT, - base::SysNSStringToUTF16(searchEngineName)); - searchWithLabel.font = [UIFont systemFontOfSize:13]; - searchWithLabel.numberOfLines = 0; - [fake_omnibox addSubview:searchWithLabel]; - - // Add the favicon on the side. - icon.layer.cornerRadius = kFaviconImageViewRadius; - icon.clipsToBounds = YES; - [fake_omnibox addSubview:icon]; - if (base::i18n::IsRTL()) { - icon.frame = CGRectMake(kFakeOmniboxWidth - kMagnifyingGlassLeadingInset - - kMagnifyingGlassFrameSize, - kMagnifyingGlassTopInset, kMagnifyingGlassFrameSize, - kMagnifyingGlassFrameSize); - } else { - icon.frame = - CGRectMake(kMagnifyingGlassLeadingInset, kMagnifyingGlassTopInset, - kMagnifyingGlassFrameSize, kMagnifyingGlassFrameSize); - } - - fake_omnibox.translatesAutoresizingMaskIntoConstraints = NO; - return fake_omnibox; -} - UIFont* GetTitleFontWithTraitCollection(UITraitCollection* trait_collection) { BOOL dynamic_type_enabled = UIContentSizeCategoryIsAccessibilityCategory( trait_collection.preferredContentSizeCategory);
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h index 17723b0..0609c19 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.h
@@ -8,6 +8,7 @@ #import <UIKit/UIKit.h> #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_consumer.h" +#import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_consumer.h" @class SearchEngineChoiceTableViewController; @@ -23,7 +24,9 @@ // A base view controller for showing a choice screen. @interface SearchEngineChoiceViewController - : UIViewController <SearchEngineChoiceConsumer, UITextViewDelegate> + : UIViewController <SearchEngineChoiceConsumer, + SearchEngineChoiceFaviconUpdateConsumer, + UITextViewDelegate> // Delegate for all the user actions. @property(nonatomic, weak) id<SearchEngineChoiceActionDelegate> actionDelegate;
diff --git a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm index 9c97361..6b08d7e 100644 --- a/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm +++ b/ios/chrome/browser/ui/search_engine_choice/search_engine_choice_view_controller.mm
@@ -9,7 +9,9 @@ #import "components/strings/grit/components_strings.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" +#import "ios/chrome/browser/ui/search_engine_choice/fake_omnibox/fake_omnibox_view.h" #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_constants.h" +#import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/cells/snippet_search_engine_item.h" #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_table/search_engine_choice_table_view_controller.h" #import "ios/chrome/browser/ui/search_engine_choice/search_engine_choice_ui_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -68,9 +70,9 @@ UIStackView* _topZoneStackView; // A fake empty omnibox illustration, shown before the user has made any // selection. - UIView* _fakeEmptyOmniboxView; + FakeOmniboxView* _fakeEmptyOmniboxView; // A fake empty omnibox illustration, with the user's selection. - UIView* _fakeOmniboxView; + FakeOmniboxView* _fakeOmniboxView; // The chrome logo. UIImageView* _logoView; // The view title. @@ -150,12 +152,14 @@ _titleLabel.accessibilityTraits |= UIAccessibilityTraitHeader; _titleLabel.translatesAutoresizingMaskIntoConstraints = NO; - _fakeEmptyOmniboxView = CreateFakeEmptyOmnibox(); + _fakeEmptyOmniboxView = + [[FakeOmniboxView alloc] initWithSearchEngineName:nil faviconImage:nil]; [_topZoneStackView addArrangedSubview:_fakeEmptyOmniboxView]; if (self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact) { _fakeEmptyOmniboxView.hidden = YES; } + _fakeEmptyOmniboxView.translatesAutoresizingMaskIntoConstraints = NO; NSMutableAttributedString* subtitleText = [[NSMutableAttributedString alloc] initWithString:[l10n_util::GetNSString( @@ -297,15 +301,15 @@ self.traitCollection.userInterfaceStyle) { // Re-draw the fake empty omnibox in order to take color updates into // account. - _fakeEmptyOmniboxView = CreateFakeEmptyOmnibox(); + _fakeEmptyOmniboxView = [[FakeOmniboxView alloc] init]; [_fakeEmptyOmniboxView layoutIfNeeded]; } } #pragma mark - SearchEngineChoiceConsumer -- (void)updateFakeOmniboxWithFavicon:(UIImageView*)icon - SearchEngineName:(NSString*)name { +- (void)updateFakeOmniboxWithFaviconImage:(UIImage*)icon + searchEngineName:(NSString*)name { CGRect startingFrame = _fakeEmptyOmniboxView.frame; startingFrame.origin.y += kTravelDistance; CGRect endFrame = _fakeEmptyOmniboxView.frame; @@ -332,7 +336,9 @@ return; } - UIView* newFakeOmniboxView = CreateFakeOmnibox(icon, name); + FakeOmniboxView* newFakeOmniboxView = + [[FakeOmniboxView alloc] initWithSearchEngineName:name faviconImage:icon]; + newFakeOmniboxView.translatesAutoresizingMaskIntoConstraints = NO; [_topZoneStackView addSubview:newFakeOmniboxView]; newFakeOmniboxView.frame = startingFrame; newFakeOmniboxView.transform = CGAffineTransformMakeRotation(kRotationAngle); @@ -351,6 +357,12 @@ }]; } +#pragma mark - SearchEngineChoiceFaviconUpdateConsumer + +- (void)updateFaviconImageForItem:(SnippetSearchEngineItem*)item { + _fakeOmniboxView.faviconImage = item.faviconImage; +} + #pragma mark - Private - (void)primaryButtonAction {
diff --git a/ios/chrome/browser/ui/settings/language/BUILD.gn b/ios/chrome/browser/ui/settings/language/BUILD.gn index e0bd70f5..3f0b55b9 100644 --- a/ios/chrome/browser/ui/settings/language/BUILD.gn +++ b/ios/chrome/browser/ui/settings/language/BUILD.gn
@@ -44,7 +44,6 @@ "//components/translate/core/browser:translate_pref_names", "//ios/chrome/app/strings", "//ios/chrome/browser/net:crurl", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/list_model", "//ios/chrome/browser/shared/ui/table_view",
diff --git a/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm index 0d42a04..f5d21070 100644 --- a/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.mm
@@ -14,7 +14,6 @@ #import "components/prefs/pref_service.h" #import "components/translate/core/browser/translate_pref_names.h" #import "ios/chrome/browser/net/crurl.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/list_model/list_item+Controller.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_info_button_cell.h"
diff --git a/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_coordinator_unittest.mm b/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_coordinator_unittest.mm index d09eccaa..9a81ac6 100644 --- a/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/settings/password/password_sharing/sharing_status_coordinator_unittest.mm
@@ -6,7 +6,6 @@ #import "base/test/metrics/histogram_tester.h" #import "base/test/task_environment.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h"
diff --git a/ios/chrome/browser/ui/settings/privacy/BUILD.gn b/ios/chrome/browser/ui/settings/privacy/BUILD.gn index c3a02212..61c95d15 100644 --- a/ios/chrome/browser/ui/settings/privacy/BUILD.gn +++ b/ios/chrome/browser/ui/settings/privacy/BUILD.gn
@@ -145,7 +145,6 @@ "//ios/chrome/browser/browsing_data/model:feature_flags", "//ios/chrome/browser/feature_engagement/model", "//ios/chrome/browser/policy:policy_util", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser/test:test_support", "//ios/chrome/browser/shared/model/browser_state:test_support", "//ios/chrome/browser/shared/model/prefs",
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/BUILD.gn b/ios/chrome/browser/ui/settings/privacy/privacy_guide/BUILD.gn index 5c629e6..91a37cab 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_guide/BUILD.gn +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/BUILD.gn
@@ -7,10 +7,13 @@ "privacy_guide_main_coordinator.h", "privacy_guide_main_coordinator.mm", "privacy_guide_main_coordinator_delegate.h", + "privacy_guide_url_usage_coordinator.h", + "privacy_guide_url_usage_coordinator.mm", "privacy_guide_welcome_coordinator.h", "privacy_guide_welcome_coordinator.mm", ] deps = [ + ":privacy_guide_constants", ":privacy_guide_ui", "//base", "//ios/chrome/browser/shared/coordinator/chrome_coordinator",
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.h b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.h index a42ee4f..fefa2fd 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.h +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.h
@@ -7,7 +7,16 @@ #import <Foundation/Foundation.h> +// The possible step types that can be displayed as part of the Privacy Guide. +enum PrivacyGuideStepType : NSInteger { + kPrivacyGuideWelcomeStep, + kPrivacyGuideURLUsageStep, +}; + // The accessibility identifier for the Welcome step view. -extern NSString* const kPrivacyGuideWelcomeViewId; +extern NSString* const kPrivacyGuideWelcomeViewID; + +// The accessibility identifier for the URL usage step view. +extern NSString* const kPrivacyGuideURLUsageViewID; #endif // IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_PRIVACY_GUIDE_PRIVACY_GUIDE_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.mm b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.mm index 69ec681a..048c597 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.mm
@@ -4,4 +4,7 @@ #import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.h" -NSString* const kPrivacyGuideWelcomeViewId = @"kPrivacyGuideWelcomeViewId"; +#import <Foundation/Foundation.h> + +NSString* const kPrivacyGuideWelcomeViewID = @"kPrivacyGuideWelcomeViewID"; +NSString* const kPrivacyGuideURLUsageViewID = @"kPrivacyGuideURLUsageViewID";
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_egtest.mm b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_egtest.mm index 789ae58b..7519717a 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_egtest.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_egtest.mm
@@ -12,6 +12,7 @@ #import "ios/testing/earl_grey/earl_grey_test.h" using chrome_test_util::ButtonWithAccessibilityLabelId; +using chrome_test_util::PromoStylePrimaryActionButtonMatcher; using chrome_test_util::PromoStyleSecondaryActionButtonMatcher; using chrome_test_util::SettingsMenuPrivacyButton; @@ -28,7 +29,7 @@ return config; } -// Test that the Privacy Guide can be dismissed via the 'Cancel' button. +// Tests that the Privacy Guide can be dismissed via the 'Cancel' button. - (void)testDismissPrivacyGuideWithCancelButton { [self openPrivacyGuide]; @@ -38,25 +39,39 @@ // Verify that the Privacy Guide is dismissed. [[EarlGrey - selectElementWithMatcher:grey_accessibilityID(kPrivacyGuideWelcomeViewId)] + selectElementWithMatcher:grey_accessibilityID(kPrivacyGuideWelcomeViewID)] assertWithMatcher:grey_nil()]; } -// Test that the Privacy Guide can be dismissed by swipping down. +// Tests that the Privacy Guide can be dismissed by swipping down. - (void)testDismissPrivacyGuideWithSwipeDown { [self openPrivacyGuide]; // Dismiss the Privacy Guide by swipping down. [[EarlGrey - selectElementWithMatcher:grey_accessibilityID(kPrivacyGuideWelcomeViewId)] + selectElementWithMatcher:grey_accessibilityID(kPrivacyGuideWelcomeViewID)] performAction:grey_swipeFastInDirection(kGREYDirectionDown)]; // Verify that the Privacy Guide is dismissed. [[EarlGrey - selectElementWithMatcher:grey_accessibilityID(kPrivacyGuideWelcomeViewId)] + selectElementWithMatcher:grey_accessibilityID(kPrivacyGuideWelcomeViewID)] assertWithMatcher:grey_nil()]; } +// Tests that the 'Let's go' button transitions to the next step. +- (void)testLetsGoButton { + [self openPrivacyGuide]; + + // Tap the 'Let's go' button. + [[EarlGrey selectElementWithMatcher:PromoStylePrimaryActionButtonMatcher()] + performAction:grey_tap()]; + + // Verify that the next step is displayed. + [[EarlGrey selectElementWithMatcher:grey_accessibilityID( + kPrivacyGuideURLUsageViewID)] + assertWithMatcher:grey_notNil()]; +} + #pragma mark - Helpers - (void)openPrivacyGuide {
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_main_coordinator.mm b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_main_coordinator.mm index 042b8c63..51da31c 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_main_coordinator.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_main_coordinator.mm
@@ -4,6 +4,7 @@ #import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_main_coordinator.h" +#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import "base/check.h" @@ -11,7 +12,9 @@ #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_commands.h" +#import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.h" #import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_main_coordinator_delegate.h" +#import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.h" #import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_welcome_coordinator.h" @interface PrivacyGuideMainCoordinator () < @@ -21,6 +24,18 @@ @implementation PrivacyGuideMainCoordinator { UINavigationController* _navigationController; + NSArray<NSNumber*>* _steps; +} + +- (instancetype)initWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser { + self = [super initWithBaseViewController:viewController browser:browser]; + if (self) { + // TODO: Not all steps in the list can be displayed. This will be handled + // when optional steps are implemented. + _steps = @[ @(kPrivacyGuideWelcomeStep), @(kPrivacyGuideURLUsageStep) ]; + } + return self; } - (void)start { @@ -34,7 +49,7 @@ _navigationController.modalPresentationStyle = UIModalPresentationFormSheet; _navigationController.presentationController.delegate = self; - [self startWelcomeCoordinator]; + [self startNextCoordinator]; [self.baseViewController presentViewController:_navigationController animated:YES completion:nil]; @@ -55,7 +70,7 @@ #pragma mark - PrivacyGuideCommands - (void)showNextStep { - // TODO(crbug.com/1488447): Implement showing the next Privacy Guide step. + [self startNextCoordinator]; } - (void)dismissGuide { @@ -82,6 +97,35 @@ [self.childCoordinators addObject:coordinator]; } +// Initializes the URL usage step coordinator and starts it. +- (void)startURLUsageCoordinator { + PrivacyGuideURLUsageCoordinator* coordinator = + [[PrivacyGuideURLUsageCoordinator alloc] + initWithBaseNavigationController:_navigationController + browser:self.browser]; + [coordinator start]; + + [self.childCoordinators addObject:coordinator]; +} + +- (void)startNextCoordinator { + switch ([self nextStepType]) { + case kPrivacyGuideWelcomeStep: + [self startWelcomeCoordinator]; + break; + case kPrivacyGuideURLUsageStep: + [self startURLUsageCoordinator]; + break; + } +} + +- (PrivacyGuideStepType)nextStepType { + NSUInteger index = self.childCoordinators.count; + CHECK(index < _steps.count); + + return static_cast<PrivacyGuideStepType>([_steps[index] integerValue]); +} + // Stops all child coordinators and clears the child coordinator list. - (void)stopAndCleanupChildCoordinators { for (ChromeCoordinator* coordinator in self.childCoordinators) {
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.h b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.h new file mode 100644 index 0000000..c347d43 --- /dev/null +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.h
@@ -0,0 +1,26 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_PRIVACY_GUIDE_PRIVACY_GUIDE_URL_USAGE_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_PRIVACY_GUIDE_PRIVACY_GUIDE_URL_USAGE_COORDINATOR_H_ + +#import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h" + +// Coordinator for the URL usage step of the Privacy Guide. +@interface PrivacyGuideURLUsageCoordinator : ChromeCoordinator + +// Designated initializer. +// `navigationController`: navigation controller. +// `browser`: browser. +- (instancetype)initWithBaseNavigationController: + (UINavigationController*)navigationController + browser:(Browser*)browser + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser NS_UNAVAILABLE; + +@end + +#endif // IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_PRIVACY_GUIDE_PRIVACY_GUIDE_URL_USAGE_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.mm b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.mm new file mode 100644 index 0000000..2b91d6d --- /dev/null +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.mm
@@ -0,0 +1,46 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_url_usage_coordinator.h" + +#import <UIKit/UIKit.h> + +#import "base/check_op.h" +#import "ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_constants.h" + +@implementation PrivacyGuideURLUsageCoordinator { + // TODO(crbug.com/1509830): Implement URL usage view controller. + UIViewController* _viewController; +} + +@synthesize baseNavigationController = _baseNavigationController; + +- (instancetype)initWithBaseNavigationController: + (UINavigationController*)navigationController + browser:(Browser*)browser { + self = [super initWithBaseViewController:navigationController + browser:browser]; + + if (self) { + _baseNavigationController = navigationController; + } + return self; +} + +#pragma mark - ChromeCoordinator + +- (void)start { + _viewController = [[UIViewController alloc] init]; + _viewController.view.accessibilityIdentifier = kPrivacyGuideURLUsageViewID; + + CHECK(self.baseNavigationController); + [self.baseNavigationController pushViewController:_viewController + animated:YES]; +} + +- (void)stop { + _viewController = nil; +} + +@end
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_welcome_view_controller.mm b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_welcome_view_controller.mm index 65f6cbaf..eb4fd76 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_welcome_view_controller.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_guide/privacy_guide_welcome_view_controller.mm
@@ -20,7 +20,7 @@ #pragma mark - UIViewController - (void)viewDidLoad { - self.view.accessibilityIdentifier = kPrivacyGuideWelcomeViewId; + self.view.accessibilityIdentifier = kPrivacyGuideWelcomeViewID; self.bannerName = kWelcomeBannerName; self.bannerSize = BannerImageSizeType::kTall;
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm b/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm index 182ef57..96688597d 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm
@@ -16,7 +16,6 @@ #import "components/safe_browsing/core/common/safe_browsing_prefs.h" #import "ios/chrome/browser/policy/policy_util.h" #import "ios/chrome/browser/settings/model/sync/utils/sync_util.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/prefs/pref_backed_boolean.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/model/utils/observable_boolean.h"
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm index a59a8d4..76c8f500 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
@@ -29,7 +29,6 @@ #import "components/sync_preferences/testing_pref_service_syncable.h" #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" #import "ios/chrome/browser/policy/policy_util.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/shared/model/prefs/browser_prefs.h"
diff --git a/ios/chrome/browser/ui/settings/safety_check/BUILD.gn b/ios/chrome/browser/ui/settings/safety_check/BUILD.gn index d16d839..6a10be5 100644 --- a/ios/chrome/browser/ui/settings/safety_check/BUILD.gn +++ b/ios/chrome/browser/ui/settings/safety_check/BUILD.gn
@@ -126,7 +126,6 @@ "//components/sync_preferences:test_support", "//ios/chrome/app/strings", "//ios/chrome/browser/passwords/model", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser/test:test_support", "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/model/browser_state:test_support",
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm index fb7de6e..003147d 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
@@ -30,7 +30,6 @@ #import "ios/chrome/browser/passwords/model/password_check_observer_bridge.h" #import "ios/chrome/browser/passwords/model/password_checkup_utils.h" #import "ios/chrome/browser/passwords/model/password_store_observer_bridge.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/prefs/pref_backed_boolean.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/model/utils/observable_boolean.h"
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm index 1c31901..d9d552d 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm
@@ -35,7 +35,6 @@ #import "ios/chrome/browser/passwords/model/ios_chrome_password_check_manager_factory.h" #import "ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.h" #import "ios/chrome/browser/passwords/model/password_check_observer_bridge.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h"
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/base_grid_mediator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/base_grid_mediator.mm index ba475ca..3fdf1a6 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/base_grid_mediator.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/base_grid_mediator.mm
@@ -629,6 +629,8 @@ WebStateSearchCriteria{.identifier = itemID, .pinned_state = PinnedState::kNonPinned}); if (index != WebStateList::kInvalidIndex) { + _selectedEditingItemIDs.erase(itemID); + _selectedSharableEditingItemIDs.erase(itemID); webStateList->CloseWebStateAt(index, WebStateList::CLOSE_USER_ACTION); } }
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/BUILD.gn index 81769f4..bb9ac7ad 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/BUILD.gn +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/BUILD.gn
@@ -11,6 +11,7 @@ ] deps = [ ":tab_group_consumer", + ":tab_group_mutator", ":tab_groups_ui", "//base", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", @@ -30,6 +31,7 @@ ] deps = [ ":tab_group_consumer", + ":tab_group_mutator", "//base", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/ui/tab_switcher/tab_grid/grid:grid_ui_constants", @@ -42,6 +44,10 @@ sources = [ "tab_group_consumer.h" ] } +source_set("tab_group_mutator") { + sources = [ "tab_group_mutator.h" ] +} + source_set("unit_tests") { testonly = true sources = [ "tab_group_coordinator_unittest.mm" ]
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_coordinator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_coordinator.mm index 984839d..5acbca6 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_coordinator.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_coordinator.mm
@@ -33,6 +33,7 @@ id<TabGroupsCommands> handler = HandlerForProtocol( self.browser->GetCommandDispatcher(), TabGroupsCommands); _viewController = [[TabGroupViewController alloc] initWithHandler:handler]; + _viewController.mutator = _mediator; _mediator = [[TabGroupMediator alloc] initWithWebStateList:self.browser->GetWebStateList()
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.h b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.h index 32111bb..dcb2086 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.h
@@ -7,11 +7,13 @@ #import <Foundation/Foundation.h> +#import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mutator.h" + @protocol TabGroupConsumer; class WebStateList; // Tab group mediator in charge to handle model update for one group. -@interface TabGroupMediator : NSObject +@interface TabGroupMediator : NSObject <TabGroupMutator> // TODO(crbug.com/1501837): Add a tab group ID when the ID will be available. - (instancetype)initWithWebStateList:(WebStateList*)webStateList
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.mm index b552881..de05fe9e 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mediator.mm
@@ -36,4 +36,12 @@ return self; } +#pragma mark - TabGroupMutator + +- (BOOL)addNewItemInGroup { + // TODO(crbug.com/1501837): Call the appropriate function. Ensure to add new + // tab only if policies allows it. + return NO; +} + @end
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mutator.h b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mutator.h new file mode 100644 index 0000000..ce76915 --- /dev/null +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mutator.h
@@ -0,0 +1,16 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_GRID_GRID_TAB_GROUPS_TAB_GROUP_MUTATOR_H_ +#define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_GRID_GRID_TAB_GROUPS_TAB_GROUP_MUTATOR_H_ + +@protocol TabGroupMutator + +// Tells the receiver to insert a new item at the end of the group list. Return +// YES if it inserted an element, NO otherwise. +- (BOOL)addNewItemInGroup; + +@end + +#endif // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_GRID_GRID_TAB_GROUPS_TAB_GROUP_MUTATOR_H_
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.h b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.h index 186632e5..8aa5aaa 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.h
@@ -10,10 +10,13 @@ #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_consumer.h" @protocol TabGroupsCommands; +@protocol TabGroupMutator; // Tab group view controller displaying one group. @interface TabGroupViewController : UIViewController <TabGroupConsumer> +@property(nonatomic, weak) id<TabGroupMutator> mutator; + // Initiates a TabGroupViewController with `handler` to handle user action. - (instancetype)initWithHandler:(id<TabGroupsCommands>)handler;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.mm index 10b6d97..863acd6 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_view_controller.mm
@@ -7,6 +7,7 @@ #import "base/check.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_constants.h" +#import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_group_mutator.h" #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/tab_groups/tab_groups_commands.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" @@ -18,6 +19,7 @@ constexpr CGFloat kLeftMargin = 9; constexpr CGFloat kFullTitleTopMargin = 24; constexpr CGFloat kDotTitleSeparationMargin = 8; +constexpr CGFloat kBackgroundAlpha = 0.6; } // namespace @interface TabGroupViewController () <UINavigationBarDelegate> @@ -51,7 +53,8 @@ - (void)viewDidLoad { [super viewDidLoad]; if (!UIAccessibilityIsReduceTransparencyEnabled()) { - self.view.backgroundColor = [UIColor clearColor]; + self.view.backgroundColor = [[UIColor colorNamed:kGrey900Color] + colorWithAlphaComponent:kBackgroundAlpha]; UIBlurEffect* blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; UIVisualEffectView* blurEffectView = @@ -68,8 +71,9 @@ } - (void)didTapPlusButton { - // TODO(crbug.com/1501837): Add the creation of a new tab in the current - // group. + // TODO(crbug.com/1501837): Take into account the returned bool value of + // `addNewItemInGroup`. + [self.mutator addNewItemInGroup]; } #pragma mark - UINavigationBarDelegate
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/BUILD.gn index 6c667ba9..8f35bdc5 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/BUILD.gn +++ b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/BUILD.gn
@@ -7,13 +7,16 @@ swift_source_set("swift") { bridge_header = "tab_strip_ui_swift_bridge.h" sources = [ + "tab_strip_constants.swift", "tab_strip_consumer.swift", "tab_strip_layout.swift", + "tab_strip_new_tab_button.swift", "tab_strip_view_controller.swift", "tab_strip_view_controller_delegate.swift", ] deps = [ ":ui", + "//ios/chrome/browser/shared/ui/symbols", "//ios/chrome/browser/ui/menu", "//ios/chrome/browser/ui/tab_switcher", ]
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_constants.swift b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_constants.swift new file mode 100644 index 0000000..9861a054 --- /dev/null +++ b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_constants.swift
@@ -0,0 +1,16 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Foundation + +/// Struct that contains constants used in the Tab Strip UI. +struct TabStripConstants { + + /// New tab button constants. + struct NewTabButton { + static let contentInset: CGFloat = 6 + static let symbolPointSize: CGFloat = 18 + } + +}
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_new_tab_button.swift b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_new_tab_button.swift new file mode 100644 index 0000000..e86633e --- /dev/null +++ b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_new_tab_button.swift
@@ -0,0 +1,34 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import UIKit + +/// An `UIButton` displayed in the tab strip that opens a new tab. +class TabStripNewTabButton: UIButton { + + override init(frame: CGRect) { + super.init(frame: frame) + + configureButton() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private + + /// Configures the `UIButton`. + private func configureButton() { + var config = UIButton.Configuration.borderless() + config.imagePadding = TabStripConstants.NewTabButton.contentInset + configuration = config + + let closeSymbol: UIImage = CustomSymbolWithPointSize( + kPlusCircleFillSymbol, TabStripConstants.NewTabButton.symbolPointSize) + setImage(closeSymbol, for: .normal) + tintColor = UIColor.orange + translatesAutoresizingMaskIntoConstraints = false + } +}
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_ui_swift_bridge.h b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_ui_swift_bridge.h index ec75799e..d7b34f6 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_ui_swift_bridge.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_ui_swift_bridge.h
@@ -5,6 +5,7 @@ #ifndef IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_STRIP_UI_TAB_STRIP_UI_SWIFT_BRIDGE_H_ #define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_STRIP_UI_TAB_STRIP_UI_SWIFT_BRIDGE_H_ +#import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/ui/menu/action_factory.h" #import "ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_cell.h" #import "ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_mutator.h"
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_view_controller.swift b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_view_controller.swift index 0664625..2dbdac2c 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_view_controller.swift +++ b/ios/chrome/browser/ui/tab_switcher/tab_strip/ui/tab_strip_view_controller.swift
@@ -6,8 +6,8 @@ /// View Controller displaying the TabStrip. @objcMembers -class TabStripViewController: UIViewController, TabStripCellDelegate, TabStripConsumer, - UICollectionViewDelegate +class TabStripViewController: UIViewController, TabStripCellDelegate, + TabStripConsumer, UICollectionViewDelegate { // The enum used by the data source to manage the sections. @@ -22,6 +22,9 @@ private var diffableDataSource: UICollectionViewDiffableDataSource<Section, TabSwitcherItem>? private var tabCellRegistration: UICollectionView.CellRegistration<TabStripCell, TabSwitcherItem>? + // The New tab button. + private let newTabButton: TabStripNewTabButton = TabStripNewTabButton(frame: .zero) + weak var mutator: TabStripMutator? weak var delegate: TabStripViewControllerDelegate? @@ -51,12 +54,20 @@ super.viewDidLoad() collectionView.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(collectionView) + self.view.addSubview(newTabButton) + newTabButton.addTarget(self, action: #selector(newTabButtonTapped), for: .touchUpInside) + NSLayoutConstraint.activate([ self.view.leadingAnchor.constraint(equalTo: collectionView.leadingAnchor), - self.view.trailingAnchor.constraint(equalTo: collectionView.trailingAnchor), self.view.topAnchor.constraint(equalTo: collectionView.topAnchor), self.view.bottomAnchor.constraint(equalTo: collectionView.bottomAnchor), + self.view.trailingAnchor.constraint(equalTo: newTabButton.trailingAnchor), + + newTabButton.heightAnchor.constraint(equalTo: collectionView.heightAnchor), + newTabButton.widthAnchor.constraint(equalTo: newTabButton.heightAnchor), + newTabButton.leadingAnchor.constraint(equalTo: collectionView.trailingAnchor), ]) + } // MARK: - TabStripConsumer @@ -239,4 +250,9 @@ return UIMenu(children: [share, closeActions]) } + /// Called when the `newTabButton` has been tapped. + @objc func newTabButtonTapped() { + mutator?.addNewItem() + } + }
diff --git a/ios/chrome/browser/ui/whats_new/BUILD.gn b/ios/chrome/browser/ui/whats_new/BUILD.gn index 6821c40..2035652 100644 --- a/ios/chrome/browser/ui/whats_new/BUILD.gn +++ b/ios/chrome/browser/ui/whats_new/BUILD.gn
@@ -70,7 +70,6 @@ "//ios/chrome/browser/promos_manager", "//ios/chrome/browser/promos_manager:constants", "//ios/chrome/browser/promos_manager:features", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/ui/whats_new/data_source:whats_new_item", ]
diff --git a/ios/chrome/browser/ui/whats_new/whats_new_util.mm b/ios/chrome/browser/ui/whats_new/whats_new_util.mm index a2e11ad..aecd3e2 100644 --- a/ios/chrome/browser/ui/whats_new/whats_new_util.mm +++ b/ios/chrome/browser/ui/whats_new/whats_new_util.mm
@@ -9,7 +9,6 @@ #import "ios/chrome/browser/promos_manager/constants.h" #import "ios/chrome/browser/promos_manager/features.h" #import "ios/chrome/browser/promos_manager/promos_manager.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/ui/whats_new/constants.h"
diff --git a/ios/chrome/browser/unified_consent/model/BUILD.gn b/ios/chrome/browser/unified_consent/model/BUILD.gn index 5cd1a0d..0b91f9fe 100644 --- a/ios/chrome/browser/unified_consent/model/BUILD.gn +++ b/ios/chrome/browser/unified_consent/model/BUILD.gn
@@ -14,7 +14,6 @@ "//components/sync", "//components/sync_preferences", "//components/unified_consent", - "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser_state", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/signin/model",
diff --git a/ios/chrome/browser/unified_consent/model/unified_consent_service_factory.mm b/ios/chrome/browser/unified_consent/model/unified_consent_service_factory.mm index 8b675b1..06bede7 100644 --- a/ios/chrome/browser/unified_consent/model/unified_consent_service_factory.mm +++ b/ios/chrome/browser/unified_consent/model/unified_consent_service_factory.mm
@@ -13,7 +13,6 @@ #import "components/sync_preferences/pref_service_syncable.h" #import "components/unified_consent/unified_consent_metrics.h" #import "components/unified_consent/unified_consent_service.h" -#import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h"
diff --git a/ios/chrome/browser/widget_kit/model/widget_metrics_util.h b/ios/chrome/browser/widget_kit/model/widget_metrics_util.h index 339f11fd..25e990b 100644 --- a/ios/chrome/browser/widget_kit/model/widget_metrics_util.h +++ b/ios/chrome/browser/widget_kit/model/widget_metrics_util.h
@@ -9,7 +9,7 @@ @interface WidgetMetricsUtil : NSObject -+ (void)logInstalledWidgets API_AVAILABLE(ios(14)); ++ (void)logInstalledWidgets; @end
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb index d42c7849..1801e29 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sw.xtb
@@ -50,7 +50,7 @@ <translation id="8332511935157148552">Hakuna Manenosiri Yaliyopatikana</translation> <translation id="8486024683491936104">Ungependa Kubadilisha Nenosiri?</translation> <translation id="8503813439785031346">Jina la mtumiaji</translation> -<translation id="8518521100965196752">Ili utumie manenosiri, ni lazima kwanza uweke nambari ya siri kwenye kifaa chako.</translation> +<translation id="8518521100965196752">Ili utumie manenosiri, ni lazima kwanza uweke namba ya siri kwenye kifaa chako.</translation> <translation id="8730621377337864115">Nimemaliza</translation> <translation id="8877181643142698531">URL</translation> <translation id="9069288651897538648"><ph name="URL" /></translation>
diff --git a/ios/chrome/test/providers/BUILD.gn b/ios/chrome/test/providers/BUILD.gn index 164b6736..b9a4630 100644 --- a/ios/chrome/test/providers/BUILD.gn +++ b/ios/chrome/test/providers/BUILD.gn
@@ -11,6 +11,7 @@ "//ios/chrome/test/providers/branded_images", "//ios/chrome/test/providers/context_menu", "//ios/chrome/test/providers/discover_feed", + "//ios/chrome/test/providers/drive", "//ios/chrome/test/providers/follow", "//ios/chrome/test/providers/font", "//ios/chrome/test/providers/fullscreen",
diff --git a/ios/chrome/test/providers/drive/BUILD.gn b/ios/chrome/test/providers/drive/BUILD.gn new file mode 100644 index 0000000..b6d367f7 --- /dev/null +++ b/ios/chrome/test/providers/drive/BUILD.gn
@@ -0,0 +1,17 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("drive") { + testonly = true + sources = [ + "test_drive.mm", + "test_drive_service.h", + "test_drive_service.mm", + ] + deps = [ + "//base", + "//ios/chrome/browser/drive/model:drive_service", + "//ios/public/provider/chrome/browser/drive:drive_api", + ] +}
diff --git a/ios/chrome/test/providers/drive/test_drive.mm b/ios/chrome/test/providers/drive/test_drive.mm new file mode 100644 index 0000000..1de8f93 --- /dev/null +++ b/ios/chrome/test/providers/drive/test_drive.mm
@@ -0,0 +1,16 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/public/provider/chrome/browser/drive/drive_api.h" + +#import "ios/chrome/test/providers/drive/test_drive_service.h" + +namespace ios::provider { + +std::unique_ptr<drive::DriveService> CreateDriveService( + const drive::DriveServiceConfiguration& configuration) { + return std::make_unique<drive::TestDriveService>(); +} + +} // namespace ios::provider
diff --git a/ios/chrome/test/providers/drive/test_drive_service.h b/ios/chrome/test/providers/drive/test_drive_service.h new file mode 100644 index 0000000..2b4dd41d --- /dev/null +++ b/ios/chrome/test/providers/drive/test_drive_service.h
@@ -0,0 +1,23 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_TEST_PROVIDERS_DRIVE_TEST_DRIVE_SERVICE_H_ +#define IOS_CHROME_TEST_PROVIDERS_DRIVE_TEST_DRIVE_SERVICE_H_ + +#import "ios/chrome/browser/drive/model/drive_service.h" + +namespace drive { + +class TestDriveService final : public DriveService { + public: + TestDriveService(); + ~TestDriveService() final; + + // DriveService implementation + bool IsSupported() const final; +}; + +} // namespace drive + +#endif // IOS_CHROME_TEST_PROVIDERS_DRIVE_TEST_DRIVE_SERVICE_H_
diff --git a/ios/chrome/test/providers/drive/test_drive_service.mm b/ios/chrome/test/providers/drive/test_drive_service.mm new file mode 100644 index 0000000..818bd5b4 --- /dev/null +++ b/ios/chrome/test/providers/drive/test_drive_service.mm
@@ -0,0 +1,18 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/test/providers/drive/test_drive_service.h" + +namespace drive { + +TestDriveService::TestDriveService() = default; +TestDriveService::~TestDriveService() = default; + +#pragma mark - DriveService + +bool TestDriveService::IsSupported() const { + return true; +} + +} // namespace drive
diff --git a/ios/public/provider/chrome/browser/BUILD.gn b/ios/public/provider/chrome/browser/BUILD.gn index 9f47f12..4df90e4 100644 --- a/ios/public/provider/chrome/browser/BUILD.gn +++ b/ios/public/provider/chrome/browser/BUILD.gn
@@ -12,6 +12,7 @@ "//ios/public/provider/chrome/browser/branded_images:branded_images_api", "//ios/public/provider/chrome/browser/context_menu:context_menu_api", "//ios/public/provider/chrome/browser/discover_feed:discover_feed_api", + "//ios/public/provider/chrome/browser/drive:drive_api", "//ios/public/provider/chrome/browser/font:font_api", "//ios/public/provider/chrome/browser/fullscreen:fullscreen_api", "//ios/public/provider/chrome/browser/keyboard:keyboard_api",
diff --git a/ios/public/provider/chrome/browser/drive/BUILD.gn b/ios/public/provider/chrome/browser/drive/BUILD.gn new file mode 100644 index 0000000..99cc372 --- /dev/null +++ b/ios/public/provider/chrome/browser/drive/BUILD.gn
@@ -0,0 +1,8 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("drive_api") { + sources = [ "drive_api.h" ] + public_deps = [ "//ios/chrome/browser/drive/model:drive_service" ] +}
diff --git a/ios/public/provider/chrome/browser/drive/drive_api.h b/ios/public/provider/chrome/browser/drive/drive_api.h new file mode 100644 index 0000000..2ba9025 --- /dev/null +++ b/ios/public/provider/chrome/browser/drive/drive_api.h
@@ -0,0 +1,23 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_DRIVE_DRIVE_API_H_ +#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_DRIVE_DRIVE_API_H_ + +#import <memory> + +namespace drive { +class DriveService; +struct DriveServiceConfiguration; +} // namespace drive + +namespace ios::provider { + +// Creates a new instance of DriveService. +std::unique_ptr<drive::DriveService> CreateDriveService( + const drive::DriveServiceConfiguration& configuration); + +} // namespace ios::provider + +#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_DRIVE_DRIVE_API_H_
diff --git a/ios_internal b/ios_internal index 53bb5db..d7b6b14 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit 53bb5db494be728395d42498edc5e395652b20f9 +Subproject commit d7b6b146f40ad1cfadbe95a3bf24e7efe3d9565e
diff --git a/media/capture/video/chromeos/mojom/BUILD.gn b/media/capture/video/chromeos/mojom/BUILD.gn index 0583f3ad..3526a691 100644 --- a/media/capture/video/chromeos/mojom/BUILD.gn +++ b/media/capture/video/chromeos/mojom/BUILD.gn
@@ -23,7 +23,6 @@ # ChromeOS is still heavily reliant on legacy bindings. generate_legacy_js_bindings = true - use_typescript_sources = true } mojom("cros_camera") {
diff --git a/mojo/public/mojom/base/BUILD.gn b/mojo/public/mojom/base/BUILD.gn index b1920c1..be5a7c3 100644 --- a/mojo/public/mojom/base/BUILD.gn +++ b/mojo/public/mojom/base/BUILD.gn
@@ -58,7 +58,9 @@ # Still widely used by Closure Compiler targets on ChromeOS, so generate # WebUI bindings in JavaScript for that platform. - use_typescript_sources = !is_chromeos_ash + if (is_chromeos_ash) { + generate_webui_js_bindings = true + } # Always generate legacy bindings since this target is used by Blink, fuzzers, # etc and not just by WebUI.
diff --git a/mojo/public/tools/bindings/mojom.gni b/mojo/public/tools/bindings/mojom.gni index 003e3ae..0cf19db 100644 --- a/mojo/public/tools/bindings/mojom.gni +++ b/mojo/public/tools/bindings/mojom.gni
@@ -338,6 +338,11 @@ # correct dependency order. Note that this only has an effect if # the |enable_mojom_closure_compile| global arg is set to |true| as well. # +# generate_webui_js_bindings (optional) +# Generate WebUI bindings in JavaScript rather than TypeScript. Defaults +# to false. ChromeOS only parameter. Use instead of +# |use_typescript_sources|, which is being removed. +# # use_typescript_sources (optional) # Generate WebUI bindings in TypeScript. Defaults to "true". When set to # "false", WebUI bindings will be generated in JavaScript instead. @@ -815,8 +820,10 @@ "--add-module-metadata", "webui_module_path=${invoker.webui_module_path}", ] - if (defined(invoker.use_typescript_sources) && - !invoker.use_typescript_sources) { + if ((defined(invoker.use_typescript_sources) && + !invoker.use_typescript_sources) || + (defined(invoker.generate_webui_js_bindings) && + invoker.generate_webui_js_bindings)) { args += [ "--add-module-metadata", "generate_webui_js=True", @@ -1846,16 +1853,21 @@ } } + if (defined(invoker.generate_webui_js_bindings)) { + assert(is_chromeos_ash, + "generate_webui_js_bindings can only be used on ChromeOS Ash") + assert(invoker.generate_webui_js_bindings, + "generate_webui_js_bindings should be set to true or removed") + } + use_typescript_for_target = defined(invoker.webui_module_path) && + !defined(invoker.generate_webui_js_bindings) && (!defined(invoker.use_typescript_sources) || (defined(invoker.use_typescript_sources) && invoker.use_typescript_sources)) - if (use_typescript_for_target && defined(invoker.use_typescript_sources)) { - not_needed(invoker, [ "use_typescript_sources" ]) - } - # Don't allow JavaScript WebUI bindings on non-ChromeOS platforms. + # TODO (rbpotter): Remove this check once use_typescript_sources is removed. if (!use_typescript_for_target && defined(invoker.webui_module_path)) { assert( is_chromeos_ash,
diff --git a/net/base/proxy_chain.h b/net/base/proxy_chain.h index b70f9959..32addde 100644 --- a/net/base/proxy_chain.h +++ b/net/base/proxy_chain.h
@@ -128,7 +128,9 @@ // Returns a `ProxyChain` for use by the IP Protection feature. This is used // for metrics collection and for special handling (for instance, IP // protection proxy chains will have an authorization header appended to the - // CONNECT requests sent to the proxy servers). + // CONNECT requests sent to the proxy servers, and requests sent through an + // IP Protection proxy chain will have an "IP-Protection: 1" header added to + // them). ProxyChain&& ForIpProtection() &&; bool is_for_ip_protection() const { return is_for_ip_protection_; }
diff --git a/net/filter/brotli_source_stream.cc b/net/filter/brotli_source_stream.cc index f690d4c..2c047c0 100644 --- a/net/filter/brotli_source_stream.cc +++ b/net/filter/brotli_source_stream.cc
@@ -6,7 +6,6 @@ #include "net/filter/brotli_source_stream.h" -#include "base/bit_cast.h" #include "base/check_op.h" #include "base/functional/bind.h" #include "base/memory/raw_ptr.h" @@ -108,9 +107,9 @@ if (decoding_status_ != DecodingStatus::DECODING_IN_PROGRESS) return base::unexpected(ERR_CONTENT_DECODING_FAILED); - const uint8_t* next_in = base::bit_cast<uint8_t*>(input_buffer->data()); + const uint8_t* next_in = reinterpret_cast<uint8_t*>(input_buffer->data()); size_t available_in = input_buffer_size; - uint8_t* next_out = base::bit_cast<uint8_t*>(output_buffer->data()); + uint8_t* next_out = reinterpret_cast<uint8_t*>(output_buffer->data()); size_t available_out = output_buffer_size; BrotliDecoderResult result =
diff --git a/net/filter/filter_source_stream_test_util.cc b/net/filter/filter_source_stream_test_util.cc index 2e18235..1c140827 100644 --- a/net/filter/filter_source_stream_test_util.cc +++ b/net/filter/filter_source_stream_test_util.cc
@@ -6,7 +6,6 @@ #include <cstring> -#include "base/bit_cast.h" #include "base/check_op.h" #include "third_party/zlib/zlib.h" @@ -52,9 +51,9 @@ dest_left -= sizeof(gzip_header); } - zlib_stream.next_in = base::bit_cast<Bytef*>(source); + zlib_stream.next_in = reinterpret_cast<Bytef*>(const_cast<char*>(source)); zlib_stream.avail_in = source_len; - zlib_stream.next_out = base::bit_cast<Bytef*>(dest); + zlib_stream.next_out = reinterpret_cast<Bytef*>(dest); zlib_stream.avail_out = dest_left; code = deflate(&zlib_stream, Z_FINISH);
diff --git a/net/filter/gzip_source_stream.cc b/net/filter/gzip_source_stream.cc index 82e6f2a..b1970be 100644 --- a/net/filter/gzip_source_stream.cc +++ b/net/filter/gzip_source_stream.cc
@@ -8,7 +8,6 @@ #include <memory> #include <utility> -#include "base/bit_cast.h" #include "base/check_op.h" #include "base/functional/bind.h" #include "base/memory/ptr_util.h" @@ -133,10 +132,10 @@ case STATE_SNIFFING_DEFLATE_HEADER: { DCHECK_EQ(TYPE_DEFLATE, type()); - zlib_stream_.get()->next_in = base::bit_cast<Bytef*>(input_data); + zlib_stream_.get()->next_in = reinterpret_cast<Bytef*>(input_data); zlib_stream_.get()->avail_in = input_data_size; zlib_stream_.get()->next_out = - base::bit_cast<Bytef*>(output_buffer->data()); + reinterpret_cast<Bytef*>(output_buffer->data()); zlib_stream_.get()->avail_out = output_buffer_size; int ret = inflate(zlib_stream_.get(), Z_NO_FLUSH); @@ -211,10 +210,10 @@ DCHECK(!state_compressed_entered); state_compressed_entered = true; - zlib_stream_.get()->next_in = base::bit_cast<Bytef*>(input_data); + zlib_stream_.get()->next_in = reinterpret_cast<Bytef*>(input_data); zlib_stream_.get()->avail_in = input_data_size; zlib_stream_.get()->next_out = - base::bit_cast<Bytef*>(output_buffer->data()); + reinterpret_cast<Bytef*>(output_buffer->data()); zlib_stream_.get()->avail_out = output_buffer_size; int ret = inflate(zlib_stream_.get(), Z_NO_FLUSH); @@ -256,9 +255,9 @@ char dummy_output[4]; inflateReset(zlib_stream_.get()); - zlib_stream_.get()->next_in = base::bit_cast<Bytef*>(&dummy_header[0]); + zlib_stream_.get()->next_in = reinterpret_cast<Bytef*>(&dummy_header[0]); zlib_stream_.get()->avail_in = sizeof(dummy_header); - zlib_stream_.get()->next_out = base::bit_cast<Bytef*>(&dummy_output[0]); + zlib_stream_.get()->next_out = reinterpret_cast<Bytef*>(&dummy_output[0]); zlib_stream_.get()->avail_out = sizeof(dummy_output); int ret = inflate(zlib_stream_.get(), Z_NO_FLUSH);
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index 455a08c..2d143ab 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc
@@ -1108,6 +1108,10 @@ auth_controllers_[HttpAuth::AUTH_SERVER]->AddAuthorizationHeader( &request_headers_); + if (proxy_info_.is_for_ip_protection() && !proxy_info_.is_direct()) { + request_headers_.SetHeader("IP-Protection", "1"); + } + request_headers_.MergeFrom(request_->extra_headers); if (modify_headers_callbacks_) {
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 15c96a4..ee51003 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc
@@ -27125,4 +27125,201 @@ EXPECT_EQ(response_info.proxy_chain, ip_protection_proxy_chain); } +class IpProtectionProxyDelegate : public ProxyDelegate { + public: + explicit IpProtectionProxyDelegate(const ProxyChain& proxy_chain) + : proxy_chain_(proxy_chain) {} + + // ProxyDelegate implementation: + void OnResolveProxy(const GURL& url, + const NetworkAnonymizationKey& network_anonymization_key, + const std::string& method, + const ProxyRetryInfoMap& proxy_retry_info, + ProxyInfo* result) override { + CHECK(proxy_chain_.IsValid()); + + ProxyList proxy_list; + proxy_list.AddProxyChain(proxy_chain_); + + if (!proxy_chain_.is_direct()) { + proxy_list.AddProxyChain(ProxyChain::Direct()); + } + + result->UseProxyList(proxy_list); + } + void OnFallback(const ProxyChain& bad_chain, int net_error) override {} + void OnBeforeTunnelRequest(const ProxyChain& proxy_chain, + size_t chain_index, + HttpRequestHeaders* extra_headers) override {} + Error OnTunnelHeadersReceived( + const ProxyChain& proxy_chain, + size_t chain_index, + const HttpResponseHeaders& response_headers) override { + return OK; + } + + private: + ProxyChain proxy_chain_; +}; + +// Test that for requests sent through an IP Protection proxy, the +// 'IP-Protection' header is sent as expected. +TEST_P(HttpNetworkTransactionTest, + HttpsNestedProxyIpProtectionRequestHeaderAdded) { + HttpRequestInfo request; + request.method = "GET"; + request.url = GURL("https://www.example.org/"); + request.traffic_annotation = + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + + const ProxyServer kProxyServer1{ProxyServer::SCHEME_HTTPS, + HostPortPair("proxy1.test", 70)}; + const ProxyServer kProxyServer2{ProxyServer::SCHEME_HTTPS, + HostPortPair("proxy2.test", 71)}; + ProxyChain kNestedProxyChain{{kProxyServer1, kProxyServer2}}; + kNestedProxyChain = std::move(kNestedProxyChain).ForIpProtection(); + + auto proxy_delegate = + std::make_unique<IpProtectionProxyDelegate>(kNestedProxyChain); + + session_deps_.proxy_resolution_service = + ConfiguredProxyResolutionService::CreateFixedForTest( + "https://not-used:70", TRAFFIC_ANNOTATION_FOR_TESTS); + session_deps_.proxy_resolution_service->SetProxyDelegate( + proxy_delegate.get()); + session_deps_.net_log = NetLog::Get(); + std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); + + MockWrite data_writes[] = { + MockWrite("CONNECT proxy2.test:71 HTTP/1.1\r\n" + "Host: proxy2.test:71\r\n" + "Proxy-Connection: keep-alive\r\n\r\n"), + MockWrite("CONNECT www.example.org:443 HTTP/1.1\r\n" + "Host: www.example.org:443\r\n" + "Proxy-Connection: keep-alive\r\n\r\n"), + MockWrite("GET / HTTP/1.1\r\n" + "Host: www.example.org\r\n" + "Connection: keep-alive\r\n" + "IP-Protection: 1\r\n\r\n"), + }; + + MockRead data_reads[] = { + MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), + MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), + MockRead("HTTP/1.1 200\r\n\r\n"), + MockRead(SYNCHRONOUS, OK), + }; + + StaticSocketDataProvider data(data_reads, data_writes); + session_deps_.socket_factory->AddSocketDataProvider(&data); + + SSLSocketDataProvider ssl(ASYNC, OK); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); + + SSLSocketDataProvider ssl2(ASYNC, OK); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); + + SSLSocketDataProvider ssl3(ASYNC, OK); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); + + TestCompletionCallback callback; + + HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); + + int rv = trans.Start(&request, callback.callback(), + NetLogWithSource::Make(NetLogSourceType::NONE)); + EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); + + rv = callback.WaitForResult(); + EXPECT_THAT(rv, IsOk()); + + const HttpResponseInfo* response = trans.GetResponseInfo(); + ASSERT_TRUE(response); + ASSERT_TRUE(response->headers); + EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); +} + +// Test that for a request that fails to be sent through an IP Protection proxy, +// after we fallback to direct the 'IP-Protection' header is not added to the +// request headers. +TEST_P(HttpNetworkTransactionTest, + HttpsNestedProxyIpProtectionRequestHeaderNotAddedAfterFallback) { + HttpRequestInfo request; + request.method = "GET"; + request.url = GURL("https://www.example.org/"); + request.traffic_annotation = + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + + const ProxyServer kProxyServer1{ProxyServer::SCHEME_HTTPS, + HostPortPair("proxy1.test", 70)}; + const ProxyServer kProxyServer2{ProxyServer::SCHEME_HTTPS, + HostPortPair("proxy2.test", 71)}; + ProxyChain kNestedProxyChain{{kProxyServer1, kProxyServer2}}; + kNestedProxyChain = std::move(kNestedProxyChain).ForIpProtection(); + + auto proxy_delegate = + std::make_unique<IpProtectionProxyDelegate>(kNestedProxyChain); + + session_deps_.proxy_resolution_service = + ConfiguredProxyResolutionService::CreateFixedForTest( + "https://not-used:70", TRAFFIC_ANNOTATION_FOR_TESTS); + session_deps_.proxy_resolution_service->SetProxyDelegate( + proxy_delegate.get()); + session_deps_.net_log = NetLog::Get(); + std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); + + MockWrite data_writes1[] = { + MockWrite("CONNECT proxy2.test:71 HTTP/1.1\r\n" + "Host: proxy2.test:71\r\n" + "Proxy-Connection: keep-alive\r\n\r\n"), + }; + + MockRead data_reads1[] = { + MockRead("HTTP/1.1 401 Not Authorized\r\n\r\n"), + MockRead(SYNCHRONOUS, OK), + }; + + StaticSocketDataProvider data1(data_reads1, data_writes1); + session_deps_.socket_factory->AddSocketDataProvider(&data1); + + SSLSocketDataProvider ssl1(ASYNC, OK); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); + + // The proxy delegate should implement falling back to direct after an error, + // and we don't expect any proxying or an IP Protection request header on the + // GET. + MockWrite data_writes2[] = { + MockWrite("GET / HTTP/1.1\r\n" + "Host: www.example.org\r\n" + "Connection: keep-alive\r\n\r\n"), + }; + + MockRead data_reads2[] = { + MockRead("HTTP/1.1 200\r\n\r\n"), + MockRead(SYNCHRONOUS, OK), + }; + + StaticSocketDataProvider data2(data_reads2, data_writes2); + session_deps_.socket_factory->AddSocketDataProvider(&data2); + + SSLSocketDataProvider ssl2(ASYNC, OK); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); + + TestCompletionCallback callback; + + HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); + + int rv = trans.Start(&request, callback.callback(), + NetLogWithSource::Make(NetLogSourceType::NONE)); + EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); + + rv = callback.WaitForResult(); + EXPECT_THAT(rv, IsOk()); + + const HttpResponseInfo* response = trans.GetResponseInfo(); + ASSERT_TRUE(response); + ASSERT_TRUE(response->headers); + EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); +} + } // namespace net
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index f07dd68..0850af1 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: 2023-12-11 12:54 UTC +# Last updated: 2023-12-12 12:54 UTC PinsListTimestamp -1702299268 +1702385651 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/http/transport_security_state_static_pins.json b/net/http/transport_security_state_static_pins.json index da597a5..6fdb980 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: 2023-12-11 12:54 UTC +// Last updated: 2023-12-12 12:54 UTC // { "pinsets": [
diff --git a/net/proxy_resolution/proxy_info.h b/net/proxy_resolution/proxy_info.h index 291cc428..7b969d0 100644 --- a/net/proxy_resolution/proxy_info.h +++ b/net/proxy_resolution/proxy_info.h
@@ -129,7 +129,7 @@ } // Returns true if the first proxy chain corresponds to one used for IP - // Protection. + // Protection. For more info, see `ProxyChain::is_for_ip_protection()`. bool is_for_ip_protection() const; // Returns true if the request that uses this proxy config caused a match with
diff --git a/sandbox/policy/mac/on_device_model_execution.sb b/sandbox/policy/mac/on_device_model_execution.sb index e25a5b3..c392c89 100644 --- a/sandbox/policy/mac/on_device_model_execution.sb +++ b/sandbox/policy/mac/on_device_model_execution.sb
@@ -16,6 +16,10 @@ (allow mach-lookup (xpc-service-name "com.apple.MTLCompilerService")) ) +(allow mach-lookup + (global-name "com.apple.system.opendirectoryd.membership") ; https://crbug.com/1126350#c5 +) + (allow iokit-open (iokit-connection "IOAccelerator") (iokit-user-client-class "AGPMClient")
diff --git a/sandbox/win/src/service_resolver_32.cc b/sandbox/win/src/service_resolver_32.cc index cb43a3d..fcf0688 100644 --- a/sandbox/win/src/service_resolver_32.cc +++ b/sandbox/win/src/service_resolver_32.cc
@@ -12,8 +12,6 @@ #include <memory> -#include "base/bit_cast.h" - namespace { #pragma pack(push, 1) @@ -233,7 +231,7 @@ intercepted_code.service_id = full_local_thunk->original.service_id; intercepted_code.mov_edx = kMovEdx; intercepted_code.mov_edx_param = - base::bit_cast<ULONG>(&full_remote_thunk->internal_thunk); + reinterpret_cast<ULONG>(&full_remote_thunk->internal_thunk); intercepted_code.call_edx = kJmpEdx; bytes_to_write = kMinServiceSize; @@ -291,8 +289,8 @@ ULONG relative = function_code.service_id; // First, fix our copy of their patch. - relative += - base::bit_cast<ULONG>(target_) - base::bit_cast<ULONG>(remote_thunk); + relative += reinterpret_cast<ULONG>(target_) - + reinterpret_cast<ULONG>(remote_thunk); function_code.service_id = relative; @@ -302,8 +300,8 @@ const ULONG kJmp32Size = 5; - relative_jump_ = base::bit_cast<ULONG>(&full_thunk->internal_thunk) - - base::bit_cast<ULONG>(target_) - kJmp32Size; + relative_jump_ = reinterpret_cast<ULONG>(&full_thunk->internal_thunk) - + reinterpret_cast<ULONG>(target_) - kJmp32Size; } // Save the verified code @@ -320,8 +318,8 @@ return false; } - ULONG source_addr = base::bit_cast<ULONG>(target_); - ULONG target_addr = base::bit_cast<ULONG>(thunk_storage); + ULONG source_addr = reinterpret_cast<ULONG>(target_); + ULONG target_addr = reinterpret_cast<ULONG>(thunk_storage); return target_addr + kMaxServiceSize - kJmp32Size - source_addr == patched->service_id; }
diff --git a/services/data_decoder/gzipper.cc b/services/data_decoder/gzipper.cc index 23e2667..c547878 100644 --- a/services/data_decoder/gzipper.cc +++ b/services/data_decoder/gzipper.cc
@@ -4,7 +4,6 @@ #include "services/data_decoder/gzipper.h" -#include "base/bit_cast.h" #include "base/containers/span.h" #include "base/strings/string_piece.h" #include "mojo/public/cpp/base/big_buffer.h" @@ -29,7 +28,7 @@ std::vector<uint8_t> compressed_data(compressed_data_size); if (zlib_internal::CompressHelper( zlib_internal::ZRAW, compressed_data.data(), &compressed_data_size, - base::bit_cast<const Bytef*>(data.data()), data.size(), + reinterpret_cast<const Bytef*>(data.data()), data.size(), Z_DEFAULT_COMPRESSION, /*malloc_fn=*/nullptr, /*free_fn=*/nullptr) != Z_OK) { std::move(callback).Run(absl::nullopt);
diff --git a/services/device/public/mojom/BUILD.gn b/services/device/public/mojom/BUILD.gn index 24e6692..7ed4926e 100644 --- a/services/device/public/mojom/BUILD.gn +++ b/services/device/public/mojom/BUILD.gn
@@ -227,7 +227,6 @@ export_header_blink = "third_party/blink/public/platform/web_common.h" webui_module_path = "/" - use_typescript_sources = true generate_legacy_js_bindings = true }
diff --git a/services/network/network_service_memory_cache.cc b/services/network/network_service_memory_cache.cc index 95012532..1ea6d4e0 100644 --- a/services/network/network_service_memory_cache.cc +++ b/services/network/network_service_memory_cache.cc
@@ -8,7 +8,6 @@ #include <limits> #include <string_view> -#include "base/bit_cast.h" #include "base/memory/ref_counted_memory.h" #include "base/memory/scoped_refptr.h" #include "base/metrics/field_trial_params.h" @@ -137,7 +136,7 @@ const size_t size = std::min(static_cast<size_t>(net::kMaxBytesToSniff), content.size()); decision = analyzer->Sniff( - std::string_view(base::bit_cast<const char*>(content.front()), size)); + std::string_view(reinterpret_cast<const char*>(content.front()), size)); if (decision == corb::ResponseAnalyzer::Decision::kSniffMore) decision = analyzer->HandleEndOfSniffableResponseBody(); DCHECK_NE(decision, corb::ResponseAnalyzer::Decision::kSniffMore);
diff --git a/services/network/network_service_memory_cache_url_loader.cc b/services/network/network_service_memory_cache_url_loader.cc index 223c415d..8bf66bb 100644 --- a/services/network/network_service_memory_cache_url_loader.cc +++ b/services/network/network_service_memory_cache_url_loader.cc
@@ -4,7 +4,6 @@ #include "services/network/network_service_memory_cache_url_loader.h" -#include "base/bit_cast.h" #include "base/task/sequenced_task_runner.h" #include "base/trace_event/common/trace_event_common.h" #include "base/trace_event/trace_event.h" @@ -194,8 +193,8 @@ if (net_log_.IsCapturing()) { net_log_.AddByteTransferEvent( net::NetLogEventType::IN_MEMORY_CACHE_BYTES_READ, total_write_size, - base::bit_cast<const char*>(content_->data().data() + - original_write_position)); + reinterpret_cast<const char*>(content_->data().data() + + original_write_position)); } if (write_completed) {
diff --git a/styleguide/c++/c++-features.md b/styleguide/c++/c++-features.md index 4f37b127..312ab4b 100644 --- a/styleguide/c++/c++-features.md +++ b/styleguide/c++/c++-features.md
@@ -2196,6 +2196,32 @@ Overlaps with `base::Bind`. *** +### std::bit_cast <sup>[banned]</sup> + +```c++ +float quake_rsqrt(float number) { + long i = std::bit_cast<long>(number); + i = 0x5f3759df - (i >> 1); // wtf? + float y = std::bit_cast<float>(i); + return y * (1.5f - (0.5f * number * y * y)); +} +``` + +**Description:** Returns an value constructed with the same bits as an value of +a different type. + +**Documentation:** +[`std::bit_cast`](https://en.cppreference.com/w/cpp/numeric/bit_cast) + +**Notes:** +*** promo +The `std::` version of `bit_cast` allows casting of pointer and reference types, +which is both useless in that it doesn't avoid UB, and dangerous in that it +allows arbitrary casting away of modifiers like `const`. Instead of using +`bit_cast` on pointers, use standard C++ casts. For use on values, use +`base::bit_cast` which does not allow this unwanted usage. +*** + ### std::{c8rtomb,mbrtoc8} <sup>[banned]</sup> ```c++
diff --git a/testing/test_env.py b/testing/test_env.py index 3f05af53..15d0848 100755 --- a/testing/test_env.py +++ b/testing/test_env.py
@@ -123,11 +123,6 @@ if not llvm_profile_file: return {} - if '%c' in llvm_profile_file: - return { - 'LLVM_PROFILE_FILE': llvm_profile_file - } - dirname, basename = os.path.split(llvm_profile_file) root, ext = os.path.splitext(basename) return { @@ -373,7 +368,8 @@ cmd.append('--no-sandbox') # Enable clang code coverage continuous mode. - extra_env.update(get_coverage_continuous_mode_env(env)) + if '--coverage-continuous-mode=1' in cmd: + extra_env.update(get_coverage_continuous_mode_env(env)) # pylint: disable=import-outside-toplevel if '--skip-set-lpac-acls=1' not in cmd and sys.platform == 'win32':
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index c8036f7..fdbbdbe 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -15550,26 +15550,6 @@ ] } ], - "SafeBrowsingTailoredSecurityRetryForSyncUsers": [ - { - "platforms": [ - "android", - "chromeos", - "chromeos_lacros", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "TailoredSecurityRetryForSyncUsers" - ] - } - ] - } - ], "SafetyCheckNotificationPermissions": [ { "platforms": [ @@ -20768,22 +20748,6 @@ ] } ], - "WebApkInstallFailureAndRetry": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebApkInstallFailureNotification", - "WebApkInstallFailureRetry" - ] - } - ] - } - ], "WebApkUniversalInstall": [ { "platforms": [
diff --git a/third_party/androidx/build.gradle.template b/third_party/androidx/build.gradle.template index b40c8b2..48cfb8c 100644 --- a/third_party/androidx/build.gradle.template +++ b/third_party/androidx/build.gradle.template
@@ -88,7 +88,7 @@ compile 'androidx.documentfile:documentfile:{{androidx_dependency_version}}' compile 'androidx.print:print:{{androidx_dependency_version}}' - String media3Version = '1.0.2' + String media3Version = '1.2.0' compile "androidx.media3:media3-common:${media3Version}" compile "androidx.media3:media3-database:${media3Version}" compile "androidx.media3:media3-datasource:${media3Version}"
diff --git a/third_party/blink/common/permissions/permission_utils.cc b/third_party/blink/common/permissions/permission_utils.cc index a5e49bb8..2d11b06f 100644 --- a/third_party/blink/common/permissions/permission_utils.cc +++ b/third_party/blink/common/permissions/permission_utils.cc
@@ -72,6 +72,8 @@ return "VR"; case PermissionType::AR: return "AR"; + case PermissionType::SMART_CARD: + return "SmartCard"; case PermissionType::STORAGE_ACCESS_GRANT: return "StorageAccess"; case PermissionType::CAMERA_PAN_TILT_ZOOM: @@ -121,6 +123,8 @@ return mojom::PermissionsPolicyFeature::kWebXr; case PermissionType::AR: return mojom::PermissionsPolicyFeature::kWebXr; + case PermissionType::SMART_CARD: + return mojom::PermissionsPolicyFeature::kSmartCard; case PermissionType::STORAGE_ACCESS_GRANT: return mojom::PermissionsPolicyFeature::kStorageAccessAPI; case PermissionType::TOP_LEVEL_STORAGE_ACCESS:
diff --git a/third_party/blink/public/common/permissions/permission_utils.h b/third_party/blink/public/common/permissions/permission_utils.h index 5cfad932..9130aeb 100644 --- a/third_party/blink/public/common/permissions/permission_utils.h +++ b/third_party/blink/public/common/permissions/permission_utils.h
@@ -56,6 +56,7 @@ // FILE_HANDLING = 32, // Removed in M98. TOP_LEVEL_STORAGE_ACCESS = 33, CAPTURED_SURFACE_CONTROL = 34, + SMART_CARD = 35, // Always keep this at the end. NUM,
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom index 01cc8e4..3ccb0d8 100644 --- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom +++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -4092,6 +4092,7 @@ kTrustedTypesIsCheck = 4753, kMouseDragOnCancelledMouseMove = 4754, kFedCmDomainHint = 4755, + kLCPImageWasLazy = 4756, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/strings/translations/blink_strings_sw.xtb b/third_party/blink/public/strings/translations/blink_strings_sw.xtb index 0349066..98db3ce 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sw.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sw.xtb
@@ -72,7 +72,7 @@ <translation id="4748357248530471599">tumia mkato kwenye skrini nzima</translation> <translation id="4763480195061959176">video</translation> <translation id="4792862212177489858">Shiriki mahali ulipo</translation> -<translation id="4812940957355064477">Tafadhali ingiza nambari.</translation> +<translation id="4812940957355064477">Tafadhali ingiza namba.</translation> <translation id="4912200001568447310">kipengee cha sasa</translation> <translation id="4915360478455618802">Onyesha kiteua saa</translation> <translation id="4924138096460353083">haijabainishwa</translation>
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn index eabe192..b57f0eb 100644 --- a/third_party/blink/renderer/core/BUILD.gn +++ b/third_party/blink/renderer/core/BUILD.gn
@@ -1508,6 +1508,8 @@ sources += rebase_path(blink_core_tests_typed_arrays, "", "typed_arrays") sources += rebase_path(blink_core_tests_url, "", "url") sources += rebase_path(blink_core_tests_url_pattern, "", "url_pattern") + sources += + rebase_path(blink_core_tests_view_transition, "", "view_transition") sources += rebase_path(blink_core_tests_xml, "", "xml") sources += rebase_path(blink_core_tests_xmlhttprequest, "", "xmlhttprequest")
diff --git a/third_party/blink/renderer/core/css/css_style_sheet.cc b/third_party/blink/renderer/core/css/css_style_sheet.cc index 0503c1a..8e3ce5c 100644 --- a/third_party/blink/renderer/core/css/css_style_sheet.cc +++ b/third_party/blink/renderer/core/css/css_style_sheet.cc
@@ -22,6 +22,7 @@ #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_css_style_sheet_init.h" #include "third_party/blink/renderer/bindings/core/v8/v8_union_medialist_string.h" @@ -511,7 +512,9 @@ // We currently parse synchronously, and since @import support was removed, // nothing else happens asynchronously. This API is left as-is, so that future // async parsing can still be supported here. - return ScriptPromise::Cast(script_state, ToV8(this, script_state)); + return ScriptPromise::Cast( + script_state, + ToV8Traits<CSSStyleSheet>::ToV8(script_state, this).ToLocalChecked()); } void CSSStyleSheet::replaceSync(const String& text,
diff --git a/third_party/blink/renderer/core/events/message_event.cc b/third_party/blink/renderer/core/events/message_event.cc index ebca49c..4f6f6f0e 100644 --- a/third_party/blink/renderer/core/events/message_event.cc +++ b/third_party/blink/renderer/core/events/message_event.cc
@@ -29,11 +29,11 @@ #include <memory> +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_message_event_init.h" #include "third_party/blink/renderer/core/event_interface_names.h" #include "third_party/blink/renderer/core/frame/user_activation.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" -#include "third_party/blink/renderer/platform/bindings/to_v8.h" #include "third_party/blink/renderer/platform/bindings/v8_binding.h" namespace blink { @@ -342,11 +342,14 @@ break; case MessageEvent::kDataTypeBlob: - value = ToV8(data_as_blob_, script_state); + value = + ToV8Traits<Blob>::ToV8(script_state, data_as_blob_).ToLocalChecked(); break; case MessageEvent::kDataTypeArrayBuffer: - value = ToV8(data_as_array_buffer_, script_state); + value = + ToV8Traits<DOMArrayBuffer>::ToV8(script_state, data_as_array_buffer_) + .ToLocalChecked(); break; } @@ -433,7 +436,11 @@ case kDataTypeArrayBuffer: V8PrivateProperty::GetSymbol(isolate, kPrivatePropertyMessageEventCachedData) - .Set(wrapper, ToV8(data_as_array_buffer_, wrapper, isolate)); + .Set(wrapper, + ToV8Traits<DOMArrayBuffer>::ToV8( + ScriptState::From(wrapper->GetCreationContextChecked()), + data_as_array_buffer_) + .ToLocalChecked()); break; }
diff --git a/third_party/blink/renderer/core/exported/web_array_buffer_converter.cc b/third_party/blink/renderer/core/exported/web_array_buffer_converter.cc index e53e6dafd..812877f 100644 --- a/third_party/blink/renderer/core/exported/web_array_buffer_converter.cc +++ b/third_party/blink/renderer/core/exported/web_array_buffer_converter.cc
@@ -41,7 +41,13 @@ v8::Isolate* isolate) { if (!buffer) return v8::Local<v8::Value>(); - return ToV8(*buffer, isolate->GetCurrentContext()->Global(), isolate); + v8::Local<v8::Value> value; + if (!ToV8Traits<DOMArrayBuffer>::ToV8( + ScriptState::From(isolate->GetCurrentContext()), *buffer) + .ToLocal(&value)) { + return v8::Local<v8::Value>(); + } + return value; } WebArrayBuffer* WebArrayBufferConverter::CreateFromV8Value(
diff --git a/third_party/blink/renderer/core/exported/web_blob.cc b/third_party/blink/renderer/core/exported/web_blob.cc index ce7b5e2..4d0d10c 100644 --- a/third_party/blink/renderer/core/exported/web_blob.cc +++ b/third_party/blink/renderer/core/exported/web_blob.cc
@@ -35,6 +35,7 @@ #include "third_party/blink/public/mojom/blob/blob.mojom.h" #include "third_party/blink/public/mojom/blob/serialized_blob.mojom.h" #include "third_party/blink/public/platform/cross_variant_mojo_util.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_blob.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" @@ -86,7 +87,13 @@ v8::Local<v8::Value> WebBlob::ToV8Value(v8::Isolate* isolate) { if (!private_.Get()) return v8::Local<v8::Value>(); - return ToV8(private_.Get(), isolate->GetCurrentContext()->Global(), isolate); + v8::Local<v8::Value> value; + if (!ToV8Traits<Blob>::ToV8(ScriptState::From(isolate->GetCurrentContext()), + private_.Get()) + .ToLocal(&value)) { + return v8::Local<v8::Value>(); + } + return value; } WebBlob::WebBlob(Blob* blob) : private_(blob) {}
diff --git a/third_party/blink/renderer/core/exported/web_node.cc b/third_party/blink/renderer/core/exported/web_node.cc index 0afaba8..55e3e04 100644 --- a/third_party/blink/renderer/core/exported/web_node.cc +++ b/third_party/blink/renderer/core/exported/web_node.cc
@@ -36,6 +36,7 @@ #include "third_party/blink/public/web/web_dom_event.h" #include "third_party/blink/public/web/web_element.h" #include "third_party/blink/public/web/web_element_collection.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/dom_node_ids.h" @@ -162,7 +163,13 @@ v8::Local<v8::Value> WebNode::ToV8Value(v8::Isolate* isolate) { if (!private_.Get()) return v8::Local<v8::Value>(); - return ToV8(private_.Get(), isolate->GetCurrentContext()->Global(), isolate); + v8::Local<v8::Value> value; + if (!ToV8Traits<Node>::ToV8(ScriptState::From(isolate->GetCurrentContext()), + private_.Get()) + .ToLocal(&value)) { + return v8::Local<v8::Value>(); + } + return value; } bool WebNode::IsElementNode() const {
diff --git a/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc b/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc index 84cfb2e..87f05aa 100644 --- a/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc +++ b/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc
@@ -49,6 +49,7 @@ #include "third_party/blink/public/web/web_print_preset_options.h" #include "third_party/blink/public/web/web_view_client.h" #include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_element.h" #include "third_party/blink/renderer/core/clipboard/clipboard_utilities.h" @@ -555,11 +556,12 @@ if (!script_state) return v8::Local<v8::Object>(); - v8::Local<v8::Value> v8value = - ToV8(element_.Get(), script_state->GetContext()->Global(), - script_state->GetIsolate()); - if (v8value.IsEmpty()) + v8::MaybeLocal<v8::Value> maybe_v8value = + ToV8Traits<HTMLPlugInElement>::ToV8(script_state, element_.Get()); + v8::Local<v8::Value> v8value; + if (!maybe_v8value.ToLocal(&v8value)) { return v8::Local<v8::Object>(); + } DCHECK(v8value->IsObject()); return v8::Local<v8::Object>::Cast(v8value);
diff --git a/third_party/blink/renderer/core/fetch/body_stream_buffer.cc b/third_party/blink/renderer/core/fetch/body_stream_buffer.cc index 2c9c695..5ccb79bb 100644 --- a/third_party/blink/renderer/core/fetch/body_stream_buffer.cc +++ b/third_party/blink/renderer/core/fetch/body_stream_buffer.cc
@@ -25,7 +25,6 @@ #include "third_party/blink/renderer/platform/bindings/exception_code.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" -#include "third_party/blink/renderer/platform/bindings/to_v8.h" #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h" #include "third_party/blink/renderer/platform/blob/blob_data.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" @@ -347,10 +346,8 @@ ScriptValue reason, ExceptionState& exception_state) { if (underlying_byte_source_) { - ScriptPromise cancel_promise = underlying_byte_source_->Cancel( - ToV8(reason, script_state->GetContext()->Global(), - script_state->GetIsolate()), - exception_state); + ScriptPromise cancel_promise = + underlying_byte_source_->Cancel(reason.V8Value(), exception_state); if (exception_state.HadException()) { exception_state.ClearException(); return ScriptPromise::CastUndefined(script_state);
diff --git a/third_party/blink/renderer/core/fetch/body_stream_buffer_test.cc b/third_party/blink/renderer/core/fetch/body_stream_buffer_test.cc index dc0c8fc..72fd84d 100644 --- a/third_party/blink/renderer/core/fetch/body_stream_buffer_test.cc +++ b/third_party/blink/renderer/core/fetch/body_stream_buffer_test.cc
@@ -8,6 +8,7 @@ #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_readable_stream.h" #include "third_party/blink/renderer/core/dom/abort_controller.h" @@ -663,7 +664,9 @@ scope.GetScriptState()->GetContext()->Global()->CreateDataProperty( scope.GetScriptState()->GetContext(), V8String(scope.GetIsolate(), "stream"), - ToV8(buffer->Stream(), scope.GetScriptState())); + ToV8Traits<ReadableStream>::ToV8(scope.GetScriptState(), + buffer->Stream()) + .ToLocalChecked()); ASSERT_TRUE(result.IsJust()); ASSERT_TRUE(result.FromJust());
diff --git a/third_party/blink/renderer/core/frame/history.cc b/third_party/blink/renderer/core/frame/history.cc index 155a0a76..01b5ac4 100644 --- a/third_party/blink/renderer/core/frame/history.cc +++ b/third_party/blink/renderer/core/frame/history.cc
@@ -27,6 +27,7 @@ #include "base/metrics/histogram_functions.h" #include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-shared.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/frame/history_util.h" @@ -41,7 +42,6 @@ #include "third_party/blink/renderer/core/timing/soft_navigation_heuristics.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" -#include "third_party/blink/renderer/platform/bindings/to_v8.h" #include "third_party/blink/renderer/platform/bindings/v8_private_property.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" @@ -90,7 +90,10 @@ static const V8PrivateProperty::SymbolKey kHistoryStatePrivateProperty; auto private_prop = V8PrivateProperty::GetSymbol(isolate, kHistoryStatePrivateProperty); - v8::Local<v8::Object> v8_history = ToV8(this, script_state).As<v8::Object>(); + v8::Local<v8::Object> v8_history = + ToV8Traits<History>::ToV8(script_state, this) + .ToLocalChecked() + .As<v8::Object>(); v8::Local<v8::Value> v8_state; // Returns the same V8 value unless the history gets updated. This
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc index 285d076..f9b31ca 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.cc +++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -53,6 +53,7 @@ #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_scroll_to_options.h" #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h" #include "third_party/blink/renderer/bindings/core/v8/v8_void_function.h" @@ -318,11 +319,12 @@ // If current event is null, return undefined. if (!current_event_) { return ScriptValue(script_state->GetIsolate(), - ToV8(ToV8UndefinedGenerator(), script_state)); + v8::Undefined(script_state->GetIsolate())); } - return ScriptValue(script_state->GetIsolate(), - ToV8(CurrentEvent(), script_state)); + return ScriptValue( + script_state->GetIsolate(), + ToV8Traits<Event>::ToV8(script_state, CurrentEvent()).ToLocalChecked()); } Event* LocalDOMWindow::CurrentEvent() const {
diff --git a/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc b/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc index 3346c48..870d4d5 100644 --- a/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_computed_effect_timing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_optional_effect_timing.h" @@ -447,8 +448,7 @@ ToV8InspectorStringView(kAnimationObjectGroup)); *result = v8_session_->wrapObject( script_state->GetContext(), - ToV8(animation, script_state->GetContext()->Global(), - script_state->GetIsolate()), + ToV8Traits<Animation>::ToV8(script_state, animation).ToLocalChecked(), ToV8InspectorStringView(kAnimationObjectGroup), false /* generatePreview */); if (!*result) {
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc index a76c5cec..a22683c 100644 --- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
@@ -43,6 +43,7 @@ #include "third_party/blink/public/resources/grit/inspector_overlay_resources_map.h" #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" #include "third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_inspector_overlay_host.h" #include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h" @@ -1392,11 +1393,12 @@ v8::MicrotasksScope microtasks_scope( isolate, ToMicrotaskQueue(script_state), v8::MicrotasksScope::kDoNotRunMicrotasks); - v8::Local<v8::Object> global = script_state->GetContext()->Global(); v8::Local<v8::Value> overlay_host_obj = - ToV8(overlay_host_.Get(), global, isolate); + ToV8Traits<InspectorOverlayHost>::ToV8(script_state, overlay_host_.Get()) + .ToLocalChecked(); DCHECK(!overlay_host_obj.IsEmpty()); - global + script_state->GetContext() + ->Global() ->Set(script_state->GetContext(), V8AtomicString(isolate, "InspectorOverlayHost"), overlay_host_obj) .ToChecked();
diff --git a/third_party/blink/renderer/core/inspector/main_thread_debugger.cc b/third_party/blink/renderer/core/inspector/main_thread_debugger.cc index bc13d609..4bf06b1c 100644 --- a/third_party/blink/renderer/core/inspector/main_thread_debugger.cc +++ b/third_party/blink/renderer/core/inspector/main_thread_debugger.cc
@@ -40,6 +40,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/renderer/bindings/core/v8/binding_security.h" #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_node.h" #include "third_party/blink/renderer/bindings/core/v8/v8_window.h" @@ -69,6 +70,7 @@ #include "third_party/blink/renderer/platform/bindings/dom_wrapper_world.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/bindings/source_location.h" +#include "third_party/blink/renderer/platform/bindings/v8_set_return_value.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" @@ -410,9 +412,9 @@ v8::Isolate* isolate, v8::Local<v8::Context> context) { DCHECK(ToLocalDOMWindow(context)); - return ToV8( - MakeGarbageCollected<MemoryInfo>(MemoryInfo::Precision::kBucketized), - context->Global(), isolate); + return ToV8Traits<MemoryInfo>::ToV8( + ScriptState::From(context), + MakeGarbageCollected<MemoryInfo>(MemoryInfo::Precision::kBucketized)); } void MainThreadDebugger::installAdditionalCommandLineAPI( @@ -462,10 +464,14 @@ container_node->QuerySelector(AtomicString(selector), exception_state); if (exception_state.HadException()) return; - if (element) - info.GetReturnValue().Set(ToV8(element, info.Holder(), info.GetIsolate())); - else + if (element) { + ScriptState* script_state = + ScriptState::From(info.Holder()->GetCreationContextChecked()); + info.GetReturnValue().Set( + ToV8Traits<Element>::ToV8(script_state, element).ToLocalChecked()); + } else { info.GetReturnValue().Set(v8::Null(info.GetIsolate())); + } } void MainThreadDebugger::QuerySelectorAllCallback( @@ -491,12 +497,17 @@ v8::Isolate* isolate = info.GetIsolate(); v8::Local<v8::Context> context = isolate->GetCurrentContext(); v8::Local<v8::Array> nodes = v8::Array::New(isolate, element_list->length()); + ScriptState* script_state = + ScriptState::From(info.Holder()->GetCreationContextChecked()); for (wtf_size_t i = 0; i < element_list->length(); ++i) { Element* element = element_list->item(i); - if (!CreateDataPropertyInArray( - context, nodes, i, ToV8(element, info.Holder(), info.GetIsolate())) - .FromMaybe(false)) + v8::Local<v8::Value> value; + if (!ToV8Traits<Element>::ToV8(script_state, element).ToLocal(&value)) { return; + } + if (!CreateDataPropertyInArray(context, nodes, i, value).FromMaybe(false)) { + return; + } } info.GetReturnValue().Set(nodes); } @@ -521,15 +532,15 @@ exception_state); if (exception_state.HadException() || !result) return; + ScriptState* script_state = + ScriptState::From(info.Holder()->GetCreationContextChecked()); if (result->resultType() == XPathResult::kNumberType) { - info.GetReturnValue().Set(ToV8(result->numberValue(exception_state), - info.Holder(), info.GetIsolate())); + V8SetReturnValue(info, result->numberValue(exception_state)); } else if (result->resultType() == XPathResult::kStringType) { - info.GetReturnValue().Set(ToV8(result->stringValue(exception_state), - info.Holder(), info.GetIsolate())); + V8SetReturnValue(info, result->stringValue(exception_state), + info.GetIsolate(), bindings::V8ReturnValue::kNonNullable); } else if (result->resultType() == XPathResult::kBooleanType) { - info.GetReturnValue().Set(ToV8(result->booleanValue(exception_state), - info.Holder(), info.GetIsolate())); + V8SetReturnValue(info, result->booleanValue(exception_state)); } else { v8::Isolate* isolate = info.GetIsolate(); v8::Local<v8::Context> context = isolate->GetCurrentContext(); @@ -538,11 +549,14 @@ while (Node* next_node = result->iterateNext(exception_state)) { if (exception_state.HadException()) return; - if (!CreateDataPropertyInArray( - context, nodes, index++, - ToV8(next_node, info.Holder(), info.GetIsolate())) - .FromMaybe(false)) + v8::Local<v8::Value> value; + if (!ToV8Traits<Node>::ToV8(script_state, next_node).ToLocal(&value)) { return; + } + if (!CreateDataPropertyInArray(context, nodes, index++, value) + .FromMaybe(false)) { + return; + } } info.GetReturnValue().Set(nodes); }
diff --git a/third_party/blink/renderer/core/inspector/resolve_node.cc b/third_party/blink/renderer/core/inspector/resolve_node.cc index a116387..88c56f9 100644 --- a/third_party/blink/renderer/core/inspector/resolve_node.cc +++ b/third_party/blink/renderer/core/inspector/resolve_node.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/core/inspector/resolve_node.h" #include "third_party/blink/renderer/bindings/core/v8/binding_security.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/node.h" @@ -21,7 +22,8 @@ !BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(isolate), node)) { return v8::Null(isolate); } - return ToV8(node, context->Global(), isolate); + return ToV8Traits<Node>::ToV8(ScriptState::From(context), node) + .ToLocalChecked(); } std::unique_ptr<v8_inspector::protocol::Runtime::API::RemoteObject> ResolveNode(
diff --git a/third_party/blink/renderer/core/layout/inline/line_breaker.cc b/third_party/blink/renderer/core/layout/inline/line_breaker.cc index f037042..9b3ed68 100644 --- a/third_party/blink/renderer/core/layout/inline/line_breaker.cc +++ b/third_party/blink/renderer/core/layout/inline/line_breaker.cc
@@ -2872,6 +2872,12 @@ item_result->positioned_float = leading_floats_.floats[leading_floats_index_++]; + // Save a backup copy of `exclusion_space_` even if leading floats don't + // modify it. See `RewindFloat`. + DCHECK(exclusion_space_); + item_result->exclusion_space_before_position_float.CopyFrom( + *exclusion_space_); + // Don't break after leading floats if indented. if (position_ != 0) item_result->can_break_after = false; @@ -2948,6 +2954,21 @@ for (const InlineItemResult& item_result : base::make_span(item_results).subspan(new_end)) { if (item_result.positioned_float) { + // Adjust `leading_floats_index_` if this is a leading float. See + // `HandleFloat` and `PositionLeadingFloats`. + if (item_result.item_index < leading_floats_.handled_index) { + for (unsigned i = 0; i < leading_floats_.floats.size(); ++i) { + if (leading_floats_.floats[i].layout_result == + item_result.positioned_float->layout_result) { + leading_floats_index_ = i; + // Need to restore `exclusion_space_` even if leading floats don't + // modify `exclusion_space_`, because there may be following + // non-leading floats that modified it. + break; + } + } + } + *exclusion_space_ = item_result.exclusion_space_before_position_float; UpdateLineOpportunity(); break;
diff --git a/third_party/blink/renderer/core/layout/length_utils.cc b/third_party/blink/renderer/core/layout/length_utils.cc index a90efd7e..ecd5387 100644 --- a/third_party/blink/renderer/core/layout/length_utils.cc +++ b/third_party/blink/renderer/core/layout/length_utils.cc
@@ -722,18 +722,10 @@ const BlockNode& node, const ConstraintSpace& space, const BoxStrut& border_padding, - absl::optional<LogicalSize> override_available_size, ReplacedSizeMode mode, const Length::AnchorEvaluator* anchor_evaluator) { DCHECK(node.IsReplaced()); - LayoutUnit override_available_inline_size = kIndefiniteSize; - LayoutUnit override_available_block_size = kIndefiniteSize; - if (override_available_size) { - override_available_inline_size = override_available_size->inline_size; - override_available_block_size = override_available_size->block_size; - } - const ComputedStyle& style = node.Style(); const EBoxSizing box_sizing = style.BoxSizingForAspectRatio(); const Length& block_length = style.LogicalHeight(); @@ -751,19 +743,19 @@ // For the history on this behavior. Fortunately if this is the case we can // just use the given available size to resolve these sizes against. const LayoutUnit min_max_percentage_resolution_size = - node.GetDocument().InQuirksMode() + node.GetDocument().InQuirksMode() && !node.IsOutOfFlowPositioned() ? space.AvailableSize().block_size : space.ReplacedPercentageResolutionBlockSize(); block_min_max_sizes = { ResolveMinBlockLength( space, style, border_padding, style.LogicalMinHeight(), - override_available_block_size, &min_max_percentage_resolution_size, - anchor_evaluator), + /* override_available_size */ kIndefiniteSize, + &min_max_percentage_resolution_size, anchor_evaluator), ResolveMaxBlockLength( space, style, border_padding, style.LogicalMaxHeight(), - override_available_block_size, &min_max_percentage_resolution_size, - anchor_evaluator)}; + /* override_available_size */ kIndefiniteSize, + &min_max_percentage_resolution_size, anchor_evaluator)}; if (space.IsFixedBlockSize()) { replaced_block = space.AvailableSize().block_size; @@ -786,7 +778,8 @@ &main_percentage_resolution_size)) { replaced_block = ResolveMainBlockLength( space, style, border_padding, block_length_to_resolve, - /* intrinsic_size */ kIndefiniteSize, override_available_block_size, + /* intrinsic_size */ kIndefiniteSize, + /* override_available_size */ kIndefiniteSize, &main_percentage_resolution_size, anchor_evaluator); DCHECK_GE(*replaced_block, LayoutUnit()); replaced_block = @@ -817,8 +810,8 @@ NOTREACHED(); return MinMaxSizesResult(); }, - Length::FillAvailable(), override_available_inline_size, - anchor_evaluator); + Length::FillAvailable(), + /* override_available_size */ kIndefiniteSize, anchor_evaluator); } // If stretch-fit applies we must have an aspect-ratio. @@ -843,9 +836,9 @@ *replaced_block); } else if (natural_size) { DCHECK_NE(mode, ReplacedSizeMode::kIgnoreInlineLengths); - size = ComputeReplacedSize( - node, space, border_padding, override_available_size, - ReplacedSizeMode::kIgnoreInlineLengths, anchor_evaluator) + size = ComputeReplacedSize(node, space, border_padding, + ReplacedSizeMode::kIgnoreInlineLengths, + anchor_evaluator) .inline_size; } else { // We don't have a natural size - default to stretching. @@ -867,11 +860,11 @@ inline_min_max_sizes = { ResolveMinInlineLength(space, style, border_padding, MinMaxSizesFunc, style.LogicalMinWidth(), - override_available_inline_size, + /* override_available_size */ kIndefiniteSize, anchor_evaluator), ResolveMaxInlineLength(space, style, border_padding, MinMaxSizesFunc, style.LogicalMaxWidth(), - override_available_inline_size, + /* override_available_size */ kIndefiniteSize, anchor_evaluator)}; if (space.IsFixedInlineSize()) { @@ -889,8 +882,8 @@ if (!InlineLengthUnresolvable(space, inline_length_to_resolve)) { replaced_inline = ResolveMainInlineLength( space, style, border_padding, MinMaxSizesFunc, - inline_length_to_resolve, override_available_inline_size, - anchor_evaluator); + inline_length_to_resolve, + /* override_available_size */ kIndefiniteSize, anchor_evaluator); DCHECK_GE(*replaced_inline, LayoutUnit()); replaced_inline = inline_min_max_sizes.ClampSizeToMinAndMax(*replaced_inline); @@ -998,15 +991,13 @@ const BlockNode& node, const ConstraintSpace& space, const BoxStrut& border_padding, - absl::optional<LogicalSize> override_available_size, ReplacedSizeMode mode, const Length::AnchorEvaluator* anchor_evaluator) { DCHECK(node.IsReplaced()); const auto* svg_root = DynamicTo<LayoutSVGRoot>(node.GetLayoutBox()); if (!svg_root || !svg_root->IsDocumentElement()) { - return ComputeReplacedSizeInternal(node, space, border_padding, - override_available_size, mode, + return ComputeReplacedSizeInternal(node, space, border_padding, mode, anchor_evaluator); } @@ -1028,8 +1019,7 @@ } LogicalSize size = ComputeReplacedSizeInternal(node, space, border_padding, - override_available_size, mode, - anchor_evaluator); + mode, anchor_evaluator); if (node.Style().LogicalWidth().IsPercentOrCalc()) { double factor = svg_root->LogicalSizeScaleFactorForPercentageLengths();
diff --git a/third_party/blink/renderer/core/layout/length_utils.h b/third_party/blink/renderer/core/layout/length_utils.h index 8e0815d0..b096788 100644 --- a/third_party/blink/renderer/core/layout/length_utils.h +++ b/third_party/blink/renderer/core/layout/length_utils.h
@@ -518,7 +518,6 @@ const BlockNode&, const ConstraintSpace&, const BoxStrut& border_padding, - absl::optional<LogicalSize> override_available_size = absl::nullopt, ReplacedSizeMode = ReplacedSizeMode::kNormal, const Length::AnchorEvaluator* anchor_evaluator = nullptr);
diff --git a/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc b/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc index 817bca5..5133f20 100644 --- a/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc +++ b/third_party/blink/renderer/core/layout/out_of_flow_layout_part.cc
@@ -1970,8 +1970,18 @@ absl::optional<LogicalSize> replaced_size; if (node_info.node.IsReplaced()) { + // Create a new space with the IMCB size. + ConstraintSpaceBuilder builder(candidate_style.GetWritingMode(), + candidate_style.GetWritingDirection(), + /* is_new_fc */ true); + builder.SetAvailableSize(imcb.Size()); + builder.SetPercentageResolutionSize( + node_info.constraint_space.PercentageResolutionSize()); + builder.SetReplacedPercentageResolutionSize( + node_info.constraint_space.PercentageResolutionSize()); + replaced_size = ComputeReplacedSize( - node_info.node, node_info.constraint_space, border_padding, imcb.Size(), + node_info.node, builder.ToConstraintSpace(), border_padding, ReplacedSizeMode::kNormal, anchor_evaluator); }
diff --git a/third_party/blink/renderer/core/layout/replaced_layout_algorithm.cc b/third_party/blink/renderer/core/layout/replaced_layout_algorithm.cc index 1f672e0..8b40030 100644 --- a/third_party/blink/renderer/core/layout/replaced_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/replaced_layout_algorithm.cc
@@ -25,7 +25,6 @@ // and could lead to subtle bugs. const LayoutUnit intrinsic_block_size = ComputeReplacedSize(Node(), GetConstraintSpace(), BorderPadding(), - /* override_available_size */ absl::nullopt, ReplacedSizeMode::kIgnoreBlockLengths) .block_size; container_builder_.SetIntrinsicBlockSize(intrinsic_block_size); @@ -45,7 +44,6 @@ // the min/max content size. MinMaxSizes sizes; sizes = ComputeReplacedSize(Node(), GetConstraintSpace(), BorderPadding(), - /* override_available_size */ absl::nullopt, ReplacedSizeMode::kIgnoreInlineLengths) .inline_size;
diff --git a/third_party/blink/renderer/core/messaging/blink_transferable_message_mojom_traits_test.cc b/third_party/blink/renderer/core/messaging/blink_transferable_message_mojom_traits_test.cc index 9b6847516..f6d5dc9a 100644 --- a/third_party/blink/renderer/core/messaging/blink_transferable_message_mojom_traits_test.cc +++ b/third_party/blink/renderer/core/messaging/blink_transferable_message_mojom_traits_test.cc
@@ -190,7 +190,9 @@ size_t original_bitmap_width = original_bitmap->width(); scoped_refptr<SharedBuffer> original_bitmap_data = original_bitmap->BitmapImage()->Data(); - v8::Local<v8::Value> wrapper = ToV8(original_bitmap, scope.GetScriptState()); + v8::Local<v8::Value> wrapper = + ToV8Traits<ImageBitmap>::ToV8(scope.GetScriptState(), original_bitmap) + .ToLocalChecked(); Transferables transferables; transferables.image_bitmaps.push_back(std::move(original_bitmap)); BlinkTransferableMessage msg;
diff --git a/third_party/blink/renderer/core/navigation_api/navigation_api.cc b/third_party/blink/renderer/core/navigation_api/navigation_api.cc index ffd802c..bad87ee 100644 --- a/third_party/blink/renderer/core/navigation_api/navigation_api.cc +++ b/third_party/blink/renderer/core/navigation_api/navigation_api.cc
@@ -12,6 +12,7 @@ #include "third_party/blink/renderer/bindings/core/v8/capture_source_location.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h" +#include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_navigate_event_init.h" #include "third_party/blink/renderer/bindings/core/v8/v8_navigation_current_entry_change_event_init.h" @@ -42,7 +43,6 @@ #include "third_party/blink/renderer/core/timing/soft_navigation_heuristics.h" #include "third_party/blink/renderer/platform/bindings/exception_context.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" -#include "third_party/blink/renderer/platform/bindings/to_v8.h" #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" namespace blink { @@ -74,10 +74,10 @@ NavigationResult* EarlySuccessResult(ScriptState* script_state, NavigationHistoryEntry* entry) { auto* result = NavigationResult::Create(); - result->setCommitted( - ScriptPromise::Cast(script_state, ToV8(entry, script_state))); - result->setFinished( - ScriptPromise::Cast(script_state, ToV8(entry, script_state))); + auto v8_entry = ToV8Traits<NavigationHistoryEntry>::ToV8(script_state, entry) + .ToLocalChecked(); + result->setCommitted(ScriptPromise::Cast(script_state, v8_entry)); + result->setFinished(ScriptPromise::Cast(script_state, v8_entry)); return result; }
diff --git a/third_party/blink/renderer/core/streams/pipe_to_engine.cc b/third_party/blink/renderer/core/streams/pipe_to_engine.cc index d46ec91..01a83a1 100644 --- a/third_party/blink/renderer/core/streams/pipe_to_engine.cc +++ b/third_party/blink/renderer/core/streams/pipe_to_engine.cc
@@ -241,9 +241,7 @@ void PipeToEngine::AbortAlgorithm(AbortSignal* signal) { // a. Let abortAlgorithm be the following steps: // i. Let error be signal's abort reason. - v8::Local<v8::Value> error = - ToV8(signal->reason(script_state_), script_state_->GetContext()->Global(), - script_state_->GetIsolate()); + v8::Local<v8::Value> error = signal->reason(script_state_).V8Value(); // Steps ii. to iv. are implemented in AbortAlgorithmAction.
diff --git a/third_party/blink/renderer/core/streams/readable_stream_byob_reader.cc b/third_party/blink/renderer/core/streams/readable_stream_byob_reader.cc index 807b5cd..04ecdbb 100644 --- a/third_party/blink/renderer/core/streams/readable_stream_byob_reader.cc +++ b/third_party/blink/renderer/core/streams/readable_stream_byob_reader.cc
@@ -14,7 +14,6 @@ #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" -#include "third_party/blink/renderer/platform/bindings/to_v8.h" #include "third_party/blink/renderer/platform/bindings/v8_binding.h" #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h" @@ -35,9 +34,9 @@ ToV8Traits<DOMArrayBufferView>::ToV8(script_state, chunk) .ToLocalChecked())); read_result->setDone(false); - resolver_->Resolve(script_state, - ToV8(read_result, script_state->GetContext()->Global(), - script_state->GetIsolate())); + resolver_->Resolve(script_state, ToV8Traits<ReadableStreamReadResult>::ToV8( + script_state, read_result) + .ToLocalChecked()); } void CloseSteps(ScriptState* script_state, @@ -50,9 +49,9 @@ : static_cast<v8::Local<v8::Value>>( v8::Undefined(script_state->GetIsolate())))); read_result->setDone(true); - resolver_->Resolve(script_state, - ToV8(read_result, script_state->GetContext()->Global(), - script_state->GetIsolate())); + resolver_->Resolve(script_state, ToV8Traits<ReadableStreamReadResult>::ToV8( + script_state, read_result) + .ToLocalChecked()); } void ErrorSteps(ScriptState* script_state,
diff --git a/third_party/blink/renderer/core/streams/readable_stream_default_reader.cc b/third_party/blink/renderer/core/streams/readable_stream_default_reader.cc index 4a6505c3..a31e701 100644 --- a/third_party/blink/renderer/core/streams/readable_stream_default_reader.cc +++ b/third_party/blink/renderer/core/streams/readable_stream_default_reader.cc
@@ -14,7 +14,6 @@ #include "third_party/blink/renderer/core/streams/stream_promise_resolver.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" -#include "third_party/blink/renderer/platform/bindings/to_v8.h" #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h" namespace blink { @@ -34,7 +33,9 @@ auto* read_result = ReadableStreamReadResult::Create(); read_result->setValue(ScriptValue(script_state->GetIsolate(), chunk)); read_result->setDone(false); - resolver_->Resolve(script_state, ToV8(read_result, script_state)); + resolver_->Resolve(script_state, ToV8Traits<ReadableStreamReadResult>::ToV8( + script_state, read_result) + .ToLocalChecked()); } void CloseSteps(ScriptState* script_state) const override { @@ -42,9 +43,9 @@ read_result->setValue(ScriptValue( script_state->GetIsolate(), v8::Undefined(script_state->GetIsolate()))); read_result->setDone(true); - resolver_->Resolve(script_state, - ToV8(read_result, script_state->GetContext()->Global(), - script_state->GetIsolate())); + resolver_->Resolve(script_state, ToV8Traits<ReadableStreamReadResult>::ToV8( + script_state, read_result) + .ToLocalChecked()); } void ErrorSteps(ScriptState* script_state,
diff --git a/third_party/blink/renderer/core/streams/transferable_streams.cc b/third_party/blink/renderer/core/streams/transferable_streams.cc index 9003089..c1d4733 100644 --- a/third_party/blink/renderer/core/streams/transferable_streams.cc +++ b/third_party/blink/renderer/core/streams/transferable_streams.cc
@@ -828,11 +828,11 @@ ExceptionContextType::kUnknown, "", ""); resolver_->Resolve( script_state, - ToV8(source_->source2_ - ->StartWrapper(script_state, controller, exception_state) - .Then(CreateFunction<PullSource2>( - script_state, source_, exception_state.GetContext())), - script_state->GetContext()->Global(), isolate)); + source_->source2_ + ->StartWrapper(script_state, controller, exception_state) + .Then(CreateFunction<PullSource2>(script_state, source_, + exception_state.GetContext())) + .V8Value()); } else { // TODO(crbug.com/1418910): Investigate how to handle cases when the // controller is cleared.
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc index 9d5b3fe..4df1e3c 100644 --- a/third_party/blink/renderer/core/timing/window_performance.cc +++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -919,6 +919,9 @@ AddLargestContentfulPaint(entry); if (HTMLImageElement* image_element = DynamicTo<HTMLImageElement>(element)) { image_element->SetIsLCPElement(); + if (image_element->HasLazyLoadingAttribute()) { + element->GetDocument().CountUse(WebFeature::kLCPImageWasLazy); + } } if (element) {
diff --git a/third_party/blink/renderer/core/view_transition/view_transition_test.cc b/third_party/blink/renderer/core/view_transition/view_transition_test.cc index ebe48c0..89a36af 100644 --- a/third_party/blink/renderer/core/view_transition/view_transition_test.cc +++ b/third_party/blink/renderer/core/view_transition/view_transition_test.cc
@@ -42,6 +42,7 @@ #include "third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.h" #include "third_party/blink/renderer/platform/testing/find_cc_layer.h" #include "third_party/blink/renderer/platform/testing/paint_test_configurations.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h" @@ -187,6 +188,9 @@ } protected: + test::TaskEnvironment task_environment_{ + test::TaskEnvironment::RealMainThreadScheduler{}}; + std::unique_ptr<frame_test_helpers::WebViewHelper> web_view_helper_; };
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn index 2ff13b0..508d02a 100644 --- a/third_party/blink/renderer/modules/BUILD.gn +++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -1007,6 +1007,7 @@ "//third_party/blink/renderer/core", "//third_party/blink/renderer/core:testing", "//third_party/blink/renderer/core:unit_test_support", + "//third_party/blink/renderer/modules/breakout_box:unit_tests", "//third_party/blink/renderer/modules/gamepad:unit_tests", "//third_party/blink/renderer/modules/hid:unit_tests", "//third_party/blink/renderer/modules/idle:unit_tests",
diff --git a/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc b/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc index df0f965..7adbaef 100644 --- a/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc
@@ -10,6 +10,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" namespace blink { @@ -19,6 +20,7 @@ FrameQueueTest() : io_task_runner_(Platform::Current()->GetIOTaskRunner()) {} protected: + test::TaskEnvironment task_environment_; ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; };
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_sink_test.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_sink_test.cc index 599f3599..542c30bc 100644 --- a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_sink_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_sink_test.cc
@@ -30,6 +30,7 @@ #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_track.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h" using testing::_; @@ -97,6 +98,7 @@ } protected: + test::TaskEnvironment task_environment_; base::Thread testing_thread_; Persistent<MediaStreamSource> media_stream_source_; Persistent<MediaStreamComponent> media_stream_component_;
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source_test.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source_test.cc index 48ebcdb..c5ab1c10 100644 --- a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source_test.cc
@@ -27,6 +27,7 @@ #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_track.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/testing/testing_platform_support.h" using testing::_; @@ -147,6 +148,7 @@ return audio_bus; } + test::TaskEnvironment task_environment_; ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; };
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_track_generator_test.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_track_generator_test.cc index 0dd5ec2..78987bb 100644 --- a/third_party/blink/renderer/modules/breakout_box/media_stream_track_generator_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/media_stream_track_generator_test.cc
@@ -32,6 +32,7 @@ #include "third_party/blink/renderer/platform/bindings/exception_code.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" using testing::_; @@ -71,6 +72,7 @@ } protected: + test::TaskEnvironment task_environment_; ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; };
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_track_processor_test.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_track_processor_test.cc index bd6baf6c..7b20a8a 100644 --- a/third_party/blink/renderer/modules/breakout_box/media_stream_track_processor_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/media_stream_track_processor_test.cc
@@ -37,6 +37,7 @@ #include "third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" using testing::_; @@ -98,6 +99,7 @@ } protected: + test::TaskEnvironment task_environment_; ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; private:
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_sink_test.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_sink_test.cc index 2fc7133..1781bb12 100644 --- a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_sink_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_sink_test.cc
@@ -24,6 +24,7 @@ #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" using testing::_; @@ -73,6 +74,7 @@ } protected: + test::TaskEnvironment task_environment_; ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; Persistent<MediaStreamSource> media_stream_source_; raw_ptr<PushableMediaStreamVideoSource, ExperimentalRenderer>
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source_test.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source_test.cc index 7a5fb83..fd0210b 100644 --- a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source_test.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/modules/webcodecs/video_frame_monitor.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/testing/testing_platform_support.h" using testing::_; @@ -110,6 +111,7 @@ return media_stream_source; } + test::TaskEnvironment task_environment_; ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; const raw_ptr<PushableMediaStreamVideoSource, ExperimentalRenderer> pushable_video_source_;
diff --git a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc index b6498a4..9afe8dc9 100644 --- a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc
@@ -17,6 +17,7 @@ #include "third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" namespace blink { @@ -214,6 +215,8 @@ bool ShouldDeliverAudioOnAudioTaskRunner() const { return GetParam(); } protected: + test::TaskEnvironment task_environment_; + ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; Persistent<MediaStreamSource> stream_source_;
diff --git a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source_test.cc b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source_test.cc index f27c5b37f..72e8fdf 100644 --- a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source_test.cc +++ b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source_test.cc
@@ -18,6 +18,7 @@ #include "third_party/blink/renderer/modules/mediastream/video_track_adapter_settings.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" +#include "third_party/blink/renderer/platform/testing/task_environment.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" namespace blink { @@ -100,6 +101,7 @@ } protected: + test::TaskEnvironment task_environment_; ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; Persistent<MediaStreamSource> stream_source_;
diff --git a/third_party/blink/renderer/modules/webgpu/dawn_object.h b/third_party/blink/renderer/modules/webgpu/dawn_object.h index b50ac0f..9bd305c 100644 --- a/third_party/blink/renderer/modules/webgpu/dawn_object.h +++ b/third_party/blink/renderer/modules/webgpu/dawn_object.h
@@ -164,6 +164,20 @@ WGPUDevice const handle_; }; +template <> +class DawnObject<WGPUAdapter> : public DawnObjectBase { + public: + DawnObject(scoped_refptr<DawnControlClientHolder> dawn_control_client, + WGPUAdapter handle) + : DawnObjectBase(dawn_control_client), handle_(handle) {} + ~DawnObject() { GetProcs().adapterRelease(handle_); } + + WGPUAdapter GetHandle() const { return handle_; } + + private: + WGPUAdapter const handle_; +}; + } // namespace blink #undef DAWN_OBJECTS
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc b/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc index 3160f7a..812f86cf 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_adapter.cc
@@ -94,15 +94,15 @@ GPU* gpu, WGPUAdapter handle, scoped_refptr<DawnControlClientHolder> dawn_control_client) - : DawnObjectBase(dawn_control_client), handle_(handle), gpu_(gpu) { + : DawnObject(dawn_control_client, handle), gpu_(gpu) { WGPUAdapterProperties properties = {}; WGPUAdapterPropertiesMemoryHeaps memoryHeapProperties = {}; memoryHeapProperties.chain.sType = WGPUSType_AdapterPropertiesMemoryHeaps; if (GetProcs().adapterHasFeature( - handle_, WGPUFeatureName_AdapterPropertiesMemoryHeaps)) { + GetHandle(), WGPUFeatureName_AdapterPropertiesMemoryHeaps)) { properties.nextInChain = &memoryHeapProperties.chain; } - GetProcs().adapterGetProperties(handle_, &properties); + GetProcs().adapterGetProperties(GetHandle(), &properties); is_fallback_adapter_ = properties.adapterType == WGPUAdapterType_CPU; adapter_type_ = properties.adapterType; backend_type_ = properties.backendType; @@ -122,7 +122,7 @@ memoryHeapProperties.heapInfo[i])); } - features_ = MakeFeatureNameSet(GetProcs(), handle_); + features_ = MakeFeatureNameSet(GetProcs(), GetHandle()); WGPUSupportedLimits limits = {}; // Chain to get experimental subgroup limits, if support experimental @@ -133,7 +133,7 @@ limits.nextInChain = &subgroupLimits.chain; } - GetProcs().adapterGetLimits(handle_, &limits); + GetProcs().adapterGetLimits(GetHandle(), &limits); limits_ = MakeGarbageCollected<GPUSupportedLimits>(limits); } @@ -171,7 +171,7 @@ } bool GPUAdapter::SupportsMultiPlanarFormats() const { - return GetProcs().adapterHasFeature(handle_, + return GetProcs().adapterHasFeature(GetHandle(), WGPUFeatureName_DawnMultiPlanarFormats); } @@ -294,8 +294,9 @@ WTF::BindOnce(&GPUAdapter::OnRequestDeviceCallback, WrapPersistent(this), WrapPersistent(script_state), WrapPersistent(descriptor)))); - GetProcs().adapterRequestDevice( - handle_, &dawn_desc, callback->UnboundCallback(), callback->AsUserdata()); + GetProcs().adapterRequestDevice(GetHandle(), &dawn_desc, + callback->UnboundCallback(), + callback->AsUserdata()); EnsureFlush(ToEventLoop(script_state)); return promise;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_adapter.h b/third_party/blink/renderer/modules/webgpu/gpu_adapter.h index be28d8d9..93b00b6 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_adapter.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_adapter.h
@@ -22,7 +22,7 @@ class GPUMemoryHeapInfo; class ScriptPromiseResolver; -class GPUAdapter final : public ScriptWrappable, public DawnObjectBase { +class GPUAdapter final : public ScriptWrappable, DawnObject<WGPUAdapter> { DEFINE_WRAPPERTYPEINFO(); public: @@ -67,7 +67,6 @@ // There isn't a wgpu::Adapter::SetLabel, just skip. } - WGPUAdapter handle_; Member<GPU> gpu_; bool is_fallback_adapter_; WGPUBackendType backend_type_;
diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.cc b/third_party/blink/renderer/platform/text/text_break_iterator.cc index 801f4a12..55bcf81f 100644 --- a/third_party/blink/renderer/platform/text/text_break_iterator.cc +++ b/third_party/blink/renderer/platform/text/text_break_iterator.cc
@@ -304,13 +304,12 @@ DCHECK_GE(static_cast<unsigned>(pos), start_offset_); CHECK_LE(pos, len); int next_break = -1; - UChar last_last_ch = pos > 1 ? str[pos - 2] : SecondToLastCharacter(); - UChar last_ch = pos > 0 ? str[pos - 1] : LastCharacter(); + UChar last_last_ch = pos > 1 ? str[pos - 2] : 0; + UChar last_ch = pos > 0 ? str[pos - 1] : 0; bool is_last_space = IsBreakableSpace(last_ch); ULineBreak last_line_break; if (lineBreakType == LineBreakType::kBreakAll) last_line_break = LineBreakPropertyValue(last_last_ch, last_ch); - PriorContext prior_context = GetPriorContext(); CharacterType ch; bool is_space; for (int i = pos; i < len; @@ -353,21 +352,20 @@ if (NeedsLineBreakIterator(ch) || NeedsLineBreakIterator(last_ch)) { if (next_break < i) { - // Don't break if positioned at start of primary context and there is no - // prior context. - if (i || prior_context.length) { - if (TextBreakIterator* break_iterator = GetIterator(prior_context)) { + // Don't break if positioned at start of primary context. + if (i) { + if (TextBreakIterator* break_iterator = GetIterator()) { next_break = i - 1; for (;;) { // Adjust the offset by |start_offset_| because |break_iterator| // has text after |start_offset_|. // TODO(crbug.com/1500931): `+1` below shouldn't be there, but it // was so before and removing it hits. This is to be investigated. - DCHECK_GE(next_break + prior_context.length + 1, start_offset_); - next_break = break_iterator->following( - next_break + prior_context.length - start_offset_); + DCHECK_GE(next_break + 1u, start_offset_); + next_break = + break_iterator->following(next_break - start_offset_); if (next_break >= 0) { - next_break = next_break + start_offset_ - prior_context.length; + next_break = next_break + start_offset_; if (UNLIKELY(disable_soft_hyphen_) && next_break > 0 && UNLIKELY(str[next_break - 1] == kSoftHyphenCharacter)) { continue;
diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.h b/third_party/blink/renderer/platform/text/text_break_iterator.h index 354c75c..bb00bdb 100644 --- a/third_party/blink/renderer/platform/text/text_break_iterator.h +++ b/third_party/blink/renderer/platform/text/text_break_iterator.h
@@ -55,13 +55,13 @@ PLATFORM_EXPORT TextBreakIterator* AcquireLineBreakIterator( base::span<const LChar>, const AtomicString& locale, - const UChar* prior_context, - unsigned prior_context_length); + const UChar* prior_context = nullptr, + unsigned prior_context_length = 0); PLATFORM_EXPORT TextBreakIterator* AcquireLineBreakIterator( base::span<const UChar>, const AtomicString& locale, - const UChar* prior_context, - unsigned prior_context_length); + const UChar* prior_context = nullptr, + unsigned prior_context_length = 0); PLATFORM_EXPORT void ReleaseLineBreakIterator(TextBreakIterator*); PLATFORM_EXPORT TextBreakIterator* SentenceBreakIterator( base::span<const UChar>); @@ -127,7 +127,6 @@ locale_(locale), iterator_(nullptr), break_type_(break_type) { - ResetPriorContext(); } LazyLineBreakIterator(const String& string, @@ -151,57 +150,6 @@ const String& GetString() const { return string_; } - UChar LastCharacter() const { - static_assert(std::extent<decltype(prior_context_)>() == 2, - "TextBreakIterator has unexpected prior context length"); - return prior_context_[1]; - } - - UChar SecondToLastCharacter() const { - static_assert(std::extent<decltype(prior_context_)>() == 2, - "TextBreakIterator has unexpected prior context length"); - return prior_context_[0]; - } - - void SetPriorContext(UChar last, UChar second_to_last) { - static_assert(std::extent<decltype(prior_context_)>() == 2, - "TextBreakIterator has unexpected prior context length"); - prior_context_[0] = second_to_last; - prior_context_[1] = last; - } - - void UpdatePriorContext(UChar last) { - static_assert(std::extent<decltype(prior_context_)>() == 2, - "TextBreakIterator has unexpected prior context length"); - prior_context_[0] = prior_context_[1]; - prior_context_[1] = last; - } - - void ResetPriorContext() { - static_assert(std::extent<decltype(prior_context_)>() == 2, - "TextBreakIterator has unexpected prior context length"); - prior_context_[0] = 0; - prior_context_[1] = 0; - } - - struct PriorContext { - const UChar* text = nullptr; - unsigned length = 0; - }; - - PriorContext GetPriorContext() const { - static_assert(std::extent<decltype(prior_context_)>() == 2, - "TextBreakIterator has unexpected prior context length"); - if (prior_context_[1]) { - if (prior_context_[0]) - return PriorContext{&prior_context_[0], 2}; - return PriorContext{&prior_context_[1], 1}; - } - return PriorContext{nullptr, 0}; - } - - unsigned PriorContextLength() const { return GetPriorContext().length; } - void ResetStringAndReleaseIterator(String string, const LayoutLocale* locale) { string_ = string; @@ -288,22 +236,15 @@ } ReleaseLineBreakIterator(iterator_); iterator_ = nullptr; - cached_prior_context_.text = nullptr; - cached_prior_context_.length = 0; } // Obtain text break iterator, possibly previously cached, where this iterator // is (or has been) initialized to use the previously stored string as the // primary breaking context and using previously stored prior context if // non-empty. - TextBreakIterator* GetIterator(const PriorContext& prior_context) const { - DCHECK(prior_context.length <= kPriorContextCapacity); + TextBreakIterator* GetIterator() const { if (iterator_) { - if (prior_context.length == cached_prior_context_.length) { - DCHECK_EQ(prior_context.text, cached_prior_context_.text); - return iterator_; - } - ReleaseIterator(); + return iterator_; } // Create the iterator, or get one from the cache, for the text after @@ -313,17 +254,14 @@ // // For this reason, the offset for the TextBreakIterator must be adjusted by // |start_offset_|. - cached_prior_context_ = prior_context; CHECK_LE(start_offset_, string_.length()); const AtomicString& locale = LocaleWithKeyword(); if (string_.Is8Bit()) { iterator_ = AcquireLineBreakIterator( - string_.Span8().subspan(start_offset_), locale, prior_context.text, - prior_context.length); + string_.Span8().subspan(start_offset_), locale); } else { iterator_ = AcquireLineBreakIterator( - string_.Span16().subspan(start_offset_), locale, prior_context.text, - prior_context.length); + string_.Span16().subspan(start_offset_), locale); } return iterator_; } @@ -347,13 +285,10 @@ int NextBreakablePosition(int pos, LineBreakType, int len) const; int NextBreakablePosition(int pos, LineBreakType) const; - static const unsigned kPriorContextCapacity = 2; String string_; const LayoutLocale* locale_ = nullptr; mutable AtomicString locale_with_keyword_; mutable TextBreakIterator* iterator_; - UChar prior_context_[kPriorContextCapacity]; - mutable PriorContext cached_prior_context_; unsigned start_offset_ = 0; LineBreakType break_type_; BreakSpaceType break_space_ = BreakSpaceType::kAfterSpaceRun;
diff --git a/third_party/blink/renderer/platform/wtf/hash_functions.h b/third_party/blink/renderer/platform/wtf/hash_functions.h index e580911..d1f06d2 100644 --- a/third_party/blink/renderer/platform/wtf/hash_functions.h +++ b/third_party/blink/renderer/platform/wtf/hash_functions.h
@@ -127,7 +127,7 @@ template <typename T> unsigned HashPointer(T* key) { - return HashInt(base::bit_cast<internal::IntHashBits<T*>>(key)); + return HashInt(reinterpret_cast<internal::IntHashBits<T*>>(key)); } // Useful compounding hash functions.
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index a1e8f4f..013c2591 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -6603,7 +6603,6 @@ crbug.com/1459304 [ Linux ] virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html?7-8 [ Failure Pass ] crbug.com/1459304 [ Linux ] css2.1/t090501-c414-flt-02-d-g.html [ Failure Pass ] # Very flaky -crbug.com/1459304 [ Linux ] virtual/fenced-frame-mparch/http/tests/inspector-protocol/fenced-frame/device-emulation-fenced-frame.https.js [ Failure Pass ] crbug.com/1459304 [ Linux ] virtual/fenced-frame-mparch/external/wpt/fenced-frame/navigator-vibrate.https.html [ Failure Pass ] crbug.com/1459304 [ Linux ] fast/peerconnection/RTCPeerConnection-iframe-gc.html [ Failure Pass ] crbug.com/1459347 [ Fuchsia ] virtual/text-antialias/stroking-decorations.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index cd01489..87a1b40 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1513,7 +1513,10 @@ "--disable-threaded-compositing", "--disable-threaded-animation"], "expires": "Jul 1, 2024" }, - { + { + "owners": [ + "haoliuk@chromium.org" + ], "prefix": "expose-lcp-render-time", "platforms": [ "Linux", @@ -1530,7 +1533,7 @@ "args": [ "--enable-blink-features=ExposeRenderTimeNonTaoDelayedImage", "--disable-threaded-compositing", "--disable-threaded-animation"], - "expires": "Jul 1, 2023" + "expires": "Jul 1, 2024" }, { "prefix": "parakeet", @@ -2322,6 +2325,9 @@ "expires": "Dec 1, 2023" }, { + "owners": [ + "haoliuk@chromium.org" + ], "prefix": "soft-navigation-fp-fcp", "platforms": ["Linux"], "bases": [ @@ -2329,7 +2335,7 @@ ], "args": ["--enable-blink-features=SoftNavigationHeuristicsExposeFPAndFCP", "--disable-threaded-compositing", "--disable-threaded-animation"], - "expires": "Dec 31, 2023" + "expires": "Jul 1, 2024" }, { "prefix": "produce-compile-hints",
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index cd685ad1..111bf9df0 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -393437,6 +393437,12 @@ [] ] }, + "locate_nodes": { + "__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] + }, "navigate": { "__init__.py": [ "c2bf7558f4fe75413f81057c8ab96f31d3fc537f", @@ -699745,6 +699751,64 @@ ] ] }, + "locate_nodes": { + "context.py": [ + "6aac78a48ba08e28944520f682fb7aa223da77b9", + [ + null, + {} + ] + ], + "invalid.py": [ + "d549cf35de281154e79d33fd2174c29943c96868", + [ + null, + {} + ] + ], + "locator.py": [ + "656eaddc1fc40c85050c3e267e45da3e47ed1b54", + [ + null, + {} + ] + ], + "max_node_count.py": [ + "9147fb318326d918d9ea9137abae18f94cdeeeb4", + [ + null, + {} + ] + ], + "ownership.py": [ + "d5450ffc80c8c060d575b7893f8bd8cd179c4c94", + [ + null, + {} + ] + ], + "sandbox.py": [ + "7f9cd9dfd8584bee967d1d070b79a6eb92f31d4f", + [ + null, + {} + ] + ], + "serialization_options.py": [ + "9d7e7a861380b51b15b0c15e18db93559fd5a94f", + [ + null, + {} + ] + ], + "start_nodes.py": [ + "3f46a50642c7c3bba1b8a92884c3a6ab50244a7f", + [ + null, + {} + ] + ] + }, "navigate": { "about_blank.py": [ "55ca351297732a3cc69073f8d68f60459346e379",
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/overflow-wrap/crashtests/overflow-wrap-leading-floats-crash.html b/third_party/blink/web_tests/external/wpt/css/css-text/overflow-wrap/crashtests/overflow-wrap-leading-floats-crash.html new file mode 100644 index 0000000..0661cf72 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/overflow-wrap/crashtests/overflow-wrap-leading-floats-crash.html
@@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link ref="help" href="crbug.com/1510579"> +<style> +#container { + width: 0; + text-indent: 1em; + overflow-wrap: anywhere; +} +</style> +<div id="container"> + <div style="float: left"></div> + 12 +</div>
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/__init__.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/__init__.py
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/context.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/context.py new file mode 100644 index 0000000..6aac78a4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/context.py
@@ -0,0 +1,15 @@ +import pytest +import webdriver.bidi.error as error + + +@pytest.mark.asyncio +async def test_params_context_invalid_value(bidi_session, inline, top_context): + url = inline("""<div>foo</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + with pytest.raises(error.NoSuchFrameException): + await bidi_session.browsing_context.locate_nodes( + context="foo", locator={ "type": "css", "value": "div" } + )
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/invalid.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/invalid.py new file mode 100644 index 0000000..d549cf35 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/invalid.py
@@ -0,0 +1,153 @@ +import pytest +import webdriver.bidi.error as error + +pytestmark = pytest.mark.asyncio + + +MAX_INT = 9007199254740991 + + +async def navigate_to_page(bidi_session, inline, top_context): + url = inline("""<div>foo</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + +@pytest.mark.parametrize("value", [None, False, 42, {}, []]) +async def test_params_context_invalid_type(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=value, locator={"type": "css", "value": "div"} + ) + + +@pytest.mark.parametrize("value", [None, False, 42, {}, []]) +async def test_params_locator_type_invalid_type(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], locator={ "type": value, "value": "div" } + ) + + +@pytest.mark.parametrize("type", ["", "invalid"]) +async def test_params_locator_type_invalid_value(bidi_session, inline, top_context, type): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], locator={ "type": type, "value": "div" } + ) + + +@pytest.mark.parametrize("type,value", [ + ("css", "a*b"), + ("xpath", ""), + ("xpath", "invalid-xpath") + ("innerText", "") +]) +async def test_params_locator_value_invalid_value(bidi_session, inline, top_context, type, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidSelectorException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], locator={ "type": type, "value": value } + ) + + +@pytest.mark.parametrize("value", [False, "string", 1.5, {}, []]) +async def test_params_max_node_count_invalid_type(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div" }, + max_node_count=value + ) + + +@pytest.mark.parametrize("value", [0, MAX_INT + 1]) +async def test_params_max_node_count_invalid_value(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "invalid", "value": "div" }, + max_node_count=value + ) + + +@pytest.mark.parametrize("value", [False, 42, {}, []]) +async def test_params_ownership_invalid_type(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div" }, + ownership=value + ) + + +async def test_params_ownership_invalid_value(bidi_session, inline, top_context): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div" }, + ownership="foo" + ) + + +@pytest.mark.parametrize("value", [False, 42, {}, []]) +async def test_params_sandbox_invalid_type(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div" }, + sandbox=value + ) + + +@pytest.mark.parametrize("value", [False, 42, "foo", []]) +async def test_params_serialization_options_invalid_type(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div" }, + serialization_options=value + ) + + +@pytest.mark.parametrize("value", [False, "string", 42, {}]) +async def test_params_start_nodes_invalid_type(bidi_session, inline, top_context, value): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div" }, + start_nodes=value + ) + + +async def test_params_start_nodes_empty_list(bidi_session, inline, top_context): + await navigate_to_page(bidi_session, inline, top_context) + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "invalid", "value": "div" }, + start_nodes=[] + )
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/locator.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/locator.py new file mode 100644 index 0000000..656eadd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/locator.py
@@ -0,0 +1,207 @@ +import pytest + +from ... import any_string, recursive_compare + + +@pytest.mark.parametrize("type,value", [ + ("css", "div"), + ("xpath", "//div"), + ("innerText", "foobarBARbaz") +]) +@pytest.mark.asyncio +async def test_find_by_locator(bidi_session, inline, top_context, type, value): + url = inline("""<div data-class="one">foobarBARbaz</div><div data-class="two">foobarBARbaz</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": type, "value": value } + ) + + expected = [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"two"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + } + ] + + recursive_compare(expected, result["nodes"]) + + +@pytest.mark.parametrize("ignore_case,match_type,max_depth,value,expected", [ + (True, "full", None, "bar", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 1, + "children": [], + "localName": "strong", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 1, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ), + (False, "full", None, "BAR", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 1, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ), + (True, "partial", None, "ba", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 1, + "localName": "strong", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 1, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ), + (False, "partial", None, "ba", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 1, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ), + (True, "full", 0, "foobarbarbaz", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 4, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ), + (False, "full", 0, "foobarBARbaz", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 4, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ), + (True, "partial", 0, "bar", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 4, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ), + (False, "partial", 0, "BAR", [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {}, + "childNodeCount": 4, + "localName": "span", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }] + ) +], ids=[ + "ignore_case_true_full_match_no_max_depth", + "ignore_case_false_full_match_no_max_depth", + "ignore_case_true_partial_match_no_max_depth", + "ignore_case_false_partial_match_no_max_depth", + "ignore_case_true_full_match_max_depth_zero", + "ignore_case_false_full_match_max_depth_zero", + "ignore_case_true_partial_match_max_depth_zero", + "ignore_case_false_partial_match_max_depth_zero", +]) +@pytest.mark.asyncio +async def test_find_by_inner_text(bidi_session, inline, top_context, ignore_case, match_type, max_depth, value, expected): + url = inline("""<div>foo<span><strong>bar</strong></span><span>BAR</span>baz</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ + "type": "innerText", + "value": value, + "ignoreCase": ignore_case, + "matchType": match_type, + "maxDepth": max_depth + } + ) + + recursive_compare(expected, result["nodes"])
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/max_node_count.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/max_node_count.py new file mode 100644 index 0000000..9147fb3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/max_node_count.py
@@ -0,0 +1,139 @@ +import pytest + +from ... import any_string, recursive_compare + + +@pytest.mark.parametrize("type,value,max,expected", [ + ("css", "div", 1, [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }] + ), + ("xpath", "//div", 1, [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }] + ), + ("innerText", "foo", 1, [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }] + ), + ("css", "div", 10, [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"two"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }] + ), + ("xpath", "//div", 10, [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"two"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }] + ), + ("innerText", "foo", 10, [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"two"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + }, + }] + ) +], ids=[ + "css_single", + "xpath_single", + "inner_text_single", + "css_multiple", + "xpath_multiple", + "inner_text_multiple" +]) +@pytest.mark.asyncio +async def test_find_by_css_limit_return_count(bidi_session, inline, top_context, type, value, max_count, expected): + url = inline("""<div data-class="one">foo</div><div data-class="two">foo</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": type, "value": value }, + max_node_count = max_count + ) + + recursive_compare(expected, result["nodes"])
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/ownership.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/ownership.py new file mode 100644 index 0000000..d5450ff --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/ownership.py
@@ -0,0 +1,26 @@ +import pytest + +from webdriver.bidi.modules.script import assert_handle + + +@pytest.mark.parametrize("ownership,has_handle", [ + ("root", True), + ("none", False) +]) +@pytest.mark.asyncio +async def test_root_ownership_of_located_nodes(bidi_session, inline, top_context, ownership, has_handle): + url = inline("""<div data-class="one">foobarBARbaz</div><div data-class="two">foobarBARbaz</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" }, + ownership=ownership + ) + + assert result["nodes"].length == 1 + result_node = result["nodes"][0] + + assert_handle(result_node, has_handle)
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/sandbox.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/sandbox.py new file mode 100644 index 0000000..7f9cd9d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/sandbox.py
@@ -0,0 +1,113 @@ +import pytest + +from webdriver.bidi.modules.script import ContextTarget,OwnershipModel + + +@pytest.mark.asyncio +async def test_locate_nodes_in_sandbox(bidi_session, inline, top_context): + url = inline("""<div data-class="one">foobarBARbaz</div><div data-class="two">foobarBARbaz</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" }, + sandbox="sandbox" + ) + + assert len(result["nodes"]) == 1 + node_id = result["nodes"][0]["sharedId"] + + # Since the node was found in the sandbox, it should be available + # to scripts running in the sandbox. + result_in_sandbox = await bidi_session.script.call_function( + function_declaration="() => arguments[0]", + target=ContextTarget(top_context["context"], "sandbox"), + await_promise=True, + arguments=[ + { + "sharedId": node_id + } + ] + ) + assert result_in_sandbox["type"] == "node" + assert result_in_sandbox["sharedId"] == node_id + + +@pytest.mark.asyncio +async def test_locate_same_node_in_different_sandboxes_returns_same_id(bidi_session, inline, top_context): + url = inline("""<div data-class="one">foobarBARbaz</div><div data-class="two">foobarBARbaz</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + first_result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" }, + sandbox="first_sandbox" + ) + + assert first_result["context"] == top_context["context"] + assert len(first_result["nodes"]) == 1 + + second_result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" }, + sandbox="second_sandbox" + ) + assert len(second_result["nodes"]) == 1 + assert first_result["nodes"][0]["sharedId"] == second_result["nodes"][0]["sharedId"] + + +@pytest.mark.asyncio +async def test_locate_same_node_in_default_sandbox_returns_same_id_as_sandbox(bidi_session, inline, top_context): + url = inline("""<div data-class="one">foobarBARbaz</div><div data-class="two">foobarBARbaz</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" } + ) + + assert len(result["nodes"]) == 1 + node_id = result["nodes"][0]["sharedId"] + + result_in_sandbox = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" }, + sandbox="sandbox" + ) + assert len(result_in_sandbox["nodes"]) == 1 + assert result_in_sandbox["nodes"][0]["sharedId"] == node_id + + +@pytest.mark.asyncio +async def test_locate_same_node_in_different_sandboxes_with_root_ownership_returns_different_handles(bidi_session, inline, top_context): + url = inline("""<div data-class="one">foobarBARbaz</div><div data-class="two">foobarBARbaz</div>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + first_result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" }, + sandbox="first_sandbox", + ownership=OwnershipModel.ROOT + ) + + assert first_result["context"] == top_context["context"] + assert len(first_result["nodes"]) == 1 + + second_result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "div[data-class='one']" }, + sandbox="second_sandbox", + ownership=OwnershipModel.ROOT + ) + + assert len(second_result["nodes"]) == 1 + assert first_result["nodes"][0]["sharedId"] == second_result["nodes"][0]["sharedId"] + assert first_result["nodes"][0]["handle"] != second_result["nodes"][0]["handle"]
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/serialization_options.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/serialization_options.py new file mode 100644 index 0000000..9d7e7a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/serialization_options.py
@@ -0,0 +1,65 @@ +import pytest + +from webdriver.bidi.modules.script import SerializationOptions +from ... import any_string, recursive_compare + + +@pytest.mark.parametrize("mode", [ + "open", + "closed" +]) +@pytest.mark.asyncio +async def test_locate_nodes_serialization_options(bidi_session, top_context, get_test_page, mode): + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=get_test_page(shadow_root_mode=mode), + wait="complete", + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": "css", "value": "custom-element" }, + serialization_options=SerializationOptions(include_shadow_tree="all", max_dom_depth=1) + ) + + expected = [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": { + "id": "custom-element", + }, + "childNodeCount": 0, + "localName": "custom-element", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + "shadowRoot": { + "type": "node", + "sharedId": any_string, + "value": { + "childNodeCount": 1, + "children": [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": { + "id": "in-shadow-dom" + }, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1 + } + } + ], + "mode": mode, + "nodeType": 11, + } + }, + } + } + ] + + recursive_compare(expected, result["nodes"])
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/start_nodes.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/start_nodes.py new file mode 100644 index 0000000..3f46a50 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/start_nodes.py
@@ -0,0 +1,113 @@ +import pytest + +from webdriver.bidi.modules.script import ContextTarget +from ... import any_string, recursive_compare + + +@pytest.mark.parametrize("type,value", [ + ("css", "div"), + ("xpath", "//div"), + ("innerText", "foo") +]) +@pytest.mark.asyncio +async def test_locate_with_context_nodes(bidi_session, inline, top_context, type, value): + url = inline("""<p id="parent"><div data-class="one">foo</div><div data-class="two">foo</div></p>""") + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + context_nodes = await bidi_session.script.evaluate( + expression="""document.querySelector("p")""", + target=ContextTarget(top_context["context"]), + await_promise=True, + ) + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": type, "value": value }, + start_nodes=[context_nodes] + ) + + expected = [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"two"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + } + ] + + recursive_compare(expected, result["nodes"]) + + +@pytest.mark.parametrize("type,value", [ + ("css", "div[data-class='one']"), + ("xpath", ".//div[@data-class='one']"), + ("innerText", "foo") +]) +@pytest.mark.asyncio +async def test_locate_with_multiple_context_nodes(bidi_session, inline, top_context, type, value): + url = inline(""" + <p id="parent-one"><div data-class="one">foo</div><div data-class="two">bar</div></p> + <p id="parent-two"><div data-class="one">foo</div><div data-class="two">bar</div></p> + """) + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + script_result = await bidi_session.script.evaluate( + expression="""document.querySelectorAll("p")""", + target=ContextTarget(top_context["context"]), + await_promise=True, + ) + + context_nodes = script_result["value"] + + result = await bidi_session.browsing_context.locate_nodes( + context=top_context["context"], + locator={ "type": type, "value": value }, + start_nodes=context_nodes + ) + + expected = [ + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + }, + { + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"data-class":"one"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1, + } + } + ] + + recursive_compare(expected, result["nodes"])
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fenced-frame/device-emulation-fenced-frame.https.js b/third_party/blink/web_tests/http/tests/inspector-protocol/fenced-frame/device-emulation-fenced-frame.https.js index bd45a1d..bfabd73 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/fenced-frame/device-emulation-fenced-frame.https.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fenced-frame/device-emulation-fenced-frame.https.js
@@ -22,14 +22,14 @@ let ffSession = session.createChild(sessionId); let ffdp = ffSession.protocol; - // Disable MockScreenOrientation. - await ffSession.evaluate('testRunner.disableMockScreenOrientation()'); - // Wait for FF to finish loading. await ffdp.Page.enable(); ffdp.Page.setLifecycleEventsEnabled({enabled: true}); await ffdp.Page.onceLifecycleEvent(event => event.params.name === 'load'); + // Disable MockScreenOrientation. + await ffSession.evaluate('testRunner.disableMockScreenOrientation()'); + function dumpMetrics() { return { 'screen.width': screen.width,
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/context-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/context-expected.txt new file mode 100644 index 0000000..68c8ae7 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/context-expected.txt
@@ -0,0 +1,4 @@ +This is a wdspec test. +[FAIL] test_params_context_invalid_value + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/invalid-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/invalid-expected.txt new file mode 100644 index 0000000..f372305 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/invalid-expected.txt
@@ -0,0 +1,3 @@ +This is a wdspec test. +Harness Error. harness_status.status = 1 , harness_status.message = +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/locator-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/locator-expected.txt new file mode 100644 index 0000000..1de57a8 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/locator-expected.txt
@@ -0,0 +1,24 @@ +This is a wdspec test. +[FAIL] test_find_by_locator[css-div] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_locator[xpath-//div] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_locator[innerText-foobarBARbaz] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_true_full_match_no_max_depth] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_false_full_match_no_max_depth] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_true_partial_match_no_max_depth] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_false_partial_match_no_max_depth] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_true_full_match_max_depth_zero] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_false_full_match_max_depth_zero] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_true_partial_match_max_depth_zero] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_find_by_inner_text[ignore_case_false_partial_match_max_depth_zero] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/max_node_count-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/max_node_count-expected.txt new file mode 100644 index 0000000..f372305 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/max_node_count-expected.txt
@@ -0,0 +1,3 @@ +This is a wdspec test. +Harness Error. harness_status.status = 1 , harness_status.message = +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/ownership-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/ownership-expected.txt new file mode 100644 index 0000000..f372305 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/ownership-expected.txt
@@ -0,0 +1,3 @@ +This is a wdspec test. +Harness Error. harness_status.status = 1 , harness_status.message = +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/sandbox-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/sandbox-expected.txt new file mode 100644 index 0000000..22166114 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/sandbox-expected.txt
@@ -0,0 +1,10 @@ +This is a wdspec test. +[FAIL] test_locate_nodes_in_sandbox + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_same_node_in_different_sandboxes_returns_same_id + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_same_node_in_default_sandbox_returns_same_id_as_sandbox + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_same_node_in_different_sandboxes_with_root_ownership_returns_different_handles + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/serialization_options-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/serialization_options-expected.txt new file mode 100644 index 0000000..5315ed7 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/serialization_options-expected.txt
@@ -0,0 +1,6 @@ +This is a wdspec test. +[FAIL] test_locate_nodes_serialization_options[open] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_nodes_serialization_options[closed] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/start_nodes-expected.txt b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/start_nodes-expected.txt new file mode 100644 index 0000000..f7d14bd4 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux-chrome/external/wpt/webdriver/tests/bidi/browsing_context/locate_nodes/start_nodes-expected.txt
@@ -0,0 +1,14 @@ +This is a wdspec test. +[FAIL] test_locate_with_context_nodes[css-div] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_with_context_nodes[xpath-//div] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_with_context_nodes[innerText-foo] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_with_multiple_context_nodes[css-div[data-class='one']] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_with_multiple_context_nodes[xpath-.//div[@data-class='one']] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +[FAIL] test_locate_with_multiple_context_nodes[innerText-foo] + AttributeError: 'BrowsingContext' object has no attribute 'locate_nodes' +Harness: the test ran to completion.
diff --git a/third_party/devtools-frontend-internal b/third_party/devtools-frontend-internal index a7ff080..1295415 160000 --- a/third_party/devtools-frontend-internal +++ b/third_party/devtools-frontend-internal
@@ -1 +1 @@ -Subproject commit a7ff080ac0f4814640a0921bc9e0a1da4c419a0e +Subproject commit 1295415c45c6fde572367bf071da3e01f543d209
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index 86df0db..9ff9129 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit 86df0dbc1c17c368aea743d13c2633506c299fe8 +Subproject commit 9ff9129a7e64c56dee0114654b6cd307a058ee49
diff --git a/third_party/fdlibm/ieee754.cc b/third_party/fdlibm/ieee754.cc index 2ada6605..ee10109 100644 --- a/third_party/fdlibm/ieee754.cc +++ b/third_party/fdlibm/ieee754.cc
@@ -21,6 +21,7 @@ #include <limits> #include "base/bit_cast.h" +#include "base/compiler_specific.h" #include "build/build_config.h" #include "third_party/fdlibm/overflowing-math.h"
diff --git a/third_party/perfetto b/third_party/perfetto index 3e779d2..ff3b631 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit 3e779d277b408b64778b247b824c5790072e428f +Subproject commit ff3b6318208109a97dc91f5f653edfca466d3cca
diff --git a/third_party/re2/src b/third_party/re2/src index 7e0c1a9..71857b0 160000 --- a/third_party/re2/src +++ b/third_party/re2/src
@@ -1 +1 @@ -Subproject commit 7e0c1a9e2417e70e5f0efc323267ac71d1fa0685 +Subproject commit 71857b0112ab6d9e1478f0212951c38c4a0ee1c8
diff --git a/third_party/skia b/third_party/skia index fe04635..053490e 160000 --- a/third_party/skia +++ b/third_party/skia
@@ -1 +1 @@ -Subproject commit fe04635b125f29a98ac8a15decef3f6bf3eb9aa3 +Subproject commit 053490edfa703f3433d97a299ee80f2acc93de71
diff --git a/third_party/webrtc b/third_party/webrtc index 601ac2e..5fe4953 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit 601ac2eea89a496ff32923aab0666376464eba8b +Subproject commit 5fe4953d2bf1129285ada4c3f785071f01e0b5bb
diff --git a/third_party/zlib/google/compression_utils.cc b/third_party/zlib/google/compression_utils.cc index 279ea073..c2b17e4 100644 --- a/third_party/zlib/google/compression_utils.cc +++ b/third_party/zlib/google/compression_utils.cc
@@ -4,7 +4,6 @@ #include "third_party/zlib/google/compression_utils.h" -#include "base/bit_cast.h" #include "base/check_op.h" #include "base/process/memory.h" #include "base/sys_byteorder.h" @@ -24,8 +23,8 @@ // uLongf can be larger than size_t. uLongf compressed_size_long = static_cast<uLongf>(output_buffer_size); if (zlib_internal::GzipCompressHelper( - base::bit_cast<Bytef*>(output_buffer), &compressed_size_long, - base::bit_cast<const Bytef*>(input.data()), + reinterpret_cast<Bytef*>(output_buffer), &compressed_size_long, + reinterpret_cast<const Bytef*>(input.data()), static_cast<uLongf>(input.size()), malloc_fn, free_fn) != Z_OK) { return false; } @@ -55,7 +54,7 @@ if (zlib_internal::GzipCompressHelper( compressed_data, &compressed_data_size, - base::bit_cast<const Bytef*>(input.data()), input_size, nullptr, + reinterpret_cast<const Bytef*>(input.data()), input_size, nullptr, nullptr) != Z_OK) { free(compressed_data); return false; @@ -82,8 +81,8 @@ uncompressed_output.resize(uncompressed_size); if (zlib_internal::GzipUncompressHelper( - base::bit_cast<Bytef*>(uncompressed_output.data()), - &uncompressed_size, base::bit_cast<const Bytef*>(input.data()), + reinterpret_cast<Bytef*>(uncompressed_output.data()), + &uncompressed_size, reinterpret_cast<const Bytef*>(input.data()), static_cast<uLongf>(input.length())) == Z_OK) { output->swap(uncompressed_output); return true; @@ -102,8 +101,8 @@ if (uncompressed_size > output.size()) return false; return zlib_internal::GzipUncompressHelper( - base::bit_cast<Bytef*>(output.data()), &uncompressed_size, - base::bit_cast<const Bytef*>(input.data()), + reinterpret_cast<Bytef*>(const_cast<uint8_t*>(output.data())), + &uncompressed_size, reinterpret_cast<const Bytef*>(input.data()), static_cast<uLongf>(input.size())) == Z_OK; } @@ -117,8 +116,8 @@ uLongf uncompressed_size = GetUncompressedSize(input); output->resize(uncompressed_size); return zlib_internal::GzipUncompressHelper( - base::bit_cast<Bytef*>(output->data()), &uncompressed_size, - base::bit_cast<const Bytef*>(input.data()), + reinterpret_cast<Bytef*>(output->data()), &uncompressed_size, + reinterpret_cast<const Bytef*>(input.data()), static_cast<uLongf>(input.size())) == Z_OK; } @@ -128,7 +127,8 @@ uint32_t GetUncompressedSize(base::span<const uint8_t> compressed_data) { return zlib_internal::GetGzipUncompressedSize( - base::bit_cast<Bytef*>(compressed_data.data()), compressed_data.size()); + reinterpret_cast<const Bytef*>(compressed_data.data()), + compressed_data.size()); } } // namespace compression
diff --git a/tools/code_coverage/coverage.py b/tools/code_coverage/coverage.py index 9fe6abd..e622653d 100755 --- a/tools/code_coverage/coverage.py +++ b/tools/code_coverage/coverage.py
@@ -504,12 +504,9 @@ # # For other cases, "%4m" is chosen as it creates some level of parallelism, # but it's not too big to consume too much computing resource or disk space. - # - # "%c" expands out to nothing, but it enables the continuous coverage mode - # where profile counter updates are continuously written to the profraw file. profile_pattern_string = '%1m' if _IsFuzzerTarget(target) else '%4m' expected_profraw_file_name = os.extsep.join( - [target, '%c', profile_pattern_string, PROFRAW_FILE_EXTENSION]) + [target, profile_pattern_string, PROFRAW_FILE_EXTENSION]) expected_profraw_file_path = os.path.join( coverage_utils.GetCoverageReportRootDirPath(OUTPUT_DIR), expected_profraw_file_name) @@ -870,7 +867,7 @@ assert len(targets) == 1, "Only one wpt target can be run" target = targets[0] expected_profraw_file_name = os.extsep.join( - [target, '%c', '%2m', PROFRAW_FILE_EXTENSION]) + [target, '%2m', PROFRAW_FILE_EXTENSION]) expected_profraw_file_path = os.path.join( coverage_utils.GetCoverageReportRootDirPath(OUTPUT_DIR), expected_profraw_file_name)
diff --git a/tools/metrics/histograms/README.md b/tools/metrics/histograms/README.md index 2681fa7..e11084a8 100644 --- a/tools/metrics/histograms/README.md +++ b/tools/metrics/histograms/README.md
@@ -724,7 +724,7 @@ **Note:** You can skip this step if the histogram is expired. This is because tooling automatically records the date and milestone of a histogram's -expiration. +removal. You can provide a custom obsoletion message for a removed histogram via tags on the CL description: @@ -736,8 +736,8 @@ you can use `OBSOLETE_HISTOGRAMS=message`, e.g.: `OBSOLETE_HISTOGRAMS=Patterned histogram Hist.{Token} is replaced by Hist.{Token}.2` * **Notes:** - * The full tag should be put on a single line, even if it is longer than the - maximum CL description width. + * **The full tag should be put on a single line, even if it is longer than the + maximum CL description width.** * You can add multiple obsoletion message tags in one CL. * `OBSOLETE_HISTOGRAMS` messages will be overwritten by histogram-specific ones, if present.
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index c7f2111..4dfd6f2 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -8871,6 +8871,7 @@ <int value="108" label="File System Access extended permission"/> <int value="109" label="3PCD Heuristics Grants"/> <int value="110" label="File System Access Restore Permission"/> + <int value="111" label="Smart Card data"/> </enum> <enum name="ContextMenuIOSCopyImage"> @@ -22252,6 +22253,7 @@ <int value="4753" label="TrustedTypesIsCheck"/> <int value="4754" label="MouseDragOnCancelledMouseMove"/> <int value="4755" label="FedCmDomainHint"/> + <int value="4756" label="LCPImageWasLazy"/> </enum> <enum name="FeaturePolicyFeature">
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index 64cd673..2dd014a 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -1687,6 +1687,18 @@ </summary> </histogram> +<histogram name="Blink.FedCm.Timing.Disconnect" units="ms" + expires_after="2024-06-08"> + <owner>npm@chromium.org</owner> + <owner>web-identity-eng@google.com</owner> + <summary> + Records the time from when the disconnect() request is received by the + browser process to the time in which it is completed, e.g. right before + sending the response back to the renderer process. Records one sample for + every disconnect call which sends a disconnect request. + </summary> +</histogram> + <histogram name="Blink.FedCm.Timing.IdTokenResponse" units="ms" expires_after="2024-06-16"> <owner>yigu@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index 304476b..77154afb 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -2982,6 +2982,7 @@ <suffix name="RegisterProtocolHandler" label="registerProtocolHandler permission"/> <suffix name="SecurityKeyAttestation" label="Security Key attestation"/> + <suffix name="SmartCard" label="Smart card connection permission"/> <suffix name="StorageAccess" label="Storage Access API permission"/> <suffix name="TopLevelStorageAccess" label="Top-level Storage Access API permission"/>
diff --git a/tools/metrics/histograms/metadata/payment/histograms.xml b/tools/metrics/histograms/metadata/payment/histograms.xml index 5ce34e4..809e5c7 100644 --- a/tools/metrics/histograms/metadata/payment/histograms.xml +++ b/tools/metrics/histograms/metadata/payment/histograms.xml
@@ -51,23 +51,6 @@ </summary> </histogram> -<histogram name="PaymentRequest.EventResponse.IsReadyToPay" enum="Boolean" - expires_after="2023-07-02"> - <owner>rouslan@chromium.org</owner> - <owner>web-payments-team@google.com</owner> - <summary> - An Android payment app's response to an IS_READY_TO_PAY intent. The intent - is sent when "new PaymentRequest()" is called in JavaScript, but - only for URL-based payment methods, only for apps that expose the - IS_READY_TO_PAY intent to Chrome, only when Chrome is able to connect to the - service at this intent filter, and only when not in private browsing mode. - The response from IS_READY_TO_PAY is expected to be "true" in the - majority of cases. The value of "false" could be either the - payment app refusing to make payments or an internal error, which should - both be rare. - </summary> -</histogram> - <histogram name="PaymentRequest.Events" units="bitfield value" expires_after="2023-08-27"> <owner>rouslan@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/permissions/enums.xml b/tools/metrics/histograms/metadata/permissions/enums.xml index ae02708a..337c9f6 100644 --- a/tools/metrics/histograms/metadata/permissions/enums.xml +++ b/tools/metrics/histograms/metadata/permissions/enums.xml
@@ -176,6 +176,7 @@ <int value="31" label="PERMISSION_MIDI"/> <int value="32" label="PERMISSION_FILE_SYSTEM_ACCESS"/> <int value="33" label="CAPTURED_SURFACE_CONTROL"/> + <int value="34" label="PERMISSION_SMART_CARD"/> </enum> <enum name="PermissionSourceUI">
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index bc3fdf9..564caf7 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -4524,6 +4524,14 @@ to when the user presses the Continue button. </summary> </metric> + <metric name="Timing.Disconnect"> + <summary> + Records the time in milliseconds from when the disconnect() request is + received by the browser process to the time in which it is completed, e.g. + right before sending the response back to the renderer process. Records + one sample for every disconnect call which sends a disconnect request. + </summary> + </metric> <metric name="Timing.IdTokenResponse"> <summary> Records the time (in milliseconds) from when the user presses the Continue @@ -4659,6 +4667,14 @@ to when the user presses the Continue button. </summary> </metric> + <metric name="Timing.Disconnect"> + <summary> + Records the time in milliseconds from when the disconnect() request is + received by the browser process to the time in which it is completed, e.g. + right before sending the response back to the renderer process. Records + one sample for every disconnect call which sends a disconnect request. + </summary> + </metric> <metric name="Timing.IdTokenResponse"> <summary> Records the time (in milliseconds) from when the user presses the Continue
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 1b2a0cc..cf192c1 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,24 +5,24 @@ "full_remote_path": "perfetto-luci-artifacts/3e53e144bee271ec558363df2e561a77d7e0b789/linux-arm64/trace_processor_shell" }, "win": { - "hash": "594ae17bc084dbff01fa2beb6605d323aa82496d", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/7c24b00c696462d5b8f1bbc2901be8f825f831d0/trace_processor_shell.exe" + "hash": "7acc74992e9f707df1df32f68e1411cc56ab0cc8", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/8c0a74dad3bea98a5284009a273f5a4b573ecfe9/trace_processor_shell.exe" }, "linux_arm": { "hash": "8aa911491cd365131216862ae495e18424ebe1b2", "full_remote_path": "perfetto-luci-artifacts/3e53e144bee271ec558363df2e561a77d7e0b789/linux-arm/trace_processor_shell" }, "mac": { - "hash": "7a47174c223846955ee7acb6e776e4c33a50798b", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/7c24b00c696462d5b8f1bbc2901be8f825f831d0/trace_processor_shell" + "hash": "5d8dbe78fcd33af1ed7c69c5e49a5b44f9159848", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/8c0a74dad3bea98a5284009a273f5a4b573ecfe9/trace_processor_shell" }, "mac_arm64": { - "hash": "0420c906651068ea3e381219467f160cdfb6d21a", - "full_remote_path": "perfetto-luci-artifacts/v40.0/mac-arm64/trace_processor_shell" + "hash": "28d38c5eef93cf965ad3b3c656d4419f8e55f864", + "full_remote_path": "perfetto-luci-artifacts/3e53e144bee271ec558363df2e561a77d7e0b789/mac-arm64/trace_processor_shell" }, "linux": { - "hash": "c46ffb0ecf749e9898cab237abd8de80b5cf685c", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/7c24b00c696462d5b8f1bbc2901be8f825f831d0/trace_processor_shell" + "hash": "a72dcf8e23bc86107f2d7929810907e2b5082e31", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/12b9622ad9250c5411740ffcfbd8958f47bd7cf5/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/visual_debugger/app.html b/tools/visual_debugger/app.html index c27a254..e15f083 100644 --- a/tools/visual_debugger/app.html +++ b/tools/visual_debugger/app.html
@@ -247,22 +247,22 @@ <div style='float: right' class='sectionTitle'> Scale <select id="viewerscale"> - <option>100%</option> - <option>50%</option> - <option>200%</option> - <option disabled>Free Camera</option> + <option id="100pct">100%</option> + <option id="50pct">50%</option> + <option id="200pct">200%</option> + <option id="freeCam" disabled>Free Camera</option> </select> </div> <div style='float: right' class='sectionTitle'> Orientation <select id="viewerorientation"> - <option class="default-orientation">0 deg clockwise</option> - <option class="default-orientation">90 deg clockwise</option> - <option class="default-orientation">180 deg clockwise</option> - <option class="default-orientation">270 deg clockwise</option> - <option class="default-orientation">Horizontal Flip</option> - <option class="default-orientation">Vertical Flip</option> + <option id="0deg">0 deg clockwise</option> + <option id="90deg">90 deg clockwise</option> + <option id="180deg">180 deg clockwise</option> + <option id="270deg">270 deg clockwise</option> + <option id="hFlip">Horizontal Flip</option> + <option id="vFlip">Vertical Flip</option> </select> </div> @@ -416,6 +416,30 @@ restoreFilters(); } + /** + * Gets value from localStorage if it exists, and sets the <option> with that + * id to be selected in options_el. + * @param {string} key: The localStorage key to get if present. + * @param {Element} options_el: The <select> Element to be updated. + * @returns {boolean} Whether a value from localStorage was used to change the + * the selected option. + */ + function getStoredOptionsValue(key, options_el) { + let storedId = localStorage.getItem(key); + if (storedId != null) { + let option = options_el.namedItem(storedId); + if (option == null) { + console.error(`No option with id ${storedId} found on ${options_el.id}`); + localStorage.removeItem(key); + } else { + options_el.selectedIndex = option.index; + return true; + } + } + + return false; + } + function setUpPlayer() { // First, set up the viewer. const canvas = document.querySelector('#canvas'); @@ -472,8 +496,10 @@ let currentMouseY = 0; let zoom = 100; const viewerScale = document.querySelector("#viewerscale"); - viewerScale.addEventListener('input', () => { - if (viewerScale.value != "Free Camera") { + + function scaleChanged() { + let selected = viewerScale.selectedOptions[0]; + if (selected.id != "freeCam") { player.setViewerScale(viewerScale.value); zoom = parseInt(viewerScale.value); } @@ -493,21 +519,37 @@ }, {passive:false}); } + } + const scaleKey = "scale"; + if (getStoredOptionsValue(scaleKey, viewerScale)) { + scaleChanged(); + } + viewerScale.addEventListener('input', () => { + scaleChanged(); + localStorage.setItem(scaleKey, viewerScale.selectedOptions[0].id); }); const viewerOrientation = document.querySelector("#viewerorientation"); - viewerOrientation.addEventListener('input', () => { + + function orientationChanged() { + let selected = viewerOrientation.selectedOptions[0]; + // Change dropdown style when setting non-zero orientation. + if (selected.id != '0deg') { + viewerOrientation.classList.add("nonzero-orientation"); + } else { + viewerOrientation.classList.remove("nonzero-orientation"); + } player.setViewerOrientation(viewerOrientation.value); - }); + } + const orientationKey = 'orientation'; + if (getStoredOptionsValue(orientationKey, viewerOrientation)) { + orientationChanged(); + } viewerOrientation.addEventListener('change', () => { - // change dropdown style when rotation occurs - if (viewerOrientation.value !== "0 deg clockwise") { - document.getElementById("viewerorientation").className = "selected-orientation"; - } - else { - document.getElementById("viewerorientation").className = "default-orientation"; - } + orientationChanged(); + localStorage.setItem(orientationKey, viewerOrientation.selectedOptions[0].id); }); + }
diff --git a/tools/visual_debugger/style.css b/tools/visual_debugger/style.css index ef4311a..b7972e8 100644 --- a/tools/visual_debugger/style.css +++ b/tools/visual_debugger/style.css
@@ -81,13 +81,14 @@ --mdc-theme-on-primary: white; } -.default-orientation { - background: white; +.nonzero-orientation { + background: rgba(255, 0, 0, 0.2);; color: black; } -.selected-orientation { - background: rgba(255, 0, 0, 0.2);; +/* Don't color the option elements */ +.nonzero-orientation > option { + background: white; color: black; }
diff --git a/ui/accessibility/ax_tree_fuzzer_util.cc b/ui/accessibility/ax_tree_fuzzer_util.cc index 47cacd4..2beeb0f9 100644 --- a/ui/accessibility/ax_tree_fuzzer_util.cc +++ b/ui/accessibility/ax_tree_fuzzer_util.cc
@@ -4,6 +4,7 @@ #include "ui/accessibility/ax_tree_fuzzer_util.h" +#include "base/containers/cxx20_erase_vector.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_node.h" #include "ui/accessibility/ax_node_data.h" @@ -162,10 +163,7 @@ // To delete a node, just find the parent and update the child list to // no longer include this node. ui::AXNodeData parent_update = parent->data(); - parent_update.child_ids.erase( - std::remove(parent_update.child_ids.begin(), - parent_update.child_ids.end(), node->id()), - parent_update.child_ids.end()); + base::Erase(parent_update.child_ids, node->id()); tree_update.nodes.push_back(parent_update); updated_nodes.emplace(parent_update.id);
diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc index 5182a3d..c319b27 100644 --- a/ui/aura/gestures/gesture_recognizer_unittest.cc +++ b/ui/aura/gestures/gesture_recognizer_unittest.cc
@@ -368,6 +368,13 @@ } } + void OnWindowDestroyed(Window* window) override { + if (window == window_) { + window_ = nullptr; + } + GestureEventConsumeDelegate::OnWindowDestroyed(window); + } + void ReceivedAck() { ReceivedAckImpl(false); } @@ -402,7 +409,7 @@ false /* is_source_touch_event_set_blocking */); } - raw_ptr<Window, DanglingUntriaged> window_; + raw_ptr<Window> window_; raw_ptr<WindowEventDispatcher> dispatcher_; AckState synchronous_ack_for_next_event_; std::list<uint32_t> sent_events_ids_;
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb index a5f7a813..f2a1140 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -250,7 +250,7 @@ <translation id="3003189754374775221">Mreža <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, poveži</translation> <translation id="3003633581067744647">Prebaci na prikaz sličice</translation> <translation id="3016566519832145558">Oprez: ovi fajlovi su privremeni i moguće je da će se automatski izbrisati radi oslobađanja prostora na disku.</translation> -<translation id="3029114385395636667">Omogućite Google Dokumente van mreže da vam Dokumenti, Tabele i Slajdovi budu dostupni offline.</translation> +<translation id="3029114385395636667">Omogućite Google Dokumente offline da vam Dokumenti, Tabele i Slajdovi budu dostupni offline.</translation> <translation id="303198083543495566">Geografija</translation> <translation id="3044404008258011032">Da vratite ove stavke, prevucite ih u novi folder izvan otpada. Izvorni folder "<ph name="PARENT_FOLDER_NAME" />" ovih stavki je izbrisan.</translation> <translation id="3047197340186497470">kineski dayi</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb index adbc68a..b16cca7a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -727,7 +727,7 @@ <translation id="6594855146910089723">Umeshiriki folda hii na Linux na Parallels Desktop</translation> <translation id="6607272825297743757">Maelezo ya faili</translation> <translation id="6609332149380188670">Umeshiriki folda <ph name="NUMBER_OF_ITEMS" /> na Parallels Desktop</translation> -<translation id="6629518321609546825">Weka angalau nambari nne</translation> +<translation id="6629518321609546825">Weka angalau namba nne</translation> <translation id="6643016212128521049">Futa</translation> <translation id="6650726141019353908">Kipepeo wa waridi</translation> <translation id="6657585470893396449">Nenosiri</translation> @@ -745,7 +745,7 @@ <translation id="6794539005637808366">Rejesha kipengee au buruta ukipeleke kwenye folda mpya iliyo nje ya tupio</translation> <translation id="6795884519221689054">Panda</translation> <translation id="6806699711453372963">Dhibiti kushiriki katika Linux</translation> -<translation id="6806796368146926706">Mbinu inayojumuisha herufi na nambari kwenye kibodi ya Kijapani</translation> +<translation id="6806796368146926706">Mbinu inayojumuisha herufi na namba kwenye kibodi ya Kijapani</translation> <translation id="6808193438228982088">Mbweha</translation> <translation id="6823166707458800069">Nakala za faili zote zilizohifadhiwa kwenye folda hii huhifadhiwa kiotomatiki mtandaoni.</translation> <translation id="6825883775269213504">Kirusi</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb index 732ae0ef..b5fbd2a1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -557,7 +557,7 @@ 無論裝置發生任何狀況,您的檔案都安全存放於 Google 雲端硬碟。<ph name="MARKUP_6" /> <ph name="MARKUP_7" />檔案集中存放,<ph name="MARKUP_8" /> 方便共用、建立檔案並與他人協同合作。<ph name="MARKUP_9" /></translation> -<translation id="5275973617553375938">從 Google 雲端硬碟還原檔案</translation> +<translation id="5275973617553375938">從 Google 雲端硬碟還原的檔案</translation> <translation id="5278111733643988471">如要還原這個項目,請將該項目從垃圾桶中拖曳到新資料夾,因為這個項目所屬的資料夾「<ph name="PARENT_FOLDER_NAME" />」已經刪除。</translation> <translation id="5283101102242354279">在無痕模式中開啟擴充功能:</translation> <translation id="5286194356314741248">掃描中</translation>
diff --git a/ui/display/display_layout.cc b/ui/display/display_layout.cc index d155ef0..53d30f78 100644 --- a/ui/display/display_layout.cc +++ b/ui/display/display_layout.cc
@@ -12,6 +12,7 @@ #include "base/check.h" #include "base/check_op.h" #include "base/containers/contains.h" +#include "base/containers/cxx20_erase_vector.h" #include "base/logging.h" #include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" @@ -620,12 +621,9 @@ } void DisplayLayout::RemoveDisplayPlacements(const DisplayIdList& list) { - placement_list.erase( - std::remove_if(placement_list.begin(), placement_list.end(), - [list](const DisplayPlacement& placement) { - return base::Contains(list, placement.display_id); - }), - placement_list.end()); + base::EraseIf(placement_list, [&list](const DisplayPlacement& placement) { + return base::Contains(list, placement.display_id); + }); for (DisplayPlacement& placement : placement_list) { if (base::Contains(list, placement.parent_display_id)) placement.parent_display_id = primary_id;
diff --git a/ui/events/devices/device_data_manager.cc b/ui/events/devices/device_data_manager.cc index b398c0a..8403623e 100644 --- a/ui/events/devices/device_data_manager.cc +++ b/ui/events/devices/device_data_manager.cc
@@ -7,6 +7,7 @@ #include "base/at_exit.h" #include "base/check_op.h" #include "base/containers/contains.h" +#include "base/containers/cxx20_erase_vector.h" #include "base/functional/bind.h" #include "base/observer_list.h" #include "base/ranges/algorithm.h" @@ -107,15 +108,14 @@ void DeviceDataManager::UpdateTouchMap() { // Remove all entries for devices from the |touch_map_| that are not currently // connected. - auto last_iter = std::remove_if( - touch_map_.begin(), touch_map_.end(), + base::EraseIf( + touch_map_, [this](const std::pair<int, TouchDeviceTransform>& map_entry) { // Remove the device identified by |map_entry| from |touch_map_| if it // is not present in the list of currently connected devices. return !base::Contains(touchscreen_devices_, map_entry.second.device_id, &TouchscreenDevice::id); }); - touch_map_.erase(last_iter, touch_map_.end()); } void DeviceDataManager::ApplyTouchRadiusScale(int touch_device_id,
diff --git a/ui/gfx/linux/gbm_wrapper.cc b/ui/gfx/linux/gbm_wrapper.cc index 627a8c6..e70f7579 100644 --- a/ui/gfx/linux/gbm_wrapper.cc +++ b/ui/gfx/linux/gbm_wrapper.cc
@@ -8,6 +8,7 @@ #include <memory> #include <utility> +#include "base/containers/cxx20_erase_vector.h" #include "base/logging.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr_exclusion.h" @@ -466,10 +467,7 @@ for (const auto& [entry_format, entry_flags, entry_modifier] : modifier_blocklist_) { if (entry_format == format && entry_flags == flags) { - filtered_modifiers.erase( - std::remove(filtered_modifiers.begin(), filtered_modifiers.end(), - entry_modifier), - filtered_modifiers.end()); + base::Erase(filtered_modifiers, entry_modifier); } }
diff --git a/ui/gtk/select_file_dialog_linux_gtk.cc b/ui/gtk/select_file_dialog_linux_gtk.cc index 95800be..c0262ce1 100644 --- a/ui/gtk/select_file_dialog_linux_gtk.cc +++ b/ui/gtk/select_file_dialog_linux_gtk.cc
@@ -16,6 +16,7 @@ #include <utility> #include <vector> +#include "base/containers/cxx20_erase_vector.h" #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/no_destructor.h" @@ -604,11 +605,9 @@ } auto filenames = GtkFileChooserGetFilenames(dialog); - filenames.erase(std::remove_if(filenames.begin(), filenames.end(), - [this](const base::FilePath& path) { - return CallDirectoryExistsOnUIThread(path); - }), - filenames.end()); + base::EraseIf(filenames, [this](const base::FilePath& path) { + return CallDirectoryExistsOnUIThread(path); + }); if (filenames.empty()) { FileNotSelected(dialog); return;
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc index 59ae637..4bb32a1 100644 --- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc +++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
@@ -12,6 +12,7 @@ #include <utility> #include "base/containers/contains.h" +#include "base/containers/cxx20_erase_vector.h" #include "base/logging.h" #include "base/memory/raw_ptr.h" #include "base/metrics/histogram_functions.h" @@ -165,12 +166,11 @@ // Make sure that the display infos we got have valid connector IDs. // If not, we need to remove the display info from the list. This removes // any zombie connectors. - display_infos.erase( - std::remove_if(display_infos.begin(), display_infos.end(), - [&valid_connector_ids](const auto& display_info) { - return !base::Contains( - valid_connector_ids, display_info->connector()->connector_id);}), - display_infos.end()); + base::EraseIf( + display_infos, [&valid_connector_ids](const auto& display_info) { + return !base::Contains(valid_connector_ids, + display_info->connector()->connector_id); + }); for (auto& display_info : display_infos) { display_snapshots.emplace_back(CreateDisplaySnapshot(
diff --git a/ui/strings/translations/ui_strings_sw.xtb b/ui/strings/translations/ui_strings_sw.xtb index d74d4f9..a2e39b8 100644 --- a/ui/strings/translations/ui_strings_sw.xtb +++ b/ui/strings/translations/ui_strings_sw.xtb
@@ -49,7 +49,7 @@ <translation id="2295140143284145483">Utafiti</translation> <translation id="2297836609126180313"><ph name="QUANTITY" /> TB/s</translation> <translation id="2353636109065292463">Inaangalia muunganisho wako wa intaneti</translation> -<translation id="2388990488038464401">Je, ungependa kutumia simu yako kupigia nambari hii?</translation> +<translation id="2388990488038464401">Je, ungependa kutumia simu yako kupigia namba hii?</translation> <translation id="2435457462613246316">Onyesha nenosiri</translation> <translation id="24452542372838207">Panua arifa</translation> <translation id="2445449901874883781">Tumia uzito wa juu</translation> @@ -110,7 +110,7 @@ <translation id="4588090240171750605">Sogeza Kulia</translation> <translation id="4689010477870442157">{YEARS,plural, =1{Mwaka 1 Uliopita}other{Miaka # Iliyopita}}</translation> <translation id="4724120544754982507">Kituo cha Arifa, arifa <ph name="UNREAD_NOTIFICATION_COUNT" /> ambazo hujasoma</translation> -<translation id="4729257764711776855">nambari</translation> +<translation id="4729257764711776855">namba</translation> <translation id="4746179598275229723">Kiendelezi kimebanduliwa</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{Umesalia mwezi 1}other{Imesalia miezi #}}</translation> <translation id="4888938634149558681">Piga simu</translation>
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn index 44f8ecd..b566b20c 100644 --- a/ui/views/BUILD.gn +++ b/ui/views/BUILD.gn
@@ -326,6 +326,7 @@ "accessibility/view_accessibility_utils.cc", "accessible_pane_view.cc", "action_view_controller.cc", + "action_view_interface.cc", "animation/animation_abort_handle.cc", "animation/animation_builder.cc", "animation/animation_delegate_views.cc",
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.cc b/ui/views/accessibility/view_ax_platform_node_delegate.cc index 6fec8d7d..2fcb152 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate.cc +++ b/ui/views/accessibility/view_ax_platform_node_delegate.cc
@@ -12,6 +12,7 @@ #include <vector> #include "base/containers/adapters.h" +#include "base/containers/cxx20_erase_vector.h" #include "base/functional/bind.h" #include "base/i18n/rtl.h" #include "base/lazy_instance.h" @@ -952,15 +953,9 @@ view_to_check->GetViewsInGroup(group_id, views_in_group); // Remove any views that are ignored in the accessibility tree. - views_in_group->erase( - std::remove_if( - views_in_group->begin(), views_in_group->end(), - [](View* view) { - ViewAccessibility& view_accessibility = - view->GetViewAccessibility(); - return view_accessibility.IsIgnored(); - }), - views_in_group->end()); + base::EraseIf(*views_in_group, [](View* view) { + return view->GetViewAccessibility().IsIgnored(); + }); } bool ViewAXPlatformNodeDelegate::TableHasColumnOrRowHeaderNodeForTesting()
diff --git a/ui/views/action_view_controller.h b/ui/views/action_view_controller.h index 01a6cebd..7625bec4 100644 --- a/ui/views/action_view_controller.h +++ b/ui/views/action_view_controller.h
@@ -81,15 +81,15 @@ &ActionViewControllerTemplate<ViewT>::ActionItemChanged, base::Unretained(this))); ActionItemChanged(); - action_view->InvalidateLayout(); - action_view->SchedulePaint(); } - void TriggerAction() { + void InvokeAction() { actions::ActionItem* action_item = GetActionItem(); - if (action_item) { - action_item->InvokeAction(); + ViewT* action_view = GetActionView(); + if (!action_item || !action_view) { + return; } + action_view->GetActionViewInterface()->InvokeActionImpl(action_item); } ViewT* GetActionView() { @@ -103,8 +103,8 @@ action_view_tracker_.SetView(action_view); // base::Unretained is okay because by view controller patterns, view // controllers must outlive the views they manage. - action_view->GetActionViewInterface()->LinkActionTriggerToView( - base::BindRepeating(&ActionViewControllerTemplate::TriggerAction, + action_view->GetActionViewInterface()->LinkActionInvocationToView( + base::BindRepeating(&ActionViewControllerTemplate::InvokeAction, base::Unretained(this))); LinkActionItemAndView(); }
diff --git a/ui/views/action_view_controller_unittest.cc b/ui/views/action_view_controller_unittest.cc index 6a969c0..1da9e0e 100644 --- a/ui/views/action_view_controller_unittest.cc +++ b/ui/views/action_view_controller_unittest.cc
@@ -7,18 +7,60 @@ #include <memory> #include <utility> +#include "base/memory/raw_ptr.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/actions/actions.h" +#include "ui/base/class_property.h" +#include "ui/base/metadata/metadata_header_macros.h" +#include "ui/base/metadata/metadata_impl_macros.h" #include "ui/events/base_event_utils.h" #include "ui/events/event.h" #include "ui/events/types/event_type.h" #include "ui/gfx/geometry/point.h" +#include "ui/views/action_view_interface.h" #include "ui/views/controls/button/md_text_button.h" #include "ui/views/test/button_test_api.h" #include "ui/views/test/views_test_base.h" #include "ui/views/view.h" namespace { + +DEFINE_UI_CLASS_PROPERTY_KEY(bool, kTestPropertyValueKey, false) + +// More specific functionalities are tested for each individual +// ActionViewInterface. +class TestButtonActionViewInterface : public views::ButtonActionViewInterface { + public: + explicit TestButtonActionViewInterface(views::Button* action_view) + : ButtonActionViewInterface(action_view), action_view_(action_view) {} + + // ButtonActionViewInterface: + void InvokeActionImpl(actions::ActionItem* action_item) override { + action_item->InvokeAction(actions::ActionInvocationContext::Builder() + .SetProperty(kTestPropertyValueKey, true) + .Build()); + } + + private: + raw_ptr<views::Button> action_view_; +}; + +class TestActionButton : public views::Button { + METADATA_HEADER(TestActionButton, Button) + public: + TestActionButton() = default; + ~TestActionButton() override = default; + + // View: + std::unique_ptr<views::ActionViewInterface> GetActionViewInterface() + override { + return std::make_unique<TestButtonActionViewInterface>(this); + } +}; + +BEGIN_METADATA(TestActionButton) +END_METADATA + const std::u16string kActionTextDisabled = u"Test Action Disabled"; const std::u16string kActionTextEnabled = u"Test Action Enabled"; constexpr int kTestActionIdDisabled = 0; @@ -137,4 +179,28 @@ EXPECT_FALSE(first_action_view->GetEnabled()); } +TEST_F(ActionViewControllerTest, TestActionInvocationContext) { + std::unique_ptr<actions::ActionItem> action_item = CreateEnabledActionItem(); + auto invoke_action_callback = [](actions::ActionItem* action_item, + actions::ActionInvocationContext context) { + EXPECT_EQ(context.GetProperty(kTestPropertyValueKey), true); + }; + action_item->SetInvokeActionCallback( + base::BindRepeating(invoke_action_callback)); + + std::unique_ptr<Widget> test_widget = CreateTestWidget(); + View* parent_view = test_widget->SetContentsView(std::make_unique<View>()); + TestActionButton* test_button = + parent_view->AddChildView(std::make_unique<TestActionButton>()); + test_widget->Show(); + + ActionViewController action_view_controller = ActionViewController(); + action_view_controller.CreateActionViewRelationship( + test_button, action_item->GetAsWeakPtr()); + ui::MouseEvent e(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), + ui::EventTimeForNow(), 0, 0); + views::test::ButtonTestApi test_api(test_button); + test_api.NotifyClick(e); +} + } // namespace views
diff --git a/ui/views/action_view_interface.cc b/ui/views/action_view_interface.cc new file mode 100644 index 0000000..b087fdd --- /dev/null +++ b/ui/views/action_view_interface.cc
@@ -0,0 +1,15 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/views/action_view_interface.h" + +#include "ui/actions/actions.h" + +namespace views { + +void ActionViewInterface::InvokeActionImpl(actions::ActionItem* action_item) { + action_item->InvokeAction(); +} + +} // namespace views
diff --git a/ui/views/action_view_interface.h b/ui/views/action_view_interface.h index 6a4b3d5..0ae7687 100644 --- a/ui/views/action_view_interface.h +++ b/ui/views/action_view_interface.h
@@ -7,6 +7,8 @@ #include "base/functional/callback.h" #include "base/functional/callback_forward.h" +#include "ui/actions/actions.h" +#include "ui/views/views_export.h" namespace actions { class ActionItem; @@ -36,22 +38,20 @@ // explicit ViewTypeActionViewInterface(ViewType* action_view) // : BaseActionViewInterface(action_view), action_view_(action_view) {} // ~ViewTypeActionViewInterface() override = default; - -// // optional overrides: -// void ActionItemChangedImpl(actions::ActionItem* action_item) override; -// void LinkActionTriggerToView( -// base::RepeatingClosure trigger_action_callback) override; +// +// // optional: override virtual methods. // private: // raw_ptr<ViewType> action_view_; // }; -class ActionViewInterface { +class VIEWS_EXPORT ActionViewInterface { public: ActionViewInterface() = default; virtual ~ActionViewInterface() = default; virtual void ActionItemChangedImpl(actions::ActionItem* action_item) {} - virtual void LinkActionTriggerToView( + virtual void LinkActionInvocationToView( base::RepeatingClosure trigger_action_callback) {} + virtual void InvokeActionImpl(actions::ActionItem* action_item); }; } // namespace views
diff --git a/ui/views/controls/button/button.cc b/ui/views/controls/button/button.cc index a95394a1..c994b37 100644 --- a/ui/views/controls/button/button.cc +++ b/ui/views/controls/button/button.cc
@@ -815,12 +815,12 @@ } } -void ButtonActionViewInterface::LinkActionTriggerToView( - base::RepeatingClosure trigger_action_callback) { +void ButtonActionViewInterface::LinkActionInvocationToView( + base::RepeatingClosure invoke_action_callback) { if (!action_view_) { return; } - action_view_->SetCallback(trigger_action_callback); + action_view_->SetCallback(invoke_action_callback); } BEGIN_METADATA(Button)
diff --git a/ui/views/controls/button/button.h b/ui/views/controls/button/button.h index 715e26d2..ef3b06a 100644 --- a/ui/views/controls/button/button.h +++ b/ui/views/controls/button/button.h
@@ -6,6 +6,7 @@ #define UI_VIEWS_CONTROLS_BUTTON_BUTTON_H_ #include <memory> +#include <optional> #include <utility> #include "base/functional/bind.h" @@ -14,6 +15,7 @@ #include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "third_party/abseil-cpp/absl/types/variant.h" +#include "ui/actions/actions.h" #include "ui/events/event_constants.h" #include "ui/gfx/animation/throb_animation.h" #include "ui/native_theme/native_theme.h" @@ -404,8 +406,8 @@ // BaseActionViewInterface: void ActionItemChangedImpl(actions::ActionItem* action_item) override; - void LinkActionTriggerToView( - base::RepeatingClosure trigger_action_callback) override; + void LinkActionInvocationToView( + base::RepeatingClosure invoke_action_callback) override; private: raw_ptr<Button> action_view_;
diff --git a/ui/views/controls/button/button_unittest.cc b/ui/views/controls/button/button_unittest.cc index db824f8b..d179d01 100644 --- a/ui/views/controls/button/button_unittest.cc +++ b/ui/views/controls/button/button_unittest.cc
@@ -1045,7 +1045,7 @@ ui::MouseEvent e(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(), 0, 0); bool called = false; - button()->GetActionViewInterface()->LinkActionTriggerToView( + button()->GetActionViewInterface()->LinkActionInvocationToView( base::BindRepeating([](bool* called_bool) { *called_bool = true; }, &called)); views::test::ButtonTestApi test_api(button());
diff --git a/url/mojom/BUILD.gn b/url/mojom/BUILD.gn index 4fd630d..7fc69bd 100644 --- a/url/mojom/BUILD.gn +++ b/url/mojom/BUILD.gn
@@ -46,7 +46,9 @@ # Used by Closure compiler targets in ash/webui/help_app_ui/, so this needs # to generate WebUI bindings in JavaScript on Ash. - use_typescript_sources = !is_chromeos_ash + if (is_chromeos_ash) { + generate_webui_js_bindings = true + } # Legacy JS bindings are needed for Blink regardless of platform. generate_legacy_js_bindings = true
diff --git a/v8 b/v8 index a7b74e0..ba99d7f 160000 --- a/v8 +++ b/v8
@@ -1 +1 @@ -Subproject commit a7b74e0cfb1b4f57a04daafddc4b99ee65ac6925 +Subproject commit ba99d7f61f605e0c4c5131f01ff9d4fc36ab269b